From 2e100c916de7497a8fd0964228c4c3c3f9c78bb3 Mon Sep 17 00:00:00 2001 From: Isak Lerner Date: Fri, 7 Sep 2018 19:40:14 -0700 Subject: [PATCH] first commit of the UnrealEngine4 wrapper by the Palo Alto Group --- wrappers/unrealengine4/.gitignore | 22 + .../Content/BP_RealSenseAPI.uasset | Bin 0 -> 356527 bytes .../Content/BP_RealSenseInspector.uasset | Bin 0 -> 264588 bytes wrappers/unrealengine4/Content/M_BGSeg.uasset | Bin 0 -> 115191 bytes wrappers/unrealengine4/Content/M_Color.uasset | Bin 0 -> 93425 bytes wrappers/unrealengine4/Content/M_Depth.uasset | Bin 0 -> 91194 bytes .../unrealengine4/Content/M_Infrared.uasset | Bin 0 -> 93332 bytes wrappers/unrealengine4/Content/T_Depth.uasset | Bin 0 -> 3584 bytes wrappers/unrealengine4/Content/TestLevel.umap | Bin 0 -> 26844 bytes wrappers/unrealengine4/LICENSE | 202 +++ .../Plugins/RealSense/RealSense.uplugin | 28 + .../Plugins/RealSense/Resources/Icon128.png | Bin 0 -> 7121 bytes .../Source/RealSense/Private/ColorMap.inl | 212 +++ .../RealSense/Private/DepthColorizer.cpp | 88 + .../Source/RealSense/Private/DepthColorizer.h | 9 + .../RealSense/Private/DynamicTexture.cpp | 201 +++ .../Source/RealSense/Private/DynamicTexture.h | 54 + .../RealSense/Source/RealSense/Private/PCH.h | 13 + .../Source/RealSense/Private/Profiler.h | 169 ++ .../Source/RealSense/Private/Profiler.inl | 169 ++ .../RealSense/Private/RealSenseContext.cpp | 86 + .../Private/RealSenseDetailCustomization.cpp | 230 +++ .../Private/RealSenseDetailCustomization.h | 35 + .../RealSense/Private/RealSenseDevice.cpp | 199 +++ .../RealSense/Private/RealSenseInspector.cpp | 640 +++++++ .../RealSense/Private/RealSenseOption.cpp | 63 + .../RealSense/Private/RealSensePluginImpl.cpp | 97 ++ .../RealSense/Private/RealSensePluginImpl.h | 28 + .../RealSense/Private/RealSenseSensor.cpp | 131 ++ .../Source/RealSense/Private/Shared.h | 62 + .../RealSense/Public/RealSenseContext.h | 39 + .../Source/RealSense/Public/RealSenseDevice.h | 53 + .../RealSense/Public/RealSenseInspector.h | 193 +++ .../Source/RealSense/Public/RealSenseNative.h | 33 + .../Source/RealSense/Public/RealSenseOption.h | 45 + .../Source/RealSense/Public/RealSensePlugin.h | 21 + .../Source/RealSense/Public/RealSenseSensor.h | 42 + .../Source/RealSense/Public/RealSenseTypes.h | 174 ++ .../Source/RealSense/RealSense.Build.cs | 47 + .../Plugins/RuntimeMeshComponent/.gitignore | 77 + .../Plugins/RuntimeMeshComponent/LICENSE | 21 + .../Plugins/RuntimeMeshComponent/README.md | 54 + .../Resources/Icon128.png | Bin 0 -> 18496 bytes .../RuntimeMeshComponent.uplugin | 29 + .../Private/RuntimeMesh.cpp | 295 ++++ .../Private/RuntimeMeshActor.cpp | 89 + .../Private/RuntimeMeshBuilder.cpp | 680 ++++++++ .../Private/RuntimeMeshComponent.cpp | 214 +++ .../Private/RuntimeMeshComponentPlugin.cpp | 31 + .../Private/RuntimeMeshComponentProxy.cpp | 172 ++ .../Private/RuntimeMeshComponentProxy.h | 74 + .../Private/RuntimeMeshCore.cpp | 141 ++ .../Private/RuntimeMeshData.cpp | 1538 +++++++++++++++++ .../Private/RuntimeMeshInternalUtilities.h | 166 ++ .../RuntimeMeshLegacySerialization.cpp | 216 +++ .../Private/RuntimeMeshLegacySerialization.h | 24 + .../Private/RuntimeMeshLibrary.cpp | 703 ++++++++ .../Private/RuntimeMeshProxy.cpp | 145 ++ .../Private/RuntimeMeshProxy.h | 83 + .../Private/RuntimeMeshRendering.cpp | 177 ++ .../Private/RuntimeMeshRendering.h | 306 ++++ .../Private/RuntimeMeshSection.cpp | 304 ++++ .../Private/RuntimeMeshSectionProxy.cpp | 186 ++ .../Private/RuntimeMeshSectionProxy.h | 81 + .../Private/RuntimeMeshShapeGenerator.cpp | 360 ++++ .../Private/RuntimeMeshSlicer.cpp | 740 ++++++++ .../RuntimeMeshTessellationUtilities.cpp | 161 ++ .../RuntimeMeshTessellationUtilities.h | 185 ++ .../Private/RuntimeMeshUpdateCommands.h | 69 + .../RuntimeMeshComponent/Public/RuntimeMesh.h | 907 ++++++++++ .../Public/RuntimeMeshActor.h | 48 + .../Public/RuntimeMeshBlueprint.h | 56 + .../Public/RuntimeMeshBuilder.h | 500 ++++++ .../Public/RuntimeMeshCollision.h | 171 ++ .../Public/RuntimeMeshComponent.h | 762 ++++++++ .../Public/RuntimeMeshComponentPlugin.h | 38 + .../Public/RuntimeMeshCore.h | 617 +++++++ .../Public/RuntimeMeshData.h | 1129 ++++++++++++ .../Public/RuntimeMeshGenericVertex.h | 832 +++++++++ .../Public/RuntimeMeshLibrary.h | 100 ++ .../Public/RuntimeMeshSection.h | 498 ++++++ .../Public/RuntimeMeshShapeGenerator.h | 78 + .../Public/RuntimeMeshSlicer.h | 76 + .../RuntimeMeshComponent.Build.cs | 56 + .../Private/RuntimeMeshComponentDetails.cpp | 254 +++ .../Private/RuntimeMeshComponentDetails.h | 27 + .../RuntimeMeshComponentEditorPlugin.cpp | 33 + .../IRuntimeMeshComponentEditorPlugin.h | 36 + .../RuntimeMeshComponentEditor.Build.cs | 63 + wrappers/unrealengine4/README.md | 193 +++ wrappers/unrealengine4/RealSenseUE.uproject | 16 + .../Source/RealSenseUE.Target.cs | 12 + .../Source/RealSenseUE/RealSenseTestActor.cpp | 42 + .../Source/RealSenseUE/RealSenseTestActor.h | 20 + .../Source/RealSenseUE/RealSenseUE.Build.cs | 16 + .../Source/RealSenseUE/RealSenseUE.cpp | 6 + .../Source/RealSenseUE/RealSenseUE.h | 6 + .../Source/RealSenseUEEditor.Target.cs | 12 + .../unrealengine4/doc/img/bp_enum_devices.jpg | Bin 0 -> 94325 bytes .../unrealengine4/doc/img/bp_enum_options.jpg | Bin 0 -> 116384 bytes .../unrealengine4/doc/img/bp_enum_sensors.jpg | Bin 0 -> 87495 bytes .../unrealengine4/doc/img/bp_get_context.jpg | Bin 0 -> 19866 bytes .../doc/img/bp_get_inspector.jpg | Bin 0 -> 43198 bytes .../unrealengine4/doc/img/bp_get_textures.jpg | Bin 0 -> 40645 bytes .../doc/img/bp_load_save_preset.jpg | Bin 0 -> 73765 bytes .../unrealengine4/doc/img/bp_set_option.jpg | Bin 0 -> 120349 bytes wrappers/unrealengine4/doc/img/bp_start.jpg | Bin 0 -> 56265 bytes .../doc/img/bp_stream_config.jpg | Bin 0 -> 90845 bytes .../doc/img/bp_transform_pcl.jpg | Bin 0 -> 102483 bytes wrappers/unrealengine4/doc/img/demo.jpg | Bin 0 -> 96682 bytes .../unrealengine4/doc/img/device_dropdown.jpg | Bin 0 -> 57115 bytes .../unrealengine4/doc/img/hw_inspector.jpg | Bin 0 -> 48499 bytes wrappers/unrealengine4/doc/img/pcl_config.jpg | Bin 0 -> 70466 bytes .../unrealengine4/doc/img/record_playback.jpg | Bin 0 -> 60770 bytes .../doc/img/record_playback_ui.jpg | Bin 0 -> 106274 bytes .../unrealengine4/doc/img/stream_config.jpg | Bin 0 -> 76032 bytes 116 files changed, 17310 insertions(+) create mode 100755 wrappers/unrealengine4/.gitignore create mode 100755 wrappers/unrealengine4/Content/BP_RealSenseAPI.uasset create mode 100755 wrappers/unrealengine4/Content/BP_RealSenseInspector.uasset create mode 100755 wrappers/unrealengine4/Content/M_BGSeg.uasset create mode 100755 wrappers/unrealengine4/Content/M_Color.uasset create mode 100755 wrappers/unrealengine4/Content/M_Depth.uasset create mode 100755 wrappers/unrealengine4/Content/M_Infrared.uasset create mode 100755 wrappers/unrealengine4/Content/T_Depth.uasset create mode 100755 wrappers/unrealengine4/Content/TestLevel.umap create mode 100755 wrappers/unrealengine4/LICENSE create mode 100755 wrappers/unrealengine4/Plugins/RealSense/RealSense.uplugin create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Resources/Icon128.png create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/ColorMap.inl create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/PCH.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.inl create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseContext.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDevice.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseInspector.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseOption.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseSensor.cpp create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Shared.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseContext.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseDevice.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseInspector.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseNative.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseOption.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSensePlugin.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseSensor.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseTypes.h create mode 100755 wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/RealSense.Build.cs create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/.gitignore create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/LICENSE create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/README.md create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Resources/Icon128.png create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/RuntimeMeshComponent.uplugin create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMesh.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshActor.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshBuilder.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponent.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentPlugin.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshCore.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshData.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshInternalUtilities.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLibrary.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSection.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshShapeGenerator.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSlicer.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshUpdateCommands.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMesh.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshActor.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBlueprint.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBuilder.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCollision.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponent.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponentPlugin.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCore.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshData.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshGenericVertex.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshLibrary.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSection.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshShapeGenerator.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSlicer.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/RuntimeMeshComponent.Build.cs create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentEditorPlugin.cpp create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Public/IRuntimeMeshComponentEditorPlugin.h create mode 100755 wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/RuntimeMeshComponentEditor.Build.cs create mode 100755 wrappers/unrealengine4/README.md create mode 100755 wrappers/unrealengine4/RealSenseUE.uproject create mode 100755 wrappers/unrealengine4/Source/RealSenseUE.Target.cs create mode 100755 wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.cpp create mode 100755 wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.h create mode 100755 wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.Build.cs create mode 100755 wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.cpp create mode 100755 wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.h create mode 100755 wrappers/unrealengine4/Source/RealSenseUEEditor.Target.cs create mode 100755 wrappers/unrealengine4/doc/img/bp_enum_devices.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_enum_options.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_enum_sensors.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_get_context.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_get_inspector.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_get_textures.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_load_save_preset.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_set_option.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_start.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_stream_config.jpg create mode 100755 wrappers/unrealengine4/doc/img/bp_transform_pcl.jpg create mode 100755 wrappers/unrealengine4/doc/img/demo.jpg create mode 100755 wrappers/unrealengine4/doc/img/device_dropdown.jpg create mode 100755 wrappers/unrealengine4/doc/img/hw_inspector.jpg create mode 100755 wrappers/unrealengine4/doc/img/pcl_config.jpg create mode 100755 wrappers/unrealengine4/doc/img/record_playback.jpg create mode 100755 wrappers/unrealengine4/doc/img/record_playback_ui.jpg create mode 100755 wrappers/unrealengine4/doc/img/stream_config.jpg diff --git a/wrappers/unrealengine4/.gitignore b/wrappers/unrealengine4/.gitignore new file mode 100755 index 0000000000..71eeaf036d --- /dev/null +++ b/wrappers/unrealengine4/.gitignore @@ -0,0 +1,22 @@ +Binaries/ +Build/ +Debug/ +Intermediate/ +Saved/ + +Plugins/RealSense/Binaries/ +Plugins/RealSense/Intermediate/ + +Content/Collections/ +Content/Developers/ + +.vs/ + +*.sln +*.suo +*.sdf +*.opensdf +*.db +*.opendb +*.exe +*.pdb diff --git a/wrappers/unrealengine4/Content/BP_RealSenseAPI.uasset b/wrappers/unrealengine4/Content/BP_RealSenseAPI.uasset new file mode 100755 index 0000000000000000000000000000000000000000..e87ca3c965bf93dfd6fad2904539528055160358 GIT binary patch literal 356527 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

er6pDRuOj5+xF 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 M)g6CmLC5I-0|1is-~a#s literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/Content/BP_RealSenseInspector.uasset b/wrappers/unrealengine4/Content/BP_RealSenseInspector.uasset new file mode 100755 index 0000000000000000000000000000000000000000..47c8f956092cd0a0b81b786a0a483d2a990c8c55 GIT binary patch literal 264588 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%0DBP@B5 zjpsp#n(LbuI1|nri}T8&7CUWzoGFQlKUTRy69YWBVuRBSN`8i`wnNmXEuU=m!xNwQh%WO@^FeJk$0aikIpaYd zd7@8FUD#mc7Yyc%bJ@P|LG9zZ$euEIs8f{SK_hoHJd?=AL7Umo`LGQ%UuQFbi(!mG z{*qUYf6(Cob*KZl5=U&xh$inn9i(zUz z9`;YWJLC7+5TMm748Bn_2TcxeT_j|p`l|o>?Zc~>!!;WYK6x83!7?cc*8Ye>KN=KI zcu!;yWg~o_J*Z54k|KXpz(-9!NKzIMcQ=wFP{{ztrdM)$U@R8NYPUvHvLvaI0h7ct5&Z!7hz#Pu|!&zLZliNo{!Hg^z;i@?-ANRs0)A8$g7)wT8+%m|5WgQAnT$zg+b@|O5sB$CLc(0(CoR2LQ#^#E|K+v8udB2XWhtv%;koLtSmLS!00`-owe;9XbgmM* za%elpAX0X&0o30lXAnp*N%O+^k%iG6inHFMeBj%;q{T%xU@#a?fDcJ<1`qFWVbI1# z5+_x@SlF-f4Ppm|_&zf5!s@L(QM@V9FMh%q9Q5J)?b}zM>(2uxLIS?u6Eq-u`E%EbIeBNq^o970Ol67(TY+Ksk0+j`u+#$1b2)JmBwLy|Y z`WQEi@W*7wzIlsX`gHVId7~lMXggo3*d|wY@{8bA^PH+fpIj^BAD&+J$I{N-;>R4* z%=TOZ1HPH7%ptcp3v0&|Us>4HF^N-hmN+yn+EBRdcfO+~wdiwX27`%yE=1oItL!|k zW1!P_*+kBrpW;`WIbw3C4F%_e18avI2`m2f5b)*GXHNtY3UPiYPKJqOKrBoSoW(4Z z{hq@MTXzR6R06O)69nQ6kR#(01Fi~s>0e@IKs7n|S#LRVi;C@_CCS7fEMv^##?Fa? zyONxpJ-enShcXkckXKyr`SfY{NI=p^%uH%cZ|BbgD_c0)9$T*DYJb#K*hO~q!yyyJ zmqK%3Ksz}+aPphQoB`gW1PA#S|8HNJq{0$jY&AuVGu&AydS!wz;IYLfi_Al#%{60a zHtNd;rROkuo6urE9s@v9zJ1fhK;xf}fnk`*jZY>RaWEda%Fq`(`&ZBUyxSctO0ZGV znQ;?H;({l+g?CVjyH8+rZ?&xkpbr+N=GEfFRNxWgnE*FS&8&FkmeJEQth=*Q+Ok zGz6H?<`X%cNJL zgtZrRY)J6l9Hp(rl*DK<`z^~}P{g`02m=4UitfcBWACP%;ql{%omjL9*aglR2;wUr zVnW|(bsn+T!k#+@>KQ!jvpFt4T)k&;yujZ5*z*?0 zcL0`W^Fym8cLm`>PLfX+Ka-oOEKc(6yE$6s7_Ri;Kkwx;j^vF}oYtY}d`|pq!svjJ zGn(*-+!qgYZI`>i^%haK14C5eq?{XvJA&lH<43;u$61AA<`Rv>#B~P~*40}-9wwcV zGY*(~{TLTH`4AsfDc0evm))qMtjS8dkCVki4tn%O3~rxUNPHrYt0Rjl6Q#QlpfWH7 zWc?OEwrpExax)3|STDDMnAsn@qkbU7fdqlgtv77-EhV2Jo(ZS{)Ya{qcx3^xDKWrI zBY=EHDGbqE-yD{qd@+l{v`HnSc+1;L%{1JPKjwD)IaMpH%OY31tSoTzm%8 zJiO1+a4`pR%Rq`3uiByjm)K{cc=2s2laCCMC^iPN#+W2G0t@!sMG;r7n&bxmvXsyD zhy`?bE;4J^avc^Ng!XZ7&to5 z5#q|Ti7ZaWg*nMN8x;$bRN#WrvqDiEeSe(=N2q%|)j%+I!PF;IlaJ0b#)g90bh)O? zE03A$xp0sZ?k=)HsB$Uf%5#OWR&0BIu;FRWs(^1Fg2>xw=8y`(c zz`)Cd#8lcLpV=iBlwdHKq^ClD9kW}QW&v>y zPGT|}7BcuM=b8M0%j9KogXxda*f_1L!>VAN+=0QZc{T>#8le>bF^DdU8n<2C<|P64 zyzIN1!^H0A4?~@~#ob63`H)#L;N>iAesJ>DTybHi!z`!)l|kl2a*+)z{IT^N#N-%k zGC}6hP{cY1hk5R|5{_|Vl23|SKKIag$v0z(f9{aYuS%D5Jt9=DiOJ6$*kI(B`Qk3= zt+14Tk5d9%&14J~Hvu9JvxfKesKGp(Q~d?vX68zUn(7EripseI1A`bTx!7ZapA_dz z_Kq9ua!>#)81_~+07~-3Ig_Ti!N~hnbl~$zuQ%@MR5H$VkfSW@@49n%)kmr6ClBO& z^CC1~)ihqP>bR`iXT^mae=N#Z;khxgPHJxP^IlqG_EJuL;3(tCp(-{frf=VVw;XIQ zM03L%Jm8tQ#L#;1hF=#H7+zREzK#lh8XI-BG#|Uj*;K*E-5EUYyfQc0iap14@d58y zbC`L-`rY&9-y@QKW6DFZvuu7_az@AJR$P--3!IMw3&cq@>2A>4; z>Mb&pDWyT@3^w-0l79llzIO_K7$ZL2OpHMjeA^D^LH89(_2Pi*O~M?b)XC|IsRwNS zXi{A;Y7S{MU+xhn+R0sSRl@@u=TLJrxr!f-@T4%Mz{htmbmn%|e$coUcqD(xBjb#1 zIWbm^gY@KK8W_dT;>L~_<6w4-1IAOzYqizKL&e@b5?7e(=rP^qzM^>!W&ugT{8%L9 zKMN|eLyf}3z5KwRMVL(@Z^MLMD&u$N#z+}UUvZ7E|0UP)<*k}Gc9QIpycds6kvUD9 zxy544yg<|oh3e?E?YcH$E%fHFW6<2&l?E|#a%2~bg5I*u80f8F-Zn6%=*BAC*t|}e zq`J6w4A8$9^7{1e|L)J?Pm*(s*WD~Z2AW)A?@8lI+UzJP%&T)FtvD*jB9AbnsVeSQ!jWH7mNWVX0^aj7Sy>fv0sxL%QUi7h= zR_umFtTjxq7^J~rQz5QZ0CCUX~`q_*7~hq8e$ zy|Te*^O`X!PUEs6K8bk>dGr96g&dCLEt3z^EMO7_S0*7PgEO3kjXz|2V+lqlBJU@&P;-^@ zZ4@^82_E|35JB*rFOX-!^nr~Pmr=POpbp1e>FrNwa08XW!^if*0?VXKB;!jPHnGBy z2ZSEb&=g84j@Q^AgD4<@F~M`&&PQIj&3IG`PRa3g(IMwWVNCh}lX14Kaxkt(XEq15 zxW(n}hzaSK?HD>4lXKD0g`C3q8=qY0MT}3_!&h}m#@N*d^+e71@+pj;7YuGJlo7R= z=ROOUZZJLfxh>Z?b)Jb09<56~964i?O`UH~`fZgoKY#w!`ry$|K{vPZ;pX`W>=bhP zO`Ao(47T<0JRsBzn0W&p`CtS0y7OGjMG21agl}!s2blTQ=kG86)Jj+*7;Z29CB zu1r8m77>c!=!(3TUnY#&v)CZp@nJG6nKtQ;PXmtooCzGxd%WoPc%VDZ*tn?gO>u5( z#WhzF@;7lOVGO^M*F1ykA{>7B$HvclXXkI?9`mS<2{PO0oVlRi7?}+%V;ifPj<#y7 zG+HMYejCJCy?oYP6SvyQv5kCa&S_BJjL5GSA0O8`Ctznz+tdfy5aZ;|CnaO83+aI2 zaS;!5PJqE2AUI=77kTH7;q#|o^!A|7jz)1P!fjkCpW#f~8@cYDUgeWbQEU@4*iu8( zXB_k{5Lb~r`5B2n1sI+t@1zRBxAG#JNyo&EQ4;_r3t~-JW`?7-2UVH4nqUHF6G$Zs z3tQSO49>jw1!r#v_$n&{xF1Z*iH@och=l5dFbTkfYd;qz(5gEEX9inZ@ZPd&LI7x>D9xa{HwmQ=w^%&M~?6oVL4 zjKdY3jY=;TUaubJ6Y6LRYj1+t7<;Fqjj~uiYl7;`I-ueOp(>?|1Kuod3Rj*kTHpQ- zM||M7Wm4uQQho=6P0`=VWS%e%yl@Hu$4G_E8LX6UpnR!`_}8Zt!th3hiOS|34w-|J z%Z9rr-jDljkLHSVg^dl@fr|BWc2n(aZhV6_o1^YH%Udd@O%%g}g&E|?GN$^aTrJ){ zKL9xwPikm0UIGxIjyqXE##;IO`HS(rHe(`Q3>YOj>s8({X}mZSJLA^)ndeXc=fC?u za1*CPd|zEy5PJC;fhMbrMZ=4W#p)nIZnQ_;G(75?lz>d26DS)1{TQ|+bGcRAlN8cd zy{%7Rln%0MlEK}(GQ4Hq0m~gs{45kTO?L&A9*~(#VDk}87c6aZ0k5)88o=#fan7xJ zyJ*7AgB_R{ilvVa=7XzPr38yLh#a!RrGaEb>L_uV}4tuiTdU{ z2|fYfSp|z<8eEjd4qPu9yFTNx3y)jg`tWT>{KwGw9A8LsH3gP<7&~sSnTL6+l{uT( z2SS?4`S5VgRfkVDA?7?+{k$*FW(kADx6jDl7seBN9_IBfvN^<-pJI>?T2Sf60TJ#} z7-#0LzxuC!<{ES3=^y^x-|7Rq4bp++i~?OrR@#o!q_{oiXYf-+3!Bd6ng!lgd*|Hodmc(xhKkcwq@X9!eMf za0y28&q7UHzRGLCvC;V!UmF1B-0b0bj?MOfy3zIkY1BeRAl`HW=>?BJ-{~j@bIt%5=65}B(6J>WuvsENmp zJeY%Y{B)QE>z}WBQ{Tcy!E?e;Ea2R?Ybv8S4Q5lBRl>IG2zkQL2IOST*fu?LK~A1^85UKd8gO zzYZM4^cKg9ObQu(oTz^$D__B(uw&-QwG!g16?(JqnK%rh^sEh8n9KS8HQw&dlL7w3 zv$bf);!gwti>gavmnpHk`BJ{DXhNG z<;uj{%QZRK6c_{Ncyv7}vp^G1Hc#--LzNBb<1byTbf`C1AT^d6s*w-D6EpL|i(a45EXOpF`*(t$cSY?@&4tl;_imt{YS zSh)Q4uYc9A14DYQ4spcf!wYZ>4JAj;B$8dqUs+T;12tMqluksfq{{^6)@g4H*%TZT zkx(H%LBPX*!(ZR@^5A+hs}Dcs!$j#7oTu~AOX9!*C?ykkHZZ%;VZz|!BSRpqrI>#3a*b_z;EYfad zYtcCF$xVN+0GSB9U_cpk)GS2w*gHz3^b$uMH%!9#!(D?1Rb9=QoJ%`5(~<$ozAX<77KeUL_m7L%O8WaA+5i7)p4%`*A*gx16z57AKz zcl1&C2{s={yDlK(Dx=O>E$h;tQFyyXhg+zI8& zK6zI2%P)Tueb%D&8INGN11$BmWV~KKys(o#eeZ;$8?t)M#PWpjL|`%~fW#0S;s49AyBlM`1B0e(mXSZ603+d!gO?W)TDHrT%ulb?cAvROVQ_p#*9$Zg z?^VAM*{909Pb4Ppc3LtXX^|Vo&!fd$nEdiY9&Fs@L0$awUHu=kxvoiP|IUJQ<;~)l zkc@9Wzn{4%eI_}Z8ROCCJut#wV$ZoU^(YQ)*7FgYuee&M#HJa6rCy3+<~DXKPU1qK z;(4MrZ~yo`2md~R7gjdLA3wDCHLaWfu@d~u&jAWg{66`C-iz)Mz~mM^&o)pDrx)PB+XNv?`a%A;q{rKuQ#D_;zV zCWHjW+IJpfsS`OMHm49Cj)OCKixh5-hxpjcG|0J|N=zKzzOfnP0g;*yOZoDiI9EU7 z6}EB`iuq-lJftI^#6n;Ez$bZSQIBu&2O!@(%s1rhe1(`RQWC@!Jh0j!tDFMdw$z6R{^e*esDI*43ISRf`?xE*IT$ByqTlV{znCc!DC>(IDL0By2jC>@w>^& zWP2~S|6t_0Pq*R%{H=Cx0_ccx-Nhqc0DIf=w=xXLRPRkZ}2&xr;lXC7`S5 zIAW}P$KbAxVKxG}u}^Zx!%ANM)CXO~%hmN~#T-SKD-7KFwla$--*f}FWB%#0-p2eu zE=F7sTqDhinS8rXO&&Dz+zB6SvY$Td+jGpnDdhCCzUSYZz@fLm;Uy3i;;RmA`0&2@ z)nCEQosd5(M^TKtPF3epXM!UG&5KiNj??X|6Xq75LiibpV~`(>5j-fJ(`g-iDzK99 z<(zr)<;$P!>xc+%Gj~FPhGx4;4dA^_eZ{_ss-waGXU$>R=Uj(7=9_R6*vAED||@T z`O|>@P`qloFu;9#GNOkk{DeDh^7{nce3>seK*v`;T@f>3<0W$i4caW+$eTlc<(u*3 z78lGc($SFxeV;ycJ}BRwp!igYn#aC(ACcuj7k3DL?xTEu|7)(L4E{#Z3dkX;Qh`scL^ji8yRFD5o4*?fQFt|1R?Z7Xd2Fix3A!T7uWwDcY^fv`MKn8%LxQ)5Hs1MuvAa1VmJbh;q zf{>6#-OCc2sDgme2v)zdBUhS z8mKWzNv3u_uEu_XWAh&To?8u-`k@}g=EeRb&DBzO30j0qYz8=SJ3`+jut06?q{&j} zzKYAju@`T&PO@w>NxcBqs0)daRvc!hO~G~g@jc(=5mm2Odn$ku&b}^EX-j_DVU;CcwhUl~ujkglI!27X;tA$ag*k z;_T3UfGfD4K7R2;#jscOFJFFL9BTnbn>(kKUeBJl+!1mm)fs=>+Gp&ECHiczl(Z*y zp?ge+gO*`j2d!CRGBF zTL1@?k94?FGVyZ@n?#W`bgV9b5)4)*Hxr17?%fWr(vNfD>luU&%FTC08U;gNOJ^#KS%R*41YgBj$r_piGu2lyq9-+%wB^10() zR|ilC!m)G00Sg6rJj0I(1wP*(+wVc`QF`=gEI3Oqq6A02vv`wRV#mgtT@wVXVrG)Em>h!=<+n@X?M+9zWYlz#b)Zr+;bcdj4gTdExr~edHM3ouOGgA;2VBX zB9CD1`Ja5Yy>lBcUBGbd^AV2?`HRZt2aO{}cl#L?Ts1c8%Q%vw82_d(_^>&>a>3Ka zze;m~K&tTK1910yp(zl~-}RMB$l=)J$B-|q_)9C3Jtna?ivzHmM;~%An0vz6m4ox2 z4C5BmSFJp8XZ>XnM$a1uLKPMy|8ol^6P?XSlaECq&fZ{@5coGvPe=7L!Lp#aFOj;x zEttger^zTxR6p1we#P#GncT*zuea{O)zR^D)ry3>9Q5`;Wx~?Wz%FhY6c(kQm3SvOBrRc0el-5=3u(Q_rn2Yr7&5>~y zA8!j5?S3{U9*$*`VxwYl>ds;Cd*N`rNF6hB$_XpMN@7PJap?>weWnPrzTl^4>gJz&X#D9EF@h84hqJ_mrIXMS!>S ztQp4nlYYgRVlLoz^K%Z}C0%VmI|3Dt}U8S>YewT7~k8U+rw#)t;XDTXZ`S_C1c9 zm}%-Fh8~F%cfHatTqPwRx$XDsYp~=OmQV`YoShHzQhPdHbq7N)8&lpM@LpB9(IUhr zik$smQD<)RCCK35V+J&U#2m-oU}LTY!xdfMZ&x1p`))AO6MAH8}qQ0@#8HRZ=K)xCZpehByMcD zD&^ekRBlolE%B+2-3^dxgnkGYe zj`hJ$$@?ja@9Ol4MmPq`@ynhKiUKv}Y|@M@IbV93TU^F?AI|)s@V3btpj$I1z?(qf z)l-Z1Xh$cKi$mzo3CWvGKl@MekP!MlydT8D0mL zTM~G}OP);V=*>_9_{v9aRu4*J(S2J0BUJ~E&NkqCZlMqDW=Jd2?q z&zXq`aCof$VTL?t=j+uR-E8K)^%Z+2r+hf)_My$N6V^*MT)csqyWSefonzCb0^=<9 zaKT3ku_O;{+T5Y=Rsmi9O!h}Tbo>04FTivmH&@ta;e*ZG5>GGC$xHw_X;chYUy9E?#{jD-}mqN3?Ibb{;E%2m;>e{^;uu|?L4$& zfJMNWP!6cE`BSi=;D?8X*(BIp@|=Tqml^qCev)$ysJ>{W4MVo@wF}O0@Ws>*0gY`k zGF5_PghN@8OfTT61HkQ47b?GD1vm?Y_bw#YlS7k@HOKoY?jRV{430Q~p-JB<;M*y6 zW`YWh9nOOVOZnaFRo`2fTLbhiIy1YX9k=*2HqaA5LwvCMes31Z`{QiJPCr2NHOs- zACp2(%->nJSBaDt$;mV0kZ-XOb8;L#KKm6l=@xRI-dD6^soXijMp7CM)^tOTTcxW7Y zhZrwA540VFLgxRTa2^2cyZ~pB5t1c4c9qujWC4F*a zf74+dl;toNA$7<uTyfE8)I2i4 z9dL5y%@zzi$)krr5h0V^zy9a0z5c7eb(_P-|Nfurp#1-< zKdS{PIOXMsj=D=>Lr84I%=l#SP1urU&fq0}lk?PxK^-b=3?2)$J0H1N@I3&0kzJ-F z9Lkxdapj^51l(eVGd3zx?v=QH(EX&VFdHNb?#v^|U^b49MZg57`Pqvg;2yv6({aIu z=N|s3P|p$awyAzHpV5u)=7oGE$A)vvsyV$xo0z$1@OI5#1nMn}f7wI#5)3%Nxzfu* zMDiJ`Q4B(4Jbkp@TxF8HOiTx^1N~$)S95khJqhlUVTNK7hmJ|=5Y7Z4kuk<4S3wtd z_@>jkQe@DbZPoelKh=H35q~zIybsfrQg;&IqR$VGXOQ&}H{`EgB@@XwvY`j(@|rVBS5o}c*xk>Q3F zK7u%m+Xy5Yo|xr=EepilrOWL%J`E{YZ}yVc$H)KSKmG9izxlKM*q?EAN1&?|uE?Bu z|LgyR|6=mU0Diej>S2}ch}ME&ZgI;hhj1d2I8Q8Y>Tre;E=NCP?VLHOujI}KPaI$L zM?#zv`DtnF>hK(g%SYZKFm`azt#b-(%~}0$IZ>Aj>*KSYy7#{|M;IU2YJ9BApW-5# z#08h=2}w8~{Sj^bIqG0o3A`WryZ!n+Uq5W}-~KW0@x2KR4^Ez`GH*`sPvPt_be%ED z9V9}p70L1O^2;xOLRnBEU|Y0w639c48)3 z7Jj}*kCu08P^II*u%m+v!AY?c*Ary*;Q?K2(Ul$xTmkV6z+Y+RzDY%0K3dmtg&Qtp zwXVE&9OdyzPU@dqVO<$@8_aI(tLLD?`$fs^*K)y30W6b>Hp%WJIoqhiO#yg;7*883 z6UKQK%+QiOIKhX*88;BL(KSEeku&htreqz)k4+>S7vB%}+o}Qh?$4)T2v%~e=-tBn zKUP}*^8fzddRLM=w@kRF5C3fTX1;{tJEs5Y-+uVhzxmIAG3PA$>=Ncja#i@^k>3Wo zl`(6K7U@99nIEJni`E-(`;`CBU-&(XT#1tf?v|9<^`)5*>_WjuC@99Gj!%z=D>$C~ zDPO&#pzG`JzkT=yfNYt^!A(r-Vw9%yII3&$vHv?R>yX*Bk?{q%uiyBi9^sga#pp2K zJ<7?6*O^7RFz8YO)TNxcqa*WzPlJBZ^E$5f{0Iat3 zGaTOPf7Zv3JOp8L3HvMzHVG$yZvCvg92`%$(Bl0%3$Rb6ka~nLq|3JLViz$ElpZ>*%zvvmj-~2EC z^26(Yr(1t@@n_SX{FPMlluZTD#3Tq$Y5?NNW0I<3Wu@@1eHu^3R5q`A*p>%+`n7H5 zj5zBZg>oZZIANlbb7X#?hyy|uBYHmMs+oMzn@u4YVCv76{r;DkOBf1;*aM?C(}wfL zhY0@N)UtTf-=i1ga0^G~HowjItMB&wQL5&j=L~@MC!e0nK`HK=p1l!?b;+ajoll)H zrC_&<){r(zF8p8l9soNt$?N11dj-O7$pXV{5`siTXcHX2+ygMT)%+rcpDL<h#dqMaX3Y+_)6=J&dGyLIvG zPRZkY23TVJW-{shsP0rqPW~`O)3g0*R^KCbq zBzfd#;=<0>I!KGAeko`3wV=W1>~RyG7uJD6zSu1Dci}`zh4;xH^}vn07*X+N6FmG+ z?r=GM9tSo4+5h~XTg^9BbES_UaSGY*^?(1b|99o?G( z8O^g*m}hF_!l;kebccjba2JiOtQz1sb#BpI&s?StlP>&jc%Con=Wg%UU-K)!j3>U} zNa=Hg#4z&!8{$%bv8;SMT;`P46l;~Qnlm4N`|U5DhuQ%0kwva3B#;G|#N`Qjo(Yho zCX)$Fg7WLBdZ?yvMyLFLti5^oW>;13d1|iIn0X-cOcEdoVV>uJ$~*|jpk7B5FSNF| zwY%-^r=REkq0)NwKHBKLSGkG;Ena032non2GXw%bGLw0()Ra`Es`~T!uD#y({Z%S} zn*IB|?>T4hwb!)QT6>>;_Sr8%gQ!ue;+ylj@2-XscOsXKp+XfD=$Hifq?aLf-_J+H zQbd^YdMKtEL`99plW#E9@UrBPr<6;}zy>OLu83%4_Yq=^R;rx9<}>GM%n(zdB5j%~ zvcbiP zmGrbexzO08+iB4lG&0!FlbXm;jDm!#F_|aHy}$mxX~l29XxjT9-ajqpo<2(i$X~x< zGxGSjweIJ|x9v^uoR;nO*>d4dn}WC7XNbgr!C+N7*X!uw$jYXAq0DeG$zxa%n93}DB zsT!0k;KD1k>U`c1jbGS?$3{XfJvI1d&H{{h?&r1BJv<(ADCag&K58@(4iaRfk>CS- z>t_*v0)=eiF-z$aq^R3Yzv6Ax>pM}Hq43YYLo#{UDqEKuP?AVpHG6OQUBJa!hPq2tl|2JfQl>)~s7 z#_n8C>7ww4P6A7{Xa#|yS8^5Z{*L48Cwz*wfq?e53PjU}oU6-SyJ{G2dH9wjJYmf_ z!d*#5c~u91Jsd?Qd~up?7VwzsyD*NoYDX~Twt$(I!#v^c7xb*5UK+eWEu=REBURa?#dwR&d_jb&$nVj_(U;fc zv87OkzOJBDK|t_=@mt21PY12r7+RKfT26pn*3X<-2h6|5;%siQV?$N%SXC5S)Jq(P z9Iu@)%OZ$4UMXFL*z3sh>b#aIYK(=Tkkw+cPu&`p4yK2Y;Tv*X7CS{+6VA1~dVgjw zp|p$2w}H|~R<@qXlXD%*OO+bEw1GK%9}OyfcoKgcmHOqFz{UUxW*C0ou840pQG6Ho zRMo>4d=VDy+)!-%S?@RU6KG{eenwvOF|IWl*VorQo1={~qzE8!1p$VZ<6K&0^qfqa z{^%#Cdw%I1QGtHwEd9ZM{00KD^;ArKTYE9Nuf1>A<$m<7A7E2dA8+C`=ue$&+Pr!C z;upU(-E`AUOqMd4L@=s$MQ^n24L964U4O%M)9I(35#EkF{#bgtJ<~booIO3|sZURP zuV25Oo@nEA_uY3z-#dBEy^ALv_xU^Z@V@2lyK@Y0J=utyKD|hjhT-7=WF$x^4|SC$ zdZ@F?i-Ic%qoo96AK%p;`si-x9z?;c-j%m)-OS`gZOSQ;Zi_MXFA#Z+W8PL46i@3n z9-R5D4I4HM?h3E$nPQt94X909y5`r>VCh6;@yQ95tXbvCZ(j69zU}BPK+y}=y?WAW z)|<_ZaK7yS`|EeG0d7r0_t=<%#8u3*m9DJb{@2owtLixmhdi0=0iC>yTwGUf}Xck$3E1ln6u0qh6d#xev#^^2#fw9oxCL1m{&(T|KQ^zj1o^d)_mhc)|(Oi(dGn z)8iiZgai(GUV9Mh`57^lW=cNKZIATsbBU3OwFW!3N7k)d?}5g)>B=iEhj!mSS`+=J z%{)4y8a;f@t1M7nhwpj^zlZYDv`z(j>_Vbq1-{QqSLTfXTM!E{Rc9_u)sP-Q$h;vv zaNWwGbw?58^B)?6Wb7zq!CyQG)4t%jm3n*o;7hsfXkjI7VF&Xw9+OX<){%AOOMCXX zg0^tI3@wkrGXe;pl#t0^&RI>5pn*hTD2m)cr5vW-t2gpe0ZF0?5DPU^U~wLXg17PL z_|i$EmBaK<8E)uZeea#O`#>f>C+@2E0L z<8|a7J*2{rv|mSz-d5C(y1iZi2LXX?9ql1YbjWwNS=x$nd1`wOyd6ps+)-{yyTC&y zHxY5yAbB0Eq^N8{IDmrPw&6W{YP&jQO=!=%*f$RHo`eSbOs=os35n#a^>W~{)% zLJupAQa&40h&3!k&`A_n2T&<#2n4ZF)Yg26RD^9rXGD=U<&juIV)w&&ludn^31d18 z$g)Qp3Uy*ogGoD(FE2WOdP-0zIEU~R-ozOI8lU>%l|0Gysy3BlA6W`0hvX7iXU&}` z#52OCJlX@VW)`?MNDZ-kiPIj+n({9foM99iN=@?nI0p|a=1bPpDcEiZWpY+q=b9(^ z(hz~=UwQj>A#@gGqk3q{e`E(B`s5fI=p)7}S%6iKIQRS-kMe%+MJSP8b^BJb6vkn7 zJ&x2#?437k+!S8arTkQ{Uyho<2~JTehxAsmL4jlk-_b`O&8XqH>4Xzbn!fwbmrv(C z`htvxAg2iVdad}%H`F^w6ocK@_P1OeL82Bqka^Mg*S9z zU`ChownOd~1|aRhp~RMT*^13%B4u$f%2$nvDeHvpYNaV0 zURzK6aX|9rUWjb{l-|~%eXVn-cPiAI{Ff~9Z7KthuCmm%C0^$F{D1iSY5DKIc-s4G zuEmG{=&b7YEr2?*=UM(oFPV1y^j{ZGKmX3aQzCQem3QpeHJy6e=}Z)@!+E_2uQwGh zyX>;*>Z`AwZoT!k@b|HgUCg||ifR42_0wsmpO)K#O`A8lgmgOMh$E)M4nH(yzBYaK z+28)@1_tT?rhJC)M&cA8n#*NV*V->ED*MFN0In`r1r?1DZjpJL#_9z6U9}QFe zrj5v|IzrlZ!W5j}u`lxG?MZ1sidH+Lv~8=Juh|K_BNAZJevD|WL!dR4O%(i`FZnmf z6mQB~?OHx4Ptq_&9$-DT&30fm;AHV0bi{AI9iF*KMHF-Rm=Ml5OW`))a?{ zt)zi8fmvQ`!HkirgIOSGnU@@eHCRNyGD2SKTse2r^E#5%PHbzBN$^swFJIQjmdLBN zmw>Rvv+$O6va}eeeCZAIq8g>a$9CV$x%fn(ACnf#;H8}Z@ERg?qTzuoc@BpF*ale$ zq|+y)QlbEk24u7avPYpw;{ZWiPy`1ab%cTHJ#;Fa-xOgz0gpqUO!j1$!}aJ<#cQ&$ z3>I++t`i`Xlk!qt8GJRAHL9Lv_BIZ`?CEPqmo6>-jgktj*ebRhy_{N1adPm8%fEJV z%d8jvhckMuUIGKM1SQ@>a9Q-8%pZVvG-UKgqxZF~;h+D~+Vr1)a@zW49e(r}-rBS7 ze)Au^F4Eoe@BhLKKHhiVH*J3V>!-Va?$3)pGKoW3bnqhU17hV|W%obAU?wYHwApmSA0BlYE(MKLOz3ingoBsM;@1D*)d*jhkl4DFA4nlMI|p&v zsi#d>Uv*U`5U;xG>Y(74YB-kM$;ej)Fgu1yv=nWTd7I2hl=F1Z2@Et*QuI~MRUCJH zkHsq;4EnUa0FO>})*E{-uslHV8Xa{M1(6A6^K9h zGYanI#e)o~xnBlS3h7xQjO27!odjbng@R>VFAl4Pi_(D$Ev{w8JW~P#SqhShLiy5wqE~B7%chOL|HkQ_UwKFP-;DF$^X9(**EDVVPp>B*X9sli z@4YUQcAi%t8U}?NTYml>$=md&ZWPA- za_&&SAWH@xzbVU+M;;Z&6puKS?Vfw?nI8Mt$4$50dh>Mn;YS2+2lx1^2==>}%ro$W zHb?1lG2_K+%N_0cc+Uwye}JOTH!{~?z^Mgc+^U5;B|sOOHcVgp+E=Dmyz*7i(?U^f z!uE8I$Jb=7FD;!@Rbu*i(A7IuWEi_ ztv|GZoo(7&b4KBTGI@|*j}Y_))BM)J2}M~fILobT3J&NhW6_h3f-RdWSQkmHC8*1b zexfZ)29+nzZ++Ek^Mk|8kSSVeJ4OY{y3$8CGUCux=7xHx>{@S>%ywVyMq;DZP)MX; z2QWP=QN0kB5ya`hl{}f`&*(2B)>F9j$6=D|;ykz_kT3v?r`k>o^z?B$7s3>78AuNe zHqT>}7^pbJA0t$u@Zvq1v{j@d8GjkqlseKHva6*io3idT9GPTmXoE=dYhrZ8%5{;e z4XhfqWDTHlqfm9W@ej-SH~qmIr>$?n@o{kBm2>-B-Z^dl{nw`ov1vAAZ+WKw$#ZgY z-5@8R!x>)%almeC7q9Plmg-hZEV`kBn~Z-{YZ<{FG~P5?{y%cgsHq_%m}X6j zCy1lB?m+hpdYHk?m*gO?StkfcmuvNdP*I5#XhT1E42;@q#=#8&ML14@yXx8r_${J7*l5tPhE1q15Rrjd!7Mf8~8Iac+wvDBH-c#k>^5OK-Qgi;L5!E*5Su_)k z&KpZy!dCQ84Ip_0x2cw5t~-dK8`tYtrB%8{cRD_K@h6YmwmU>#vv$pNKbvo?W!}WM z>jIC?@{96_APgx{Tq9WosRoTG`SKIO^idC&BTPkf4% zkOUphz5Uq6-T;mgKJw9zPCxaA*Reu!_4G|95CX(m5m3QHE8pSY zcG3Aw@^esbF$Q3A`9e9`n~Phb1L$|~BO_4qmiD8}3NdiXEG=xFFW@!srS2k(?N%LH zY>amF9@`$jMwZ};^HZnDhPLOnyEILJj8rG`Wg6t*vI0RWRqAF zc5iil_uc0fdu89THH%5|oBD&7**OLqF5pjJXlQ7`a}VKcBZnbVpyuK4*=fyIOJ zd2Jvn8KWEXpplV{r-CGvUV8pRM~$wa6%g85$2SOU`?u8&+DrVLJGbgQug9Ic7SaM{?@aVC^l> z>we<3j1t`H%pU1}X6QFhH{Ni4CJ;aOxz9`={>a5l#N9WYbJm&DIcJ}Z{5s@FGhNJ1 z(A~WJnrp6`p8SNz13WM9syYJ$iLz0GzHMQ9n&b~PCdKeMi!+jEyQ${{2WtUqvVKMo zqg};e$~;0E&BaUprk;&5+-A^7248}u6XLv`+%kDERj-@VS>OoEbWrjqT-DQ0s!sUV zMg;`F?+x@`1Y)W>Lx%8~%-CRL0B7mEZh8HIn@Z4vM$3QypuKW8KYTDxo7W>$4H5=;&NEJ%9SfT zB=A}Vm@+p2?zxgnc?k^gS&c`N3WH&WcleP9>-wC&9asfMCTP{_Mn^v-w|ImT#-V?% zZx>Sy4|bxb?C( zy6oFmgdgc%_RY%}#=FvMUuM#s$zMlru6*a7`>1Ibqk-L&-GA7j(>2Vfn~r2yegyaV zXP z<~J^#uDbH->AG)y+Z9LC2`mM+{sWQ-2WD{*hG!tkorzp~*xM_TAT`r;Z(w z2YG9yje`-|!R?G3|5c5=U=M}V$)+;JLfT$E?`5u|omQd5Bb~(6p&t+NyIdFT4!nik zywaK9o-3+$LrWJUM#EW8MycnCkT`k`f2s%eelu_?fRB+(WM%xL*Hr`fwn}&LOZ~J` zIiqzI!cQ6$esmIXRY2(;)n0w{*1*Pb5!_VuYIwGc1u2b3eWszoXI_-RxqssJ#V3{S zvfCbkq^|73mvxn;l*x637>4nGv%w{4`TzdD;1F)vf8?3`Z~R@+l!i0|g$#+B@)}hD zlL9L7^2x9L&9wISUoq|Y*>_IM-}J6Du&)pML}l~A2Xp^?RwnHn-aqvj&q+Yj2!7^g z{#|&pmvZ!DPwYMWRaaig{qc4da;=`Ox#p_r+dN<2K+k*wJ@Z?BDziV@!w-XK_yv`o z3`6tUERohoKnGPoqh<}iL>41Q_bSl)340Kq)!NHT(7!Z}2w_GitUx2Ka`-UHm+(=_ zfMfb$)Ga}zVG>^r-F3G5Q(+w}3^}3u}M-6&W4v`QQE?c?c+Pdr6kwwjs)cw=*(PM#0&C zeBre9t?!)nZe#s5I^6m*e-U|I9=n+y`|NWb2~W$|Y@=S{P0&}hYtXLz9Vz=N%r)DW_8E2HP#>_F-1a5U0))-oDfzrJqa z;*$f?L&>l1Ku9XSJUVxQPjR%&V-n~26CRuQJVB3ZZLjtNFdFbDvM2#YA`n0tRhGJf zEkhBJ0H;I}${T?UrzI|O>*>gg4k;sTaAA&mG7-m>rhhgtd<0fO{G-ggG%Dr(8APNJ zSY-lNge`rfd^b+-^2or6%W3z}D7lmsjv|+h;<>j28G(RL=imCPe=%+R?bl~!Tv-kx zR_J8%?PI%5zxR3`J8tE9{_A9!jWV}}XVE!1>abY8(}2JJx8Z#ai(&Tc^GQYBULDVn z{E$NqiNp2nh(Gs~1fD#;1cym3m7&h|Wl6F6Fxf^9;nkNf&%F0<-h%@lGJWJDAD+%< zrQIh#`KbiW6^xeDiEwTW=7@h4Ul%_A1zG!l?6C~nF&roL*0J)>WxVS5u)_{dJ!ysJ z(6!g5Ls$!NKREMr#kmK1b4MrkYT>(>FZO{Kr+S=ah=kO)DZxWIo<32@ z>!#KIRBa`H+AFyEtKPbpGN{y?Lj_#%7KthsU-Raw&EU5vaK%gb77qNKT2|}Ii=#Ae zwYBwZ3m(9dB1%l%QC~+^u`4jz$PKWB9Tn{2886`>#+>Kz2oNEu>%>kqP_t2yDtTkX zAOl*5ijYa`&KNh}yf7`}Lt#2Iv=bO)gn#SZ&;I7Mwb@v#M4m~*anvFWfkQ)Cy`sJ& z32{R>W(Ao&OJBKi;q_SO*fy=7f0;@0XFWPC5P{y`P>(#hdu0=1Uq}4 zjN}MlKmOydB7i)KAa!W9XNe1cR4+9KkEaH;?|%2Yv)>PTvhh&v0ZH=QBvwT!@w zt)vZPT>kPYrw$hMO#v`1I6;gyHdT0(YL*X^UqYHgF4rt*P(a)O)|Ph zr3ylx$4*DCWMMD#=J`cu=0gCqW*2w~A96jC(RVlR zFgOz}{^GfmS&MV3p&imocdm3Cc{D=SCZzX=Ftn7>kwQgz2BsP>y3)}040-Q)%U?!u z%WGm7zLC*28KkxJn5Bcd)|hmBUwrx6*Dp=xhyLNiz)Z}%-^sAHmf!Yly#Nk{KmPH5 zbPkQQA-(bmCmcVWaoVZVDW{#z#M<%P+i#@zU&X9F&+~cT!RPG;sS6(Sn8>DXp2K_f zx7>OQtL&~8QP%Z;?Ba`OlU_{sWYo|Gd=u~Z-+1FqGv{rd?zr>z$lv-4vc)gktke#^ z`!TMCCEn^xOHI2jRMHl>w57Xp-vT&_@e%CZ@P9a~7=^H%cCu7ieX6_M7cZcj5ooWW zl7?PGU_Ghq!(uxwA6;e-3wX=@xHRH$#g#1AHAn41PN{6$I?^&}6WXu=MEmlws7FOr z|H21GhKKwWoWwTx2^>L^`4t!T$g{BW*?K8IF;CtqnMc*6@~I*qsk$C;W{fneZx(fD zaKOw0fCW05f|l`?!`t{y7)TQrNo9LV8F8OGVN(z8Q7Nztt!u;`1&*##*>deLQNsws zI-`mJZ))REGAlmw4Gb;|&a5;Q0&70Bm!Y(k&{ol<5Aetf#BBtCLsKK~TNrtbK~Ul= z&o(HiBD2>C4%Y329O^?3YqDCNXea`}vNN|$Yv?`q{ptshhv7P-r0k9i|1P-s`}ci- zmtDRy-N|FRyY9NXG0vRKjCM2~z;i$440Zo^_~D0P9IJ8iGnq_#7D1TVex9xOD8q$1 z4)rr(L=UEH2I|cGA8|O3;m#qiH6!h&&8H4&UEjae)*SwCA6Cdk9XXD z2f75zj}7>Jl20UjBe0W(?tD?IrLnujrm<~kYmQHQ+Eb^?zV$_D^T?8*W?Ngw$D6j# zhyUUI)1%IPv_qb0@9ubqjZ(;{AKQUHn@zjYX?1=}?9f_%m(Ti&t~O<-VY$wxXr`I7 zB|{s=I&`sQRc#Pv0oSJM_C*}ZIvXiN*x;e9_S2>cScOO* z0%Pp4IFv@qEUvO+@y@bkXrvh|*U~j5kJG-cOzk!RZc^Ak5Mcxz#2G%vso1tj1Tw2L z`I64Qy%n(no7bLQxav8751vDX$t18Rs?5pymZ&Kzn&M?^A z!y15Nr|Yl3fyF|{@C4!75rAeDBi|s`Wa|jZVO!CaGON2zu@?e*lFB;}TeCJb;BA|( zWgWnI=RGPx?1O*DlahlrGFrMPYffwc^_+I&yheJ3Kf#+3NI4&H(9-!#j_B6#s8naI zc?a!MUI&~fB=JTbE_-C8%_MK|33=)UI(4+mqJwQ2DZ!-yz z^nblHy}rCJV}rci|MTC3S8ZJUJ^`_p^p#p)klD$N_2VA@qzZ8G_A~$Pr=xKBH1g|o zPK;f3^_A03hX2lN+hbmH?KKQ{kDC7Kuiwc#@h44Bc;aJOR{JAtgmG9+Btpx{F;jDm zRJraiTMwqjrAHw!a{d-;IrNq8Jc$Pw{vA1V?_cHHrq6u#v(qbI`SJ&VFU{}@2cSJ& z?mJ7Oo$)m2jKbIhM9uY;;#a-$61w(LU+mGt44;Sm}~9VcK0Zd4(>_inQ0Pl!MVIv zS(B?XSl>So*b$n2%;J9~42!G;+1DVi3 zA_cO{KoJGlJK}IEL;;OPft5kvvxWfT?!dZ+we&`31AxViQ%0kl1Ro2KWCWZN0$S3M z{-9M3DQ$Tw`fYq3(?}x_M1kfFO-ZYj<+(#yBlP`@0#vKy>$l$3$?9o6>)g*e=TUL` z3RXfmk>#`Wb~-Uu(|G2&VY@5 z7)RD!IEpGdJEN-tYY~~Dx_+oMReZncH^Su4ItX20BpSVr(UFY*- zn5g3M4FtCmy06I*LoLB(aS~5cE@v(OjW^#qec}@z&rtj`pJkaZJzm-cUVV=3W5VZO z_}ttlyT*S9`^medyD#4y#02E2r=F4_ruV51HN91dekJKgd2$#hb(!y@kE&aVg{*~O zAn&7O|6{TZ0-#6Vi0 zFz<5>_E1iUc#lloX1*hoOdE+^PO0JM2OeZfUZ`IVT2CDaBgu~tMi2iZ94vu{CP|(n z3|x6u-!;y;H*zg`p(sT}2IT;)N|hc*af(A;H9{N1-XX`_ju=!hJ!pnL_3foTa?vF$ zs@XbS&C=SpyydOjJD-lsz6XD>tj1x5mri(BB_ys=o=GPSh(AXbg8BIFrkie@KFSL; zAN$#m3FN9G;>gVs5j<#TiHZE^PJJ@0wB#nSPQ zIp$&P&G#6F(=7K@=Q6aI26J^#3S`A8o6aJrHjy+AIUn^s?`(r;8!L#SfAzhEO-5W- zV6yi&I9cgC-@STz_?au%Ip~OtS^|(S-9XQ(ly;+GY)^;qZQR+YM&l+q5_M-QH*xJ@ zz9r>gobm51N+mdsfwP+X~JaVPIqMSrd)g zki0PhBd=}0?(@AiTgOXr1sX_bqm{JVp$mW`zuHNgNDsTC-C7K<{n(b335(_h#XP?j zDb)|5BmfL*g-k&(Sg?d)%M?Ooc8ak>qX^=nEEhH}v-i}?5Ze0{IJ=Ksecc8u!2xDW z3a)~p$TaR^Bj~6VaU;wK0{LwM>kB&cli^(yui#{(xQ@CuVB~;Uz1zT02;O|2T#o4I zp`2ZQ!atjPi29B@@4^I`sN=r=A3pri={9D=O>chlo2QdbI*x@gM{(~2#88Q&nFK0e zRMWFq{wi&IR%JN#)Ki&kdlp+aXi8!kTIoS8-)Ofa$T-$rMvFBWBR}c-p`wbPvbG=t!y}QYDPm#>4pRQNnLjPR-4tPAoi|RUUp@5%gYf`l)9eja5Vc!+D*|)`;S{+gJ=t7dzb>o2*i9B z(3rf^j_W1ea!@nH>0&USIvAYSvw25+CUV(f>Ra+rjL0j3jghB8&W^8A`&IOyaRqpE zI1uwv-lS=OX#H5b0!87GR>9S%#|=dcG;IAYQk_9AJQZUx7KMkPbgNt$WTvl0+zxMV z8m9uMkxS!NM)UUiPJwPhzJbD>T<>S$iu8jo>a0fVV3SA*S>dJX8iF2;C`}rV_7PsZ zI{i!z`Q_t%qW4|p^gh=`UNu2d0q$h`t#4nB;cl5V$d@kt=Cq6vjF0cy`BQ$XpO+A|~LU3cC#J^U>9$bT}~6Hu8xj%c-j5vMIWO~V_cC1K380EMPU6h5G?lIx7~JIWLJI^GlQF* zs2a05id-;x>VP7g=iW}tlCY*mm%3bn$RJ=aZi8+(+g78z5?(*Vb9>A~JPh3wVdwKG7;# z+K!_&k&8o{T@rYJ>)u+JvdyX+c=Ei}HAg(<{PoBY0~oZ+j*TxZ6W|MYt5M{w0)#Y+ zh6v=zYd^K23W7jUSY?s>$iE+~wCW=*-v?nUF-9@F2xKeEVX0xIfn27-AbCn;BTC8y zxioh6y`z_x*&s)Oac&%4CRDOWRaAu&@e>HZm*J6e#bGIpks2@z1+|#S^Spd9oE7PD zVj7I0n>gd_gJ1cU4+BJAK5~erVe@Ct=BEOHk2`l|anAcc@Im&!`%d1gzn4H{T6BP9 z?Dy5>9^-J7+fSZ+@=4P{Oi*3;g6B`qc;?gKyKW7RJ@&ZhwF4Ro2wy$|touNp+gI-h zn(25J`s6qrmuL9uD{@fp!V905vOKrv+UNGyu*qhpMcz7Z$x(gVp8KWJT@@J1jA@-T zD%;AxC28P-jU=1sQI9%ry8Ju;JU#w#7i2}^2DTqN_uTWRFSAqd+u#1D=>Pud+n0Ye z_&>|a!`Hs%RXED>Y&L?Bv9qSp>o&ZWaO)7gCoMcK8;~{QH<$)mS5_&Y5WJ(fcKWKpv4OppFcAaSi1r2rxP*+|J4(9AVI(?NT4& za`|v}F-d)Rfm!pHIdVvzYY3`tXcCfCgD;QxRH5&+GaNTS@TU?IRG2_A;$3^)^;z+z z!EE2Q11H{;#&WwW?@!x_diXnY^hK{g2+Pkp{nTkEkM&MD<<#kAFZr?Q>Cbpp-mlkq z+ySRjHKffkPyF0A&-K$v@K|Mi6v}faj+igtFKZV#9y=QK*kgHaf5Q#Tnjg6&0HhLM z@^?P6R+W_a4jL>Xe7?9P5Hiq%d%zG&ZK(Jw&}_*xTpyp5;(9O_1*!Ydv!SNBj*LbYxEogokEC_Vik!0MrmAqee=%fzsSAjIbUW8uG<3NeHg*RG= zvZD;@xA0cVkjm1NaA za%QrD_)n3I*)Wz><7!|+E1Ty#cC&vTy{8)B%m4423|jfk!T=8ZO}=Z&L#U835b9hR z)ht8-^E9Xc5rk)H)G^5GXx{og>XDC}p7f-rvQ7BmX=`WoT^n&9^FIel(od(;e1r@V zgL^h&qGI5n-H()YevKOIpmfNGZZu|7%HY|fZK(`S5;|>{TS*A?s309l?5u7Fgzpp{ zs-du-!rj3`y4s=St>eVzLF;^nVvIa3BMI-RDva${F5l(kl_#vi7kr=3;ZqVMi+PPZ zDoE`S2st0*b23^l9h|=%pkBH>yr(W--H; zmT=2lK54Jsd!faFDKD@nj=?_4kp{tmz)+K7!5o2oOwrAZ31oP$vgZvUBL<3cdV_&4 zv$!}%ow`|uu(_CPDm;2SaTv4H&iE>`@5{@(J%#VxtB=wNZ%q*hT#tVH?YFVB&UxJD zA2&VY8PCWovl>VBN-H?}9Nt~lh5^h@B$9n(!{&qU%VaGA@*)+ZIMK4VN%pA>( zP|f@|uEnFla?#PN%&wqpv0>e!%sudQUR7sv>io8A{56>ly%B`+QmU3Pljqg`2HUz$03_edSwvjUGk1P(AKWi8ufXdAVL%>B(alTfV&|bcSc|_T2YUxz z*v=DACe6cH@lvSm916bXG>T4v>3gLgyU|LP>vQ~S&~}!5k3c3_{f^dQ5->~@(>hli zY%R)-1Bem0NCI2rm2s7Gq%jaYku`+ut!)T{fI=a(L4a#V5n&pqP87(H-+Y**j*aT` zZtFU%(>Po?xN7`-c?neC;!aP`(INLn7U7(F`Wcx~u6%_{b8ytCN^y-tzU#R&IeC=X zB^<}-eY8^?e>IQVyobI1d)G~$`qXC_zJ76f<*Q!FE5KW_d#=G`BTnG+{gX~QIgU`n z&k6(DqKg0kAOJ~3K~zl5uScH*tmOH%E7|OU3_PmXjLwB(QrVa72$CSE$=?!4J)4A$J~^*8 zAm6+cYIfB=UYY{S$jdax5$J)ZMilDa*S4LD=((l74e_ye*RQM=qMh zqjcn3kJM&K5!N&9nQtn@*NP=zv}*&8BO78=+Lw+ra zNtLvL$SYn4$>J@5=T`C4JQxJ+81B6Dj_KX+{wqd2_aeigshh6`%thHr_eFD{I+Op{ z&a9v++s2Es`6yOrvtu&lJ{`~+u2-GlDIbX`six+-?K!qn;HVI(h8_b+1@mUG)-EI# zk9_OkFu-XawO^z5&B{?e>SZy>Q}V!*`7UUim!N=+6fJ{;ox$)gc?i7{#!+{P(zq?R ztQ^1Sl_LvRfkoc+F>C~$cJRJO;0+37CJD8Auu1pz?V2t`fW_|K}cfhyVbaWq`D8yWOgGO#6kPPudX%2&TR{n(FQScYw-10?xqeJmE&EdYcE?U_+Pu{h&*64>n24NW!VY+nt6 za(pZ<=1?6&>~|PdIhK?RK*;IWNU>e6=UMwX{wOFL9d=IL#vvVpkv|KslNDVkA%iw6 zoZ{$5T~?%}iLEnI3^1APALe)OEYEZP1uY(Igv>8MqbD`Jws&{L(YSDV>KHUiE`Kqp z9v3P^aS}TVm*8hEkH>&GJ(Um#XRo1uBaBcYGap7%E?nTbhM~R}NqzH;J}|BV8jqyS zGuTv5uBh_F=m6vL%w@RuZ?D~6DhP<9;Cdrbhc7mO2KA@^_0L2*{p3&m)O6ZuCr-y7 zdt%8zAhMnbaKESLKmWog;ApnTRu(teaI0+Bt{+P;?jucq4C6DO`ZSYPyQiCPxoNue z(o0#4a|>_EeMcm-q*FUjwrJD~^Jal-N2>gqS{MG7TW_B^nb$w^f*;APMJm}q?F^jf zIelM`qlOkiQei0%BP)+3?LkL-S9V`mzt1@>dZ%x}cFL@Q3`d*;pE6lBrMUVrJ0Lp2--8k#aQ>K@_{1wxt zgH}&B-*7FrO{)o%hu6ffldXB`G%zAaNUAsN)TF&BUs-SEcbUNZ!*`ulPs94|%Ye?i z8g7J>%3{XeJH_F3X5byFFXC}z9A+#d&q2mhqK5#u4T3~29LE~+h6r@=p_9Ci=hym{mFtYO zf&CCHa~t}bZ@MADW;OEy?x3TAX9eR-G35l>OgV*=%NeC*3I)q^r9MY~>S*u#!2@XL zs`|kLF7xJIGn{+SN*NulG*nFP$Gx@f05S4x?4DGzZ+zn$Woe{3 zxtV3V=DC{Cxq^>;Y!1~&JJxa0OaSv2+C15$PUL_H~3C=PDEP?$Ills@-Q zpPydy>Q_-Dr?fj~4)yP4O~$!rot}}={r7E~?qL%u-x{@T1agV(_U&7zdzctB&-oPJ z_je-LQG%VR`F_ewO3<0j(77y@RlYV$MF?~q^Zh8_eQcet9M`xgTO`XDfx`qo0+#gj+n zDjyPeMgRd2p?oWcf8C?!-20nyUKtaJ%iQY=7pE6~#ypL=XIFY|7amweos=-OX$Y3g1M|saj$dB~giN$8IvhCxeMW5+@<*Q#e_xq+r$8W$MsxOx5yhiwPL?w?3a_oAw zkYb@sVQk14jVt(A@kerGarW6~O|N{#E2f|M*`J<`N>X@$ug`t%pQcy6>J>{%MBQo0 zxjK<%6>5+jel5zj{ z*2+nLvC6cIm2J!KSw7uy3q&#K&FqlmLMz)Qk0eo;&f0CIZF#K%V)s#~cBNgLZ9A8) zefn|V!jH399LERNTjKCF@Kt?y;5z4)iz{lWyf|vg?OdT*; zKFjlDX*!@&66I>vxnz+4C3u6v38}r)XFvOo(YZ)GIl8>kF{3GC6Y6$Ve*kRS2P0s*$=Q-*R9 zM}X}hJSC<#^$C^;?L<@jH z{2+J+?!M1os5LunLv`tAers=mM}c%&7aP6n-T#AS#n($&jb+7&L>9$*Lo-X~`7pC1j1&Tgx>zt`q?P1Jn zlb?=3{p$FXDWfkUb#j#E58bXOpvA6m@YoT2#fhk^V+B75;=m)1MgSip3JTrWl)dt2 z<=St2L81VZjTU`rTUK>#{jvuaF6k3K-kUiv)rBo6b*61o!@LpHRH5|d`ka?lp5;_A z3ItaeAmFnWCcixid^sP0>Pl!orV0pk&Xr~0SXmQnFe->nDP#PFaR_C`Uj_m2T*bTN z%5Gl-qK*o2=$?iN5S|Vbt^g!Vq%kZ5vV;a#UgL#9>#4Q4TV%3kvSYFS*7R#p8S*7D1uWR-7@)WNRNWJHsOa!u7hafSpwfEJ%*;Gaxl9{ zI~?#907!qxGpY47su^%>zgt;*@Mr(!zp$M;zbbUq^^5|(g&fth7Qtqqu4*f+LivDi z45=n^A=3Qz5#a8zt>;?#Gfq8WdcxCQI9+l1H>PV{H92^zKo31K%rZYtKLBQPB_blI zWOM)>@!Q)U%!tchM(Px2ACBdD^|IQ~0#D%X(USJI3deVMr3!f3!?4e&L#_-QVsOM@ zFUBd^S+*^oT-#NxW$~JF3?CaK>>(TZ88P4wwS2kkF3ZmK4Q-#lc~Af;b>j3zF8l>Q z*YarKs}x3OcHDlVM)lpuGi)ejFh~Fxzrd^0LP+6b?i4!V;=P~|#(F@6PJUX8{Jjp@ za*wa$7UKd)s9x@YbQER)5idsr%xD;Uzcc{%BBij=E98SK?69k*SC)xyU_h2cu;(h20 zfU|Mop`6Lrq>p0K?`6~amGzR2{N(M)FFp~H7Fx7*lyRYq$8pW!|7`BcFjs3W@-tI{~(5c?HR7Zy$(-b!^^;fO+CvwlW+1`G1m_7fCP`UFk8P%d$FyUAnG3Fg5U z6@bg@zyeAvjRnjKW>Xysb>l^O5eQ-IwMqVl+rCv2;!lFeogZ1GEQ*yudYis~62FQu zVr%olD2zg=jx?YJou|Sf)Ail(D8vowMSOTLh!13A>!>7B{{Z}j+|WeM|Y+U?Ry zYrnm&UwZ8;j!Wn+^q31Ei>Ih3dO%5Ozp8KGn0Qpdu zoFNmt+Qgzf)x%3e!;NiHubjLnujEa`Lk?v(A=d;1PSUg!_N88vxHd0zDkr!wq~a5t zzCJ$NmmkKfoiRLxDkL(&$4;)CeH3tzPJafxMhm=uDFR}#=jDoGJ2%0sYx%IRuJw;J}=6mg408{|42kNe7 z;ee~;LOn&YVObr+ET;+cQrX0YIn4Fa~O zsSSE=59P#J{pO4{{H%6C3-;n`Gy$8 zF`v1w0OF3)J^=}m0b}rUS+aW&nnJ!1mdweuinO(M0*kwYWG(V2)bQ;+nh~>S3bpb4 zfH_VHP&-UJPvjnkY`t!PT1i;AGBk-T*cj0APl5|+&zcb&7H%yZ2Ia>-xpjD`QueY# zaVj}%%ZIFtz?Rdpm|32*XWR~1%`*)wb@2nf)y)HX-$oq513~iC6KOwsP2v%cIGYVa z51C&4;uo;;@yB=?b3aRVFJ=+cm!}7F{I1J*g3~5E&uwD+x6L9%oQeSAFCf)6V2(U| zZ-3YH$&X)@_a_co=k`X)9a?-8>0|I1N32Fw50aYW8u=U+1A-$voxgo6JjutNo#VZ|g8HKyt zqTnLG^MvzuA`Qk6QMtk!C(D=bnV$5-CrsbH;>z&$Z~bz}6yuyBlA+QHRKr_eg->!K ztNf<9tf&!E&9>#F^)*BJASc4<45fer04*g9*qmnbeAZcKvS8`R=|wMmK92vRc}3ZK zL4U~fcJ?y-{O4=0zyn}UmW!hpQ}IzcKMKMjspQXPucGRrar6Zz1G>-5c^e}}GswD6)X%og5Z*mN+)@t zLxDd*0GsSvhtNuyL*$jYZ#KA;xD`NjOmWTIR-{!H^rPH5a|bQ@*6mbfI=xAIuQKt@ z>y;l=nc6Knd;>25>X>aw>S+jN46feWwvAgUas&w_E;5R>?no6V`>J50+s;zSfY;cE zlSSi_sE8d27z4tDC*tQb;zBX2d_ksha!TQ1Z*N)O%gBHzOx4iV@SOX+=!phMa4@sz zI`%hG?YYk%hvat%Id`|=hbp<=Jx(}7SUjaMk|)QV7q*gX`8ZL4f=O0M`2FtDtD@D) zDP~%+{+wKcg?va*mRl`K&Sr(;qt8EYI^*5_?Haj zMMT03lCMmM9CBFZq{@D@Nv%^mgKtn7Kzi6~-N0c}_LMn?o(sss z#W#~uiQEgkhrN<7fg!S^8~N#aef$?N=6$@6<_hzuxa6YpyzSY}&yOp+!`3_5wfKTZ zpEo`8S6c$Z~t7|hDnHdM#jI&Jg8hgRT#FLkfh#R)j} zSq3KE9%WD(+TGi_IE@O~3r}0R@4lK8Q)ihEz~;r}7H0ZF1*7IgX+l`4OYrIt?X)F8 z@hA8!4da;KzpF?2H{hBIII=IHBi#;kK*6B)zm?5mJHS}GoxY$8o4VQOgGF&=UuMz(fh3>CF0>Zv{X}wCU%6;g^}XWzmWe zO#01mYQhmr`1wJ}k-a^9AREW5TAj3h7IFE`z*?Rt-0n7N)VHmA0#|i4>F~gH97rhb zg@*6))~)jaZMZ&%*{#Sfx#SbPkaKxJp0Z;%i&j?0C?8NK8TIvGJTHK7KZ#Lx5NRIz*nlbT3*OV; zv|&2=q!W-EXCjDcY$ltu^nqQ>a8&zg6K!L*v2bN43QXIM>kT~DcRjy6MW+Btr)1%q z9^1~Kk`PvuwnJ1u8h+JrC8Yb{#W@F$p*gElOs4&)W0{QW9OfDLI{4K?v!!;hh)bsy zTfK!>9hy95ehhq$Fmmnvz4S@tq(cU-+xCN3UPju%=+70mi^)>ybw}G}`fnB~jRp{= zPD|DVSt_R^2E%L)Kx_(4hX{KJI)*Ri8RgP=uGL4-P==7bx0`>6TBZ#M6$O(ameh;x zBTz9RtPQI1I8kKJp+GHo8a(`{tY8lh-Xf^9^{gnXd=CG{-_Os_oMe#AzM+ zTW+0lg2ro`I>~n!zY^rJddN9X={Bk=M0|R{(|~qpyOaScFUu%*Z^rs5uG(KBwD8C~@%Qjo=&3w^%bu20Qc&-#|fr^xBMd+R1I{B!G5 z1nrGnVN}&+u9Z`dK1vGdI_*$Fpz>r~q!l2FO<9Pd&8I;s^0(8lH$THIXQ@ppF+4bA zD!p2p`qnE$DTS6$t_nQ#(1&ggAPw&uX$lvS2A{cTdE)Zb2=X`{5vu6YLPSxTK1rj_ z-anq@En=Q_3{d;1^%ztdN~b}18Vz9rXh<#i93EZL~k$FSi= z8RsZ{&_f)gd60ObsW`( z(XZ%|Uk(;Sq&N46RlV2Gl5!oIBz){b+}a2_*U7ZU+A6kS!UUXl(D3o&_N`lnW9p>! zW})_+CCh_fX=t}`5+&t-C5zmY!d}~B?9n5C<#b$-3|zv>pD#~&t6@?F)<+p}_Xi$`fviMi;;nX6#jBW@Z28mVZ$J!=GE`aAc zx`z>YNuCUGVg5?*eWKU^ct2c)3ZUR=1P~g@3z0B&k3n(eK_h1;3a|JXR2n;Mb ze7!tWLtdj^^#H|4&B$5{14v~JNJAfuq441m+~9o71?RID{ne8AHzfnmZr&P88cYw0 zOYmBheAHv=AW-?1k^CAsBHICG&IRkFlkd9Et;Y-Zo;>>6JzaP0HPfHI{ZFP#`GwrC zUv^o8=jaIFfNAj6^b2OcKyko|#qwYqh!&zGv+WLHtF;TC{nWfzWP6qob#H1r=?rK` zInZZesCJ?V0%Z@wv|`ZyD6P(O5TiL)<7H>))U`tp->?IaX@jvjQSql81}4JVD%Dvy zS$ZGabtRBsgXPF_Q~LF2egE1~Gp_`Q!78_HI&=6fE6}xdEBzt0DRY$UeYUB4YRmoT zKT?FlD(B#>Yr$1{I<_hfjPj|w1Q~L4UKc3&k!BK2X&@B&a`xq%<#SfI;zcz+N?zuc zKx%uKoTn)`uB{HA%XoKUrMSJ9A6Og)0c{Q}(l!gCU;SW4<>nn%&+qlPb`|GXzkmlR}`SN1F5@@$4v@SJ z$il7A8r&>06_(rl4uIgnvZDM{4upo|Hfb0A!~3SEJmJyR{*>e%oZinDglse0t^>99 z;^`@PfA#~hO% z8Tk{|>R)>4*Qf7&?}|*!eV?l6f)PuYfqFA#g=$7l$e&r(_ro+VyXmHz(B}!D@aNO+ zoi4fPL(?6%-ICy_quZt$y2I#lSlX2QCTaWY;P&LcCz3V-ekZRT-^*^wwMW7cqgN}s z>CrgV&crzzIm&+Q59~NkA}hGkF#uOKq#ac!vy;s)?Ie~A$CbqD;UUyl*e(p8)U~!%d}FYt*vwbf{8V>Ji$dGHdQE2s zF*{sWDOOMoaP%DH@DX~_BH^8>=b1^J>u-u8_m+nzgo26As@Z z5R9l)8^cBsQwW-8kDanUV!+2id4659;@XS_N^Zg>v7^1&SqZ1wZ2*A!up!&ct-JhzR0Dy} z?Cnt8!Yld%+1`Clbn!RrEc6O_+C5~V*FZ&nCsDWO2QNzaa)7Rsrb;!}$Jehp)8nxc zFeb&IL0|ETS2CpD#Xa=3`B|zBY$|!%?fkkf zin@a}13TFT*k9S*y>r*}#HTzdj=y2U`iuaY=jO-z82QY#VkjO*PyMzL{L_H_tJKGu zC>oiWxp%a3_p&8q@khGjYs}6E&Kw06lVs%jV=+aa@!l;kP z#m~x_w2QLevKIk6u$iCr2RtndWh*gJW%JpnmS5{XI>Sea8XB{m4FxM{>{hJx1^LN{LppT-)>cBhuG1R{m- zJiTr3OMnLJx}k0JnawxXtIQkaZqHQjJlC%P=YDeVC^t5SkBH7W=Mfe4h{O*+`w*h#WCYNNy1qQgSakN_csFlaH@)#SFHR$G zI^@vlOP{?YGM7PXkWSLpFxxgZRWlSp^-~61DzFEO&TsWXi zo&p=R)X{DY6kZ#=suP)y?&PcVH+wozYAE}qV)g8fbg*d->O(rpqWqSZc5D$c%rpmn z%BDsD1k9K6%-1mkL*2-Xo(w{%PeFVIBI*6f)qYIn@SIbYoXRHO(MV0a$B)7n{9(V| zT_xNk(&%syw{Z#~-vfznVlD0uV7a2G{Ky1ck05N&C|4k$91cl1qX2SbFEl_9rkjZ1 z;L-illX%^@)T)=z+sE*fb4bkd0@WfIE~q&>Za2&1`5tPOXKmV!#tmQNEaO~S@@q$uj*k4; zCf9x69ft!)Ix3J#MPHWp+Q}LH^Dj9pY2Ne0x3I-V$yM^2SB>FH*AASqBY@Yf-xS-? zuDiBIl+gk@9thI_@@`oN1Y$;#vRjsXNSAHWaWQ(zNNymZrK*D8z;SEjkX>RZP$@|g zUV~Bkc&1Vrf&_${F%($vjQYhi1`SLZj=Yv4gps}O?c?OYd0fUP$`CRC%A^fjRi!xe z-*Wd|8QzO;HJd>=gzh9yMTbhzh!fgFC(ZK;J=gpvQ0ycAac)m>D?i%tw*Tk%M;&(h zJ(eF4p+UXP$&ZYp8+r7WXFb2_^PJ~An_kGpD~Dwj+aWAX-pKu%!(4wA_X&@C?DWiM zJtxC|hx%otOIXTMVQ9)9NO({rEwlnk}iUH9-B zk9_Kk-Ojd`6T;r(TkdYpWtaxr>g_YiYknZ;543LP1)jQRrah6-8F4?$?J7r#Ee!r4 z6UR`;_Ph4rx^@}*vb+xLGx6}1`f@67IP+|6J*oha`ixFNWG|i$j&&|IPu0|`ZX60K zRE!;q&xv9AF$nqm-cd&$7t))q z+%^_;Y~wxiETVvx0#uYP+Jk|?Wv-gN@LR@H#eLpKFjPkwo}>F29#6h^!_7;s_rLh~ zCqKhG2}eX%>lhvQ1ER|j<^mkwt)+hBH~trTtA*#dB9N$Q=rHoi>Cjgd{wu#D5Os4b z0*irV^Tu`4$tRsSJ@;8pW+f%R`{%;1C?DBJH)31bt}!l9=!ANLZRQ9kL7VX0ZSM6@ zU)sj|*NvMGCJ3$ztSj>BT?LK5hQ&%}P>;;uU7<~lr2U9pm}^rENCxsDqp~@nj)=IvpZ(sqF)8N#cttUS0mvgzMiD$Y=%4Vl0yH}{x;mCI zSDEPh|4(_B>V#{w6&mO0_Ui{Nz`W zAAsq=8MP1yL$9jyV}mcyaFWP$(h0{-FM9q{S;cqsw0tG^nLeC0Mdh4hsJ2NQiKDvK zVKOWyP-HIASTG}6)pO6w=?ZYVns4K#Lo(#l7%Ny1OkxXzO;Cx$J5uc`hReD1>~Q$^ z^;Fn`C;nYOFWv-w%dN*p#-na%6l&mI}dgSKw46Lk zTyac(T{nolS6;()jzOW4eA2-^go$~NV1vTAAAbPyL0mEYiLxIy_3OLE{J`I$&5%^a zp+_7xJ>jwEPtSb%6Q;EeGl}~Ct;At%tGz6@*10pnk{_yRP-!;|+Mjl}jh3bNb^(~} zFsJFTQ|I(ve;vKF$+oPftDvjhnEZA!4dghvj|pvN14W8sgJn$;x^oJ za_3&?_4yPp13}Pq&u9_({LceL!Rh2$fVkRTV^_!_Q}xzgSxnQ_A!Cn}t6BA+oH}wc z$WvN%;m_R{R0SR3R`5u?)7oY0ndsz}cFUd29qr_I44Bh`SL~w6pXx{QKi<#Vr7M`{3{KZP~&Gk3UqR za_|gf3%IPV!TM9?k2&{D8vbl_rlSF*!D2!NcyH5u>4lQyl`+w_>I+bZ+y^mVU@zq@ zjVnf-+wiu)w)GLNbT+bvzaIt1*eTB(LCeWRo$yWq>g>xnnl!CNw&PIbi`RuPzE!6k z$cw3sd0cTQ0=BpK=g1rhAO#m4P6?povl5U@{uABF;6ERk@~@Lhtzn(z!T}g1jfUWw z%aE|FXUVN!L)>}P^gVbd^}JuoEe0?>!VoPc9O2RsT$P|2jgG2tM*mLDQM`1i zvQ+jk@_|XHGMI(v)u{g!N8YZTZn*JAoSA3)tgKs-WM=TTn7<+`=N4sJEPdd4jPL+> zg!IkEkA36=({22K>RKkvG|as=3@J{g1M=VZ|IP(;($EqkJTejH$Y2$`IkfljugiL? zhb*IQ!?S*Df}_2P0b8uvfO9?mspDZ-;lokIVxSP0Ltr28Ib0W?J+q?$mDX*i45oHs z%k3y*k3yCK1!n%$wQ)ckt&{fEcoGclWQMM0Fz{u|h+!FyJPQ=Efk=^I05|EtC^G@5 z=flJx@7vkVs~^k7=R`t9>t<&v6-V+et(M_?r6U)Nw;67iRygFpc(Z;_?!|YN1I0M1 zkdC}WUe0^uV!NPeg$Vj6Z`P0qTNSDS!v=5$Gf7&;R~^amIspQJ{2^@rcw&MF`CIR~ z8wG65$~=wD+XEFSeBTF`k&0ivlo1pMMoF2K{yceU{VovJl;gnRxiEE1aUe={1>F(7 zOaIkJ))hE2aK#l@Oy`_^b`&36a~6x$=#dfxUG@Ldc4t4=C0TmVzcJ^bva*H-xf=um z+iebx`sKM!{r=DhXCIE*M z?6QdkKEa;%^;Uw~|HwDCF$kQt@TqKH`}(^M?urYVTh^9zG>gWk1?>d#h9QXeqP@fLy=8v%?JOHF*wdd>QPKp+s>&Q{xB|9=sC&a@QTj^df^Yi z+y`I>lcp{cbT{c4T1KbfQQnxeiq@8TfefyAq@?{7pVUo|n=&QaBpU(K7p^)%S6(Nh z>)-W-;Gn3Pugjy71@pK+zA2gPYUkM@!f#$>K?VM_vHFaF8O2UTVdD1!E}7!ndvxYC&0p7Z5mP2xm0W} zoyB~iyvQN0v&q`2Z*Zm`wx>VFFqA%F%;hrI$v^q{54!ll0Xf7aa6p}#Al+`kv<^zK zGPHBiufJM`a4-c`xX`)^M!r#0fj~pH>?XWF@B5Lz0sKoG{^*CE-#`46;5mfzjxQWM ze~m%!_y+TjDD1^}7Eb?%-~I1;Iz```Sd0JApg*X;?#h2O6g#jPN05{a%-Wyl2OQX; zBWaEY-#C_^p88f6`rI$!S~_QIf_{`=9Fin*?6z6YTX1lR+G@TsJlV0I?Kz)jE4Tf+ ztB+mp1BrafZr8bspn4jAs)*#yTwwdJ9-APL%imZT3y~-MqBr-d93HhuSVrDn@|a|R z2eez88PS$LJCjq7>PjVjW>Y>Z<3R3=!lUq>R;;3{gy}O0C;X*<<0aL*y-$*_^4k^a z1+&?if+tkT+x=|W#AHvA2s`VFDv?~gw%)e9rzX!nPiC4?nlhm3rdvO~WHG47qBIOc zwr^ua{OeSd5j}G3GYL!vEVeowv~{pFewc@0T;BQQlaIR+y5~e4;e&0N4YD$$Uf?s5 z^HMj245K3)+;~83)H5}{Td;Q9ovv8b=ZrAUb^m`W4;dR~su~$N@4U|nJ>C3&m4EF| ze*e)M-~VUhFwY)&dhdVzU;cI%Q3+Jb#TInO@#+|vE{-E{jv1{5KL&QB0ADB1Rzl94 z;A(T{-TQeLfE9lDjMBFIVT=3ob@rL*tL-ESb?!18{$jr*q7DYRS;#eTiKtE$t_J3z z7SI~M3!nMhKnKNs+Q2x6CyS5cZTA}h^rP_G%4^^W%$Q(C+ygQ^1Qwm~*GWbpb@5r* zqN$~GIB#G0i})a<(@*ojk{H@jm~#M!QC&A|n-TQ#x5-cb=m(6?F2L&AgcbOnjNa$g9r1i23?E0Ytr!$iPvStX}WnB#1n+DFiy zccvNaIzoD6b>Fvoqs~mTEcSf=pLo4bpLqg}&|N*PB8F)h?eje9Nr@H=6pc8dS^mmj`zw$B;$Qra2PGa4y|SRTb@>vcoz|)N zqss?*9oN72AO1&~F6XAB1mfTN-T$`woDo|P8{N{MeL~D}O@&bEH_=6vfP7V#8Yda} zox+nOV$-)WE&ukn^G05)&4r$z*lBYeGH`r_U7NmQTYkP%=ABu(v^!4k($iPDLhBv63^3`)WI*O?|0^7jI zaYySTs0|$VGXiuBM00AI{?YHgHm^KJ7dxsFfV>jqKlJ*xQ{crTHFw&NkH9JAk({ZM zwCDt0$6$)P`Yt%d6~+(1XvfYbk1x_!2fivIYcjPkiE z5Zsvd)R<|mheLM7ni4A9=!`7o{p?g>nkcR;YVOg9hNqTp0y9SeF@g-=TlGtC?*gs3 zpkIQ!O&zkHZoHJq0^`)c1o_Xs|_tv)g&HO+A>^NcB@b z=r(?pfcIX6H*(Lt3IU5ZdUx&{>pb94y?*h)XnKkVYK)*hY|)!=(j*almf$yfc>&6! zSD&^6nRbzojyQAcGW*1-M50|#j`L2^yuSq)B7JlKTM0wwVycwx0zCj`1f5Z2{}wco z!Y$F<`-~8q^#MCYn6D(9$k{;4QF+K#f^uI=lTr0O@G~`!d`WZ?9$TQ@I0IK@jtq7; z24B25vJfm~brgbO;Z#mjlf~9VQ`LdlfXCh^QD_w-nE~jF3D+SpkD0+&4=zdqt`n%> zSWrC8R1_>H!7POPQ_?b>8y+Ts5R_~&fEj?l?&lPvNg}5OdDooL-ik9PnPlMnYf5oj z0gdCod~F=-G-bm~>wZ(~XpA?!szrC|94+RlfAbx;?f&Wt>=&&YsUa}Tb)R0GX3@w0 zTk!_ofAP2eg-3rOFXHSBDL}g}(oCJetHTG8nS|1XAS5-{AXqhGkDGH(qJ=~=hSEVlB0p>Fbt3xp8H@eWaz^KV(EY< zSd+z>S?I5TX#k(&rDN+h_B03IEZCWmDRlO=rv^2q(3g*-c#F6;^^1&yr_j~q^0$4b zWjxwC&5L9ErLow?fABH%@RWyvW?E!BLSqWDVKA*V2F4H15qcB=YFC0sK-n{R66BPI z0WV^pkbY8m^{i3cE1oH)5h{Ncgg*T4uj$xR14vfcf{DOQHqG!ONC~Zk2Yv!?DEV&R zi}D3rMQnc$uzZl`v48xNf4pb&@3GzQo2{;_SN$+E4R`zW<(Gbb@ArRjfx0p1H~-Y1 zeDv@C`G30)*9dZU(b<;1>(o}G&&m(|Xq?$vlBa~(Kel5}j_sUtW&@5p3S=?vgKvK) zGcniT1<)|pzU-8dvNfUE8AWLLGa8l_wo=w1Ynj4iaEL?x{O3PS@O$rK{6m11&9UtI zMiJyoj8)bEb;Uc|;Um54GZQA{`SNq;>AAJ|a|?K>56zts;ibM9dZyIfPoMi4X_HOx z58v_hyp+VKT!%mM;7dE&w)G}3xQc$Kulj9!nX55Bo*7zd!7WT>O&saHH0-)k(`1(Y z)rUS}&S(3Bm7LA~9ku%Z;IG9m_47Uzvq`2XU(l8U^9vInos8^uOKroK}casF(&qF1y7P$KiU!#~A zX?pWVIjSnVHvc}BPi>-a z<--r&fAml1p`E|*AN;$0lCb>7ax!rp{K(ke6QWi@~xBuYDAH^m1#buLwrCQ}m}(=23Q5z>dJ00M>{b{CsQ~q3^Ih zg2Z@bI!sa@c+8sx49#KpUP${D4DlegfaTUw4s4MGK2q8?`<}~09!37%ul{5Kx`*?;*@=RJYH-qCM#9nkczo}y$r;BYgE9vM0th=r@eW9b>)j$ZGQ z1jk}GH{EU7@^MYs{_@e}X9-pH-iL!%W>Yij@Uo$Gjz5RaYVh0lF75vO+j#uA~ znmDt?`JN8pk1x8HL(#W#oNeudx9~K&^;7J5$SCbf=?0{2Ij+?k|J4j$+*t#udyusN7~UfdURRcX-l#d z==9=wd|Hqw=2qLM3H}cg5aYPDOL*+%-SG2urovmg_7l7_bswg86xXkP4={R0zhB%< z`8DB7sV(qwW;^8Kd!4%SjRbq)Vt0HCZe>q1yRMLW3cVj42P*jSna^I*?d&Lcdxa^z zX10W%&Y13<0JSM|~M^hvUzTV+q1?04!<@4KI^0i=nF4#Ojw=?uJZ2~xFsleO6pr=X@BLcOg)I_l|KSgQ|IwfL^A<$h2FXG<{R?h-vaKON^-^#x{h{|jS2PO;gAWy1i5}M;|ml7Wv8cYO$}!*-RLEw zG@scZXJ35tTk<)!ug<=Qo**0?e9J*#13;$@9CY*P>@$?w5yimZ{z+c|qCp~>fPV31 z@T5^-DR1WnH|tkZPI3qcm}_QqT1n`kH@e3&UC~cR@92Ddo;~x2Uoc7gXh|48n?Tx* z&MD=Y@P{umF!)JQA0kuQHuliZ3}7lCedW!pM>#ad2ejL-@FjMXo!SwfCgMDqQlRbN zwcOZ3xplIP2u&JkBh(mbxZVIqlcLl%+eL>M_J{dRLhs})Kwiz|^2-1D_x?_m@!juz zFL%QIq`xQEU=EU=x8Vg%N}S!|R}F6)yL}XVKTS}){^+;zs_x(W{eSd}K;Zi07j%}^ z!(M*G;&=Xr*N}bO8=L5YoRvC;A@|IPQWF%TTU*C7rA*pw+bp`~4zFBB{Umtl|AU?$ z8S&pdx*c8Kdj)@*o>w}|D3x6 z1Uc%Qf|OHEf-eW@hqv;Q1V-LYZ!IXFVkR&#VM;u@qTbpx{>%PlNo7hxJV`AJ(Mdk_ zr&O<8=qtP3%fR(>{KA)lpG`W@4*#Xt#A0UalIi;B;ii2jz{9hSDSVr5vNE0ri$<=? zKcNgy#eDdbl+36k2q+8;0@|9#_QS7_ezsH0E}W`Zq#fGYbI|7Unte$(nx0W*0d0X{ z^@_>)>GD$-t zT5!Fe>(tf+{`UX)H>)6-&I2yr&0BXr&!VAe?mzd>|EVhU&17a0xudOuk!=@aMjw4M z?`tvSuY3)lPBv04Z4T%yz<>R}`l~ZVJP}5&kvsW5{pe<#HBLb{N3UQw7H!Q)F!sCg zp7Z0JhkpDAKdfVZ@a+#fx{agbB|-gk)Pl^M-;?$5%O}diIJ-3i_H;Y7a<3D8 z-2#o)@B`v$^fM>=PN}AhKs${N!c8b&;1}=wjD~Bgswu#Orfr>7 zrJioPa5==&U(fti&!H5x2+iK46TfUyO55v?Gjj_*iNR?Lp3rVG%$8jBqsaADZp+3? z^Q$_92QI%nd%48ibg zz$5FyBwNjS=5Dp4zw~xnwT4-aId$WRPA$Ik-RF-!{^&=27zRH-%wxD5`|;Bs=Vz;b zl*~W(DNwBIqaS9rAVGL0;m`gn|LU^TS9dud{`>#;?_G7j><)f^kjr|%@f*KURCxGV zo`(GIf9Jn>^bdacgRXIbytL=vx$FcL znAk2Z#8#Z*d45VN^5-bJ=c9WXu`>Yc0Pno}tu7Z9aQ;oaP8VBMwMnr+?37 zh93I;zzlgniZ5G?s@UlbemLXK20r|bH`_ja^s}FQl3BsLPx@(|B(hjG$z^bo^G8`X zpd6%lupa`foq_?ce-o9{nN@*?jV|tnj4k|MtKCoq7ZMreYuc z_>Xs=z@A@|)#&(N=NbKv|G^IukV%lyH571XM0R>JwW9}) zH-Rxq^PmV@dDq-~nI*Z0fAkd*BKPWIIFd|M(!ygs0%*7jTWX zctqd@`q5E5EH(Hc>lCuk!Cb$GJMd{7+fLws9p6j8z|)(4fEyDzR__Nqc2+#R;Q(J_ z!<iC zoLV16&j2%g@=5h`6(9(VK!}unU<8kI_)%Dxj;1)F_q1VF8w8VWMmaOu2U#Q}IHp>{ z@LYD#mc~=xOkD%dbk{NERG93+J@g07esAWhgJz`hv(g@@`Q+mtWjddq8}IaaX%9KU zJIWs;xnt3&i5+-6<>vka3FW^3Z{-$T{5Z{UJ^A z(-B>9@L!nn=LbyyUOtny+Dc#^`GRl|rK1J8rUO2vHt=Kr(Md1orAR7;wL5Mtw)(bA^=veL(5u}AloEA z2?7*Gf@3(#ZU(Ni&OyKW6l(RONA}^KU>-XbNL!{qUq3#Jcn3Eg`2W}~Iy$)MUfD!( z|J+0rUtW#;;#M)^?eSm!OaG}y`iJ)*!;tJcV5tvcjC(Wdt`@Hn!D7G&uvxPfK|x#a z41;>88wQuzWghGpPLU$Ib>m3dZwCxI3vOX#`ON9kAB$S4u}nc2fjI%9VHJR zb*!{iNmX3x4~q=Z#4zkuj!4o`=!MIdnW|k$@A&6W^CAu-)zc>yY$kcW^R4ec`p$R0 z-M8}eO)qiiLxLt+Zl^zoet4mWE~o}#;HS+#=TsV)p=ahpPvjTmeuUFG=_YQ@ZEavK z6HU_YY$9~npt`R7%p8S`(kBS+xTQPXn;{DRCYC0xvXid~N=fJdV?dn0Cgpe#T`pdv z*7gF_6KP!&(67Rd#N?Wp4Veu-wliWvrtjie4z%+TrD6mXn9+s7X#3xA2^Jr4iZ1Aeu^jlgQ!Kae1N7=wQo^ z^pz`>_iYPf+kvb43MAlD?s@EN;MCLCGfw!V=l{2J?B0YBAj)yBJuCc>4h#L3p&2E0 zwgQlbI8u#Mi^^ytG@6%V1}|avEiYAm;bF+%3K7K+M7!C?>x__6_-q>pfu|t!%}id; zyZZki=h$;c){OAxl*JKV`|d%s;ww2Dy6`n~HU{pqaMlju=wIf+q@?3!-dI1E+o*Jk zk?Q+zdtZHKM;Ub$@^=Ol-ke^nBj7>X8t~p>IEesn5M^JV2}-U@%zkGve6+1S0;@5vG!4W4cyPqsO)pSwuM7qm=*6NIZ>HlBStGXTK-Dzi6! zqOioChSr8E+XO-&%>XdI!gt26ZTY^WRvMv+uKMw1h=_aqIt_2-c5$ayM~b$uFV+Wj zK7|N_FI+^|PR~d(Tt!oXHL#M)zQ2_lKZ@6G5!{aFta{q zHn64bfB7%{Cz<6OM8jdG!?`WCm-PZ2=Cl)SruYFma202T4$MqLwdb?-={HloNfx@c zfaiS4LY(MAnMV8N>EHy9K8Cx~uR!?^40xq<(q`)Xle}~Ar&$;9)8D2#_-Q5$3R}U2 zzWx%2MV*e0sY3)$em3lj&wl~22}P8cwh|iyamZ7VEyu!-(QD4RM0Wl{#Oxf~TJ@K9Yxwp7{GB=q4y9c*}WhgU}>4Tk;J~c$Frm zB$%4M6XY{XUkvx#^*MDT zS9a2uPCXr%8Nf`NWdGOlyW~cN76y;t&VdLfgIv>mIMOVLWJ^p?5}uYJI8rr=KF*Va z_N!6`xHyH2{tZ2yTF}oZ~+xeo`HGAB73pOZo93&1OW4fhT8I+?3$8&uRTihvMb$9;GM(jH6!nw8fqTe=~>}NT$~YX#J2~FTcdg%tpW%6s|zu&H9iQMg zpxkBy2u_39;RZUo7tP@5>?@GUL}+&43jMI>6fqCxZn%qMl#dG>2eK>6>wL1=b#&XRko4hP+N@I{EFU1rgZ?eK^m!W|9ndr@)}Q=SS` zvN@jLS?9oC=C}P^7Zuoj#I&!fHVYVhl*BQeuX-ezbbRQ^(~}Gn?|5@d?KsF}@(HII z74`1`o~EyJtEI=Qok~rRNidv2!n7EfV%0m-)5CJxRHIvC22ZqGJkytqS>aE>zw_>g zkKW95w1$S@AZfzL;RHCE(=b<3g15Y*B+-6T$gOABWpCCxX91Yz5jj#6X^J*y(#sfQ9vpL z=qQE_mp^*oqly5pUUCS({SDIbR zHX+j*C7XVx2(HOMrW#h}b(oCYkv@I49i22*#Z3Y^yuoXnQho?oMw9s{2!j|&T@`|v z{BwvP!58cH_)=V|YLxUNa9pbNbbQit!dp8WW6Z4XXGSxt=5JSc3UEHlsob+*N^3>? zv)q!akB4NujHJp9Pd!CB&LP0XP_*N#fr4k}^8JwwJoY80GbO7$_`UQPfb!2kNjNz- zA5+N(5}CxYx+#gkQN^6EdnV%j%xv7WG!8m4H;7ZwzJbU4w1nTgML4+32qJQ68AaVU z4;LO4Jo{0Oc};j~#_7WAbbD|fzPQ>qdh)`PES%)f`Sa-zq--!e2d5;Q zHh#t*S=ba+=?nzje0p6wY;~3*(4h-|^$7?0z-gBnRu@F*r9RXiLk{13x}~@#=&BR!x#Y*szfsC_`fiXkqvht z#xPNMl&UO`9D7FVLRLwRwU_<$T}AZxuD;4hJ0>4}6J2nMq= zvj;MQfwe%b)+R4J741xifr6JJmsu2UDQZR@Kc>@s&10nZcpaS$E)~9ktap7ztsm*i!&c z9vQ`oJ8;d$odI}_(0QxR(CvsSb8|{hu<1nLRSr5OAZU+q)m50l#d15`TjJ)3hti#NMSHPebwG^}&X(27;w&I%&X-2V+`R6zJL z8shq!dK(!TVU4;*V^l(x;dC+`ts5lJ`tJ0jpM@{+^R>>z;X6G#^>Au?oKu1sk!Oo9 z1#g_gv+8|t1*}f}cgK`)jT0sb%n}`?r!fT>1h40^C>rm)_kNE(oYboWLGs1jsfBLd zd&dxcEyXelZ1%3Nl-|271FAw@yRO9I7dsw>mgS0Y) z{Vp(8VDuWmL(~2QCN8u+?YjnD`Ptc1sz+G?=yW_maMMQ|EBN&-|Jiqdw{8QAH+Xke zH0S^Zj(lmaT`9HI)kp)#@qKWVQ0h2q11b6}t>7}1Rs5V-rZ3%hquLY+Zcby-ayh&H zmPRuR?DB!Hg3o}`)57B?@8w~Fuk@sYrVn;ReDO=*k-tR>S!yCic$gN9Fa zkL`s66CRWea7}&xB6}z9F5gJ~+8y5RQ=uev3f+jcvE?Mot1U#)-&n?BQt)=RP4Jo8 z=5MMukcP012+Y)Lf@6B6P69awt+Qmo?aN1>H~2ZM!uc@Q8$IG6N~e~bGI*;O2=nRa zy>(L+4G)R_FhlCfXZq?l%9lLOOs2>H1uBbjoYiP;bsw8(?5qWzx_BaI6dcuPFCaM& zud&nE8j}{NCMh}+q#l3f7#O1H*OMHOY6;M1SzB<4a*U9dX5{pPzCA+wS{5tKBK%mZ zPR{kcr3j!$#8RB4LDQ&d0H;1FSCw4< zz|&=1Io*R(0-aGcNy@o>tGVdl-T-gIex*sU?kU9va5DAiIdGgG-f?DJAG)F0wg$<_ zb4V4t5x;gA@~!J&gV{k6JH{$8;gkO4wOnxqra(*1W*T&65Ogz{0RKF<%ECieJP#a%7=9e+J=1XF5^P z=nG!$__?2zsbAe*$s+jdXONypB?a&RO_U8IAr9GbbcmF>RWi;H7Ur6F5Cu=$Fqn@% zoV$+M76he+WS}Vh9;d8bVWUKX&D77dGaV^a$-Y3G%!Yd!Qw_+@WMod(Ojx^ufMN-1R~pRK#H;HS81x3kt4N1VIN<9j(kruRtEKA z2n3vKhx!m5r=5HosAol;FeU3RT#kZCW|s(uO50|eU+O>C^Gm>&xWUiH+2MJ_)g1$pJL!^CQrXr zt~zB#${fWZUDo5+9MBYu;T6HLBOwl}{qqgxK6t(Dg)&e1rvEnK5y_|%t;Yy?K< z4)MI=OB>xtf`vPH>ZOtE!EX};79aG?seCG3Xejr3CU2S#PEhECU-skxY3vLuTS@ut z{DQHCHaZUg@WR>B^Cd$m9XCrGK=^!&-czRik_QYxZ#vC!Yx zrf(mtD1ceRoWs7NG=j!3aLM*{${d+e6ZGB*dfr}v=`&MM0aw~lq}f6CeVk$l{x96R zdX+Fo7p9_Vv)|V)wS8owt4`xmx98nE?RH$f0ODMMnFKPy=e~CMAl^|RtW+NLo0UsA z{cE=18l$0SN*B~VX`c~aO?*B&T7J}Ma~e=}CrNB@7iai%|3UF)bYF*;jM(7q+|AZ= z=28o?z$^VhjRwf*<}lbcqjFCNdUU=@Z1%@rq6Y$(sniE;<%kW9N)5&8Zf8?7>)BxB zkPWo-2WEj#aH(raef%qlgV-t%lpWk)9#VNk}Mxf$ouu-;vB)}LHE(YEarIb^r zlt7pl2zsnpI4dG^ecDuo0JFU(-su%YftVyfU~s{g0BboUU)5j_&ilFr2X}TO+RevZb^gqUp;ZEiHgi{DrrtX5W`Yg`Si|m_}Heuxc zoXGIJBYvm+u@`61uXwU$prIGU7+OZc=-4Y3A;Vn}n44U7RzC-+7;~$py=-Fu=t@H z=Y19!IjZ9p=VtX}>c;0w8G1I4J^6Kih;;>wMu4Uw)Que|B#D zu=s*ofcL?u!1E8KvXqxYYe{NMJ-oSfBLiO6{?m4HhSuVfSV|{wt~{(>+#ojt%>)WO zTkP)|8{aWYXk3N>-`CHvSgelGO@RUr;LWz_MPl3nSKkLPQx(+#NDodw&URDSbmH9k z)X~6(NG`dZ$!HDBxD?oJ+Q(=d--u2@!-&ok=wUj@-6~4tF8V|VbrSdqrQNxoox9?# z!EZUAJ=e%rX`=*O43E03((SKew8QT&1hphk5amB}`Oc_nB*WJvomr=VV@5bktz58= z0q63nIKONBUzAyp`!RtfPW(p6m&>UFfP_ zPUkue{KNhO-9j&@l_slfb*sIzUFV~3I+TV+=Kx3E>I8z6T}+fv1kg@rwXMzcL#wuE zL%sr!J-F+m>pOtcvLo#Vd3lMSm5FkuZ{!FPI6PZlgu189YrI_rIM?7KN##ge`66HX z+27e=eU{D>bT4z-w`GzV8|QQh-xybh)$Zye7&i|+F+DqF2B3*8edu9%z;y33i7fE$ zPw1`hb}b=tOIQXG`tE6Pfa#6xCdnUrRgWQ@`nis?Or%3c*&KJf3d?b)o>io2O&sTB z#3~)ZAjJ?4F))hEaYjdmZ5Hl}5O*+=NY2WiT7`-L@jlmZ!y?W(JMev8Om#^~pZ(3y2 zn4}3&Uw0MKjdN|nSkm zO(|@6c*DK?=TYu9q!V2zxK?(Go=!d1j5d#1Sf?}*MJLq_{s~&ToNjGQ4@rduM)#)O z0XVpdV(H`noKl$s=A3_DAJ(9SJ0KmoYp3`_9rrY(*{R@OT5Q5%pYofIp104Ul$;`%1PuBkCZFKt8TK7&%)Fmhjswgrew0eI&ZAd z^1(qL#j)ar-WGEA)Hatfiz9gS>n**pWkSBZmd3Dl;cfB?@Xip()T;q_%O}4MEFfjA zFzB2OW|CkaAB@iG{b>r**~^a>3^Pt2fTku)Bv9Kw6{*?4CtR^oQVOMEOh1W5CPW`h zkYr!Lb8Mq>N>9jO^xiWME}ct`!LWgj*~{Qn5dMT`5#-C1PLeX}O|6!T-&AoX_{PzO zM=;8a{@Do=?Gv8d$cDqGnT9E5A~J6>!x$>E^c*tuD1Jw0`*^6)lK@BOM!+zUde=_K z;Fi=?gS8&j>fZVth|C?38a-sY zcB&lV&laDywKchq>_^0cdLZoQKl3^^wS0DDcAG#GJo}_nSAiM0&`*3AQT?3V(A0hG z*d$*1{P^H2{-WyF$UJ@cG`!VI=+}1>YsHrOXu56XFZ#133!Y{b2+9zQO7=<~97v|N z_~0@Kp+OC!o7}LLweh8wwXd0m^fAM;kI@~K>U3zeP*^g3+ix(GHl|^uF(`-h@s79> z4rl%29?8-1*j(o+ozkA5ptF^|*3L2eG>Ejp2Pic2-Gs~L6y2@e?78H-c=v}njv4_R zeL-_{*IsRcdSp(Axt;h$Q1o0qOVs4t zSB~Lq1}PZgU+E)J%^C)r>Cg8AXiJ{2^NYg|P60|HFwVzY0zBvZgOuaUDl^F7qSQFX zh!nS%>BCs%3W0S(iYU=DMU=5B2qF?i`Y_1Nu}ZyooaeutH{M)X_cV2b*DMIuu~dX6 zd^R;zcIsqx%IP=>rre+4#%D&`7?M)7GzfxWrd_F^G!1qj?!Ha_DD}$LA%7eVu9j@( z)F|7~(B1$ngKz~$J{t^gCehKkcM8-T0J5Il;++rGi6pU1k{pl$sg9zo+_ zNuH)|$bL&E0@U*7TCdr_AiEgTuL=UEgSfDdnKz3 zxw}YNJ=REg6^}<#_sR+B#%qO7VsYvnnt2w$opUikfag5&j>)^-E4ahuj7sO+JEIk3 zlXcUfcj8F|BMu>Fk!r;YBWN9=O#k_epzy&|`=-*b)f!d1rjYJM=__PbF^p5y7hf7f zZ=7cgIBbkD4o5ZaEs>4;Q5wGHR@gZu!uPapUIz5e?W&n)7k2BMgXZOqh3Bch3?QwiBm>eFr zWn>zggFE^~FU4`~+#?H1`uPkbymeqf9KE&Hxpo8R1b-^qLt|vyD4Uj@H z-2}k|C&G8UR<5J_paRS8F?UOK7?^TdUITMtiVgXd-!JGwW9ai|`cTZc40_J((Jrfe zA;_?V-}>e9gMR+DI2Z3J>osnNGmNFbeh@jmo&Y?(j!nG@3V(C&pq>Xp~gt?v$9{Z`LFdlg_17{Lc9*XOb`K}s=m{V~wP*8l|s zA_`UX2zTAS5;zzPLo*`IM1upvK?sa=gw=P*70F(<+B>WymVHwVocfhiI*kDzGF7?_ zL{N-al^h0d3hat{+FH)m=t|l5WsmCs!3$q+P#KF8hu7b zhd$g&X=b^-NxQyf$=l<5B(Hlsn|M-)<_UgzL_yE#*uyKl z3Yh{uuy$I=sqQ3|qk~o!x8R;6S39L2A8Gfr1Lx2q=OA5s!VyX5)Gs*7Bb)=4J`>#F zs-NI0p3~m`;8XUkIf-lHHeq^4q$gWf#|1p_O=JQ(z#ANRMTd^~q*H^{jXL(UEzC(c z#d*GZIu#qkw+nxpGxQ_(CM{jYmv0#Gxg$3CDSU7C<}Ssv;+Lw?WB84ac1D-FH4nav zKREfZQ$%)n5g)nk1g!LfyWd^Fi;yfpfGRzQWyXkAWDGv%A~zOg9HaRd9A1KMKY^#n zpf00a4iK381-=6H3ub1t$u>q+Qw5gx)K3r|rwH8T9H(my5k<5d&8&jJ!nXljTniK0 zK75q^Q5LvOzUsrqRp{F&Z_C*(Jp~3mFU$Ca=Nrzg z++Tgk8HUJQ3VQbFizlDW$aMH8-^!A`+F*IS2xo_`h`;MG4pyJ|Xpn@D)&=g~d8?N@ zK{glzUB_(T+_m$c#V-NtzxXQ6h?L&^C?n!s--W}^@MZRQr$icw?gjtnxyN5iN9H?W z*X~YbI=Z%vO^2{R!TbEr;1euo5SZZhrYU9pr`{euswZelxFFq!+f<$nI?x?j2jcit z>>hoPhY!^L)++LU#n6c*_%B*KEO>n9fg-(|t4^Qq%7+mW?Y7z48*r z?r92nL*HVhvNo8+F6e^zFoKrP1hvXqs{QISslvPcmHX?)3QdkNohvr1vcE zVQAm#1Ew4P39db!zHm2~g0I*3gFV>F7QWFjJF@D3*K!**_zn~iC+0bm(A0^iR;A4;>DEq4d|W?q;BtFpa*^L zPhmo?db6!R6D;NCt8Yd`D&kBvD7fc|+3sjT2&LN~<*YT_RFff< zGd*z?U=*}jQ)^XG<#d71Gu-srmf4+GhlOVAX7tcLnQ&;^=isp2%5DEaaMy5=?I>LE zfW$YYqEwI&MDv@$T^i|NaZb7r)Dzf4&-WyuamsO6mHBL`FbqGZP1UQqy`dxwbY^uN zL}xl~;?EAAUBC8n3;f`B*D^{XFxPbR&}<+Vc7lt%FTaRwjy{$({LT#}<6u4JY>{)P zs^lGdlAjPvj$}an&3=Tm3_aExO!uM*lXYP>3!^h-(XwkF5M-R zZPD8%_&weCX|DCJos76wp(}wVxmS)G?&>{>QaipIkUBz+>1>@Acz8>ED3j1{#;zP~ zJ9Uv~{vu1NW-&MN9bZ_vmzO52NoU0$HJ3E`8v|E8QUTKD2L2=fc{K_N=d%}xWY{{Z)r*#f$Pp4W=bVQfG*?kUTUQ9PZnCLi zQa473dY0jAJBzp!h@UBp!jL;k-)HdB2nP(dirjvc2venJircZG&75pY9V_%ZDkoUB zjC7GHycfyEQg(tD>s)qm^>m>0n0*WYj;t+*mn!PuVkFS_E9tQ6Bd|Zqlz)x5s#-Mj zOhS%=t0NKJ70C2BSYu%sJokM$uegRgS)ZMJmZrn80W(n>$)=dWH_ggbiGvq>-@{?@PV zSS$VYk$h%P?hjxXNHH#bA!m5&`g?lx12ULMZz{O4BWEE49o0kg<< z7!uSo9Yrj`zRsE+{xGjJX*3Wp+^RFOjuA}vChLy#T(gVN_CCH&i)i%}cx%|8rzj5F zU=~nqUA+@8EX>Ot^NWyJ5_vWZ|SeW>_K=C+<3@t`P(M^ zbOBL=?hhD?45=fD1Tj-WGTl2Jxg#Oka9mQ2%+6mw{Y4&Y&XjaCvXqC9?b{$ulRzkz z;OgqM#BxxVMqoDS;~TusB%s57`i#EvJjC%2LA8aJO()?ea!)5nC=g=9z3J*@ZrWnI z;tmsZX!T#&fbC4E`r%_Ey>}b*&!8Oz-pdUhe*8_DerWI&Q}bTybKIE|e4^`qvo z$>Kow;NjE(XiyhH^yoA$f2E{zIKN5lnJPGkox* zEYIqo!n3g!K73an=M)6Acr$#s=fADd(R~ryN@E<-6#hPza2$A3g0Ww<-YFr#j>Zs% zlR8us`OSh{-*yuiN@?;4(@P*qmi zlvPX*{?Hd=O;+C-16;aJq6>ou&nBB;bgCI$z0z%VD<2#b8wZsXM{7B(kqTWNOLMxX zv1rQA;G3W>UW!T~n`1J$U;T6M9mGTaMq6OemQcnP&~gAp9dXt90sihN!+J z?894~W`6@VRi%-}BjF^i1_8nK%OCAov+;v4l^xRU6CUwXp6M-3*9fa$+VeFD{^&&a z77QraRu7K(?y1)*@Ee5utoq;C#rUS~O}g!i>6Gm2y9=dX=8@y|V=Zed`l)@6ZQ8Xx z?J1yd@M?Begp$5y1-;A}FR35JZ;5ZZ#%D={mcBLi;a9&cc+%Hhfu@t` zR_D@Jk|wvZfip)H{nXDC9_&gjIM9>~E`7y*UX!KXLc@&osf!=%457FWzmWR@6W6XK zBs^A6^_xHj4_vjG07;n@^0A5ImtW`p{WCH<)(1bs!z2a!=&#QhsqpQ*d#<`19Sn(z z81JhBtoV=ZW@fShyBzGybo5duxcCO!PajFY`Qip5z3e{HYlo3z>{}hM&-z7Wkp!YI ze(+7((x)LyyQCmTT351*{{Ezw6Q;xTYI-;u0{QO9Hx82y$z*9)eT3?CKSsMo-6L2xfwKUz3Yoeaoi!p+ zEE1V5pu1CN&fh6u9WD)gSbL7Gfn;-(YI|<*7$Vom(owv1=L-QyQbzvZf>(06Yr``G z^mJ)LIz0ep6FAOxkGnFajV@b)wC9=8^*58CS(I~ZBY$x)#+K}|kCps7K&&{iGzmrE z)R|&W`wfcpZEyt-J{oK%Syq2;%T7VXI}w)0-L`Mqx`i{RA$2HqM_{9i{`5Y#(heV~ z>cC*zMY3!=XsEZJPnf!B8bm&OIWO4I<|Z)7lT4E8Yk5{)$3ERy|BODu)9{#=b3|tr z3&~mAWa|yiLv0>W?+=ouru|5e{w={f1K7$n)d6U|;0HSkmI?OYZd-U(^d%#CdODQd zmIJr??2M}oGw{%%J@1UT68cG=z}Q&=9Di)b(H;3qYkw*{(OX)>|Jo~D2W)(GW^c>b z;Cki`rB)q5EJ#-+`J$vDoNK?Qy~xs6b{^&3A(79fuq? z9)3@7N5Es7;U}UXb^7XYIhE=PI`lZeCJJy$jhpQ%xyIxi!HGwuftoG;F5(&#RR?y1 zd$(;bNVqtTIl4&~nfJ&6PBN?>4!p)O)~s~Tl>dv1Cp0%`>~}RBqEmLvzp#~@2>AUwf z6jvDV==`Pg=-R1)8AA0HdhjXii{|=vtFf2n)=_m}_Bj?W$w6=9#(pade#|7Ta--Dm`B^)H-eCEL}LN^7A!Q zCACxT?XlT;_{aDdxsd7K;9JB;QQGS8=z(X*(wcg^!xR1<;w#?sg=RlhO8V{;&;T3U zoVa}5@wCZ^V_UfLS}MOLtl*^%Li(t>)6bk+`XwK)2pi{N;h9+o`qf=oI5KE&!i{b_ z`edtVN2H#Xq+*i{t4tXL%Y*4>`9IVBO){YTG7}lDseO=4aHlnX!LH1z1*U0Y} z?CI9yJvD%F2VoC{fpJdHE)w7lcnia~=)K!=0mJBY2DnM&&)$9a{bmFR>fm9bK@fvM zRwO}ykwHF4#z-URYtLTKZ`FA}zIV8B&iHKlRzul`+}Cfqb1Y!z1D`vB)e+8Lxc zX?HrLG7YC_-3(jEwAG01j6UTJ|LRu(PGP2;Y3P9;qSFtZCZ;%8eLo#mk@}Jomh!j& z8Wat|*G^vK|tLzkW6G#N?`P}f5o`4TLy_n_g z=tRW(GQnW_DJjpnKQ$}lzW5EksUG_dgi5%L3i&?|{iIWJR_fr)zJEB=pzxaMD z3)AdV{|^uIT#Mte?Ig+^6yf;MFp=+wVsy38$;T>N19_4xdo;n~8QuI1pK}bSnTa|B zg!WF5Law*pXRBjV!ku4~miowFTVoGk@Xf8=`Z=`--d+_uNyorJH=5H|GRquT<{8Zz z1&Sz{Z|@8%bAl(FQIdD3aT<(+aR=Y5^ad-$MUOcFe;a9<5DIV$KOkS!@w&|QN&hv-^|wsxE>2o9a)vDhE9r^7i0+aIJjIA)U` z<1wXMEtb#W5x@AE%{XdL4N_rrnO|RuJ~JvQ`+D!NUfwUqO52#PV5RAlpgJ!jqn8a@ zN6+a7-q@B5O)l%q(eF&#@y8F~?bi@U7dnA|?s`)_{C7qY+}iCM&C5bT>>+uVP*PRr zOC1`0q(;>(RF-%Rrf?p$@(0WeZ098U2X(2$Rkwv374h+=~Wyd+_To&xY! zE8h0n99kZ zaM3~K>;4Tru*xbhBHubi#UNWgSg-*4qO1IVy8IB;IVB*inOmo)&VZ`2(gZ$L{Mh-cYdh&5zTM4^# zjvwjPa_Tp!kO^Lc47=Ok))5pLo&B3{nLoSN`x~5M-Yw2)+{D*AMF(X|F%0BP!slpL1+x zVBznT4?gl~LWph@-^14&x1tR*fJ&U>pXb!dJ;U&1vvG^CnFQX-MA~4(kH_mf1E_*i zag7>5(o7si78u?hq=G^H!j5;8E!OLO{c$d92m)z@8X+jH!r(7>i@ykiB4sFH9EYO_ zPBhAu2~PkX<8;D)v=_K^_i-pW&B|B;4uobxsF%A8q6{(Io@JRnYTe zAfr>s5HKkE!_???`W8W&Cpa_~@&r{M89w;g(77=il<#cQ)V@ugo1DwU;6)3ptpumb zlu6JxJ3F--IqLKfrwpp8m*85L08wUkl(r-qGfu%T03I7;j^g#lTjfJseF|FL(nkuN z7k}E3Vcrad4Aq%SEAK(A#YW+|1|wfXBTG!AqH_TfDu`lOKR|r@GzXFDrZIvfJ4)^ z)5KOW*ln?^S(P#vyUaKTVx0h&>1-9p^A!b*S5^@+W9l1B;Rjfa*v>f!j-oo-!bP6; z$u~J~x9tWzxckRwrdmJ-LlqCVU!CcVJsfvHO0%>x%ySYXp1kJiG#Fx$;M|#ipW4^s*7d+Wd-;sA(^)Yk6M|P^Ov0)klUz|XPZETF3Io_n@)!sWu&~f=BM)oBK zPjEKYQst%_`XQsQw$;2uqB+n9Kgt5BOE@f$h1+S5s#oN&}-*;cIRFgxlK!l(Za2? ztr~-l5E=rJ{|$B|>jK#^`MSRk001BWNklOO29|P80x9fK z+$cHCk#k&N(B6Nef1BpTkdb>!bsJo+Q@foO?&=XXhN9C3UbqNfLzc|o1_myp348d| z*~lTFyNRQOW}O9a%L+P24BmB~RO6TNL6l%Nl@mX77=FOelP$T`*B??X(P`E`xAI~o z$)gK?d?C#laf`$L`RkjV2-w01O0d&=U}p9;!CI(%b#{{~*Z<$i4|moN%F*CWxAL*r zz}J4Y7qkfq_DvaE;6E~@URNz^hXyRa)wj9`1RVs{v3mIH@0T3Y4u8usl7kL(XH5Vt z{U%WW3jI{lJN$U-+pp7NG1BRIV=j7>_~_FEPHeFxia+qKf$#-ML9Bh5wIu^En%Lgo zMP&b5%q4E;Ja*9q`V_P^ZMC(Wc7vPP^$%Y``AT4pO$S3%{iXz2oIwP&~^;mw9jUy)F)Y} zDxU#LzfFW=Ab~JbViZ>S)gHRpb)o>Q+V5ZLgY>e?p9vtFYiAEG&(>UNGL7qaflSHgH2#wNQ(7mw|j z@5&fFYOa|{o5w-B_^30;*u-Tk&Z*S4**3U~f#Zhek^Zl? z)T^7Rc#j-{?!OrgbIq;58gdelhvdN57MXE3*3zjng>3iT1Acb{t(i&D?}>q6;V<~L z#YM~-ai_i4W4t#qr%~b|>ku-pGFh`hdkDVxY;Q=x@KHn{8w}~Z!9m#*1VfnQUU5~W za&{RI&M;B=wMR%(S*}tx^VLKVyt}yKSi85}5|$IlpcG{E4@Y&Z8jc7>o^9AAJD9ee z`Y|5M0@e4XG{-s(t^*UzZE&lJn8n+#vk!jnKPb-Ns9s`R!Ed3^?!0&Semil;RqOyV#uFgvbMs+B~4HXXA?w=kyb*YP7!c zAowvDy-*Dgsz1Wqq&5CjJEpyfuFRl4yp*xD^;nht&>};Fb(IW%eD|_XbOBBoKI7Mc zN#)dKTiDb!@hz1zIzpbeN{slMw;x#ALGlJ0kGFxu?Y27d3WTo8Gl1} ze~jnx3vYzVX&8Jd^PrI@;xPXGx% znX`(lak`g=*-}`YD{W|$ySo^KXR`2cu)P7>pFa4AoOgwRR#q~6nuXH2u_rzB4d42g z&usSxKQ4rDl>p$uH8LFzkjw7Nxr|a>-s^7pf~G-1mvO$K$`NK%uj3SzoBnrXyXXf1?rt{tr(3Fne-awm@k9oR?D4)~IY2W~4lQt%X&J0-|Kyak+ijCNW=^^Ea%O2{bc#2c3_mA1qEVZ*eGo{BYd7eqtLsmidy4UD z9@h?iH#@PlSs$JZs68#nj2j+)_c%9I@QpcHi!`Pdeo410(`9&r1CwVouaUx9lbA(A z)B_iU(M6r9oQ1h+q3|OBI8&n)Vy0r_kl~~h8Hr+M(9Z^bn7C^+lH% z{R56*@xQXDn?H%8kGqBrBQ|&tOp%pQZvw+h>UD>vAlZ=s8Ly*F;ExvTs09QY1r{%) zr#HM8p43*~Xu#aLBxgh=ee>PZ!)%?83Ie>7TPa_mZ9z~Ex@mom8hkl$I^iz0!I=IB zrZTELrL&f0Y`3S)t-WS|P1=$)!b<2~x=&U2v*lMH2F(Ozb=g|oPq;Q<$ zv%>Tm9UndfU&{FHjPj2jkKVPonu8Mq;v<|OdorN+*F@V7B;s!WORZ$L7ICKpYIAprt{?i_-Ht@ES{zYP| zgAyh5S9lM90#G41eqBbIz{`jhMXXcsfpU{AzV{sOA%_D47bn(*(QTd93=gA-zKEii z_!5@It?v~5(U{AVqrdj;VqahaPv3Jl+MyMDwBM1F>`l1Q$;0BVui=Sd;pt02;+RZO zhshS-K7F$6jzM_o2`%M5S*vOQXy~s+8Bud8mcK}oQ8)l0vVX*e<+{Zd14lL}^aU|V zEE)_y8_eZ&%fQT=Bh%1Bb1b}c48q;R?NQhw6qZ1t<&b-XKrbY;75 znZd0j>&H!&MSY+`Z<7Mv%frD7f=Vh&c|{|m@UWQH*oi!+T>Hy_rXo4pZ0a}lh3Pa& zWN^4+xd}3|)i2>ba$kCjoHH90r%BqeqXhlzv%D%9EpKkA@k@BldpZIvQ|Jb-bE@Ty z!_6o$H3J$Zl2q*bkwi&=a-JmUI%1{%ek5q{XGE+hM=9HmBtiCtC6LxIoImwDQZoQv z20l&EK78dTU!Ac8HzoCFyv-ci7#@=t;Oq}5rp^_KKCd1O@Hfe2zY3OVhtb&##pKKA zAs@l-6iUBmxs10XaCz1>ef_s8%qS9yj z*xP>X?&~fNH3Qf+E&96pw~ar2HLsEj4+c3rN_)l!+iCG~t@0 zIp1_C8HQ8zljSFPT2@(WH87ACm|sKukRa2ndXp(_&OF@V7Kj zVe}s)blb(a(7~fWHc%XMayqEa@m^-yd>w%6s2bS&pcqky>r4K7-m<^-PTSu9)(1&0 zGccf8DZmH6dipH?0x1Qr3ANEjxtS!hILQV+V6%-6@yFg^l==?R`FhOKsWw2_=^?#!EaN%*%^7#7P~iCo@E86|zruZ+0+L(rc z1EHy}Da(E@od={g{K{p(7-|_H$T;yZI!sh-w9S(B1_{wpi^R;3z+>UBPq38eyN4VmE#|kfe*&}1zmLDoC*)l<6Tz4vw#`LN{n;yekFsyynOi;bPmm+ByEog#e&EtN^!({D{gdo%Gp`A*Z)+{-)nzVM`(as>d-ojqetjgn-a7J6z#tEaS)y)M zUS``IzB#?)eQRyB*1p>{rJj7k>Xi}=m8)i!(I;wqny0rJ99|TCI@@LNdPDWxC{(dUaXb#epgI!{t1(L{`&jO^1{TJ>ExzV|!b|-X2=`iodi;c~aXf&D;Fjw02z@ zOmtzJA-gH(g#`V9ayf7Qemy@U+4bu5Z%W+T4p%=3K1BAn_f~&ew190{_6s|~j#Q=3 zt3r}l^A%>i7K*Zx-yy<0#rH&tlYi85v+8Xjsnu#4uk1^|1PadCT+tTExPfKkX67%I z0~L2Z3N@`ZXB%kasuLRG>^pz zkhZ%tp3HTOlk%E4zqsbg>*w2B=X^mmi^Z>17y4c}@=`|ombdd{jsQQ6E9=-eB+^!z zPi}53nBd|S{jAM%THd{wd*tm(KPKFI;&`umwRYev-aKZ5tHE9!v6tHK9#ojH>v@*l zgQ-FpFB5xO#D2&>p4n`i=YEe-EIc6es>SK-+E>wUd$Mf1tD_A>~-m?kq=aTw(2K1;^DD6F=Hy-F{zva_U=q zcGYekagNg|msd{Fn3K=9iTSi|DtAunUOBqpfv&U0?VAi2emESrJzZR|q%_NC?Jmnp zq$3_?$5dTHOSi>8NxagOQ*7d!DpqX9w?)-SaCV|u#_T+wfy~bMcU5zD9p2dc<-?w0 zRyp6|-ShYI^nKsc(&^VrD(|`H7ZFy@YJJv6pjWoj?$y~Oo0>f`B#x6aK@>65djswWipay(?3bo93Ei-MDd>N;1Fd_p`wA_(ic@&@{3gTpG3$c&i!=knuSx4`mPHKrjkzQzmrt%`Z_C5%v~#I`Bg~p<(#cr z*%$J*Y}Q&m*zj{5GBGqBDyeNc7%QO1Z(8jQy~Hl@lhoONLS#Er)u9M#&}#ca$myE4YXYsGHm zZixoYTLQ{Hw5uN_up4ul#;h=_Hv(+qjQTH?k<_zE>|oSs;{&+V4A1nMmuIt z@3tQHj<{P)-TYF_4xLNu+HNnIdP)D|sp8(8j&EHW0*|cz`oO~=u}bXOgUTJEftG7m zZPOUMZDsPkzPRIySw?XppRVubS=+XxKV8Wkabr=-sq99MPt#S_m+D{8cy;r-wCZuq zu5Aybb2soUe(_Pn&;2WZ+@~eNPEY)2z9^MHH-&>K;D_>Oo}s#@#kZ3?dyVx!n=yvHzIZHnUzy9+jqMB8y=uD@lpo^H$tY7Ia8X~< z)mkIBt|i3mR{wy_L+w+Evp)s|W${?Fw1jj`^MBRAXCuI|bLo@2xwpQz@%^Zqmij>V z#Rg9SkKi*ZuQv8&sIXTUoc1^sO8-pwsgC6yRaq(3K^pL)nbb;A<1 zL&_|SF5(?oPjWp{FRBzx`L@$I*QeQwl~+1p#g}vMypt!{GnmY9eW=LJz!17Q+ilQ> zQF1Hqw#^qG&~wxYnJ{e@wFnhe)@$3EoaI=#B!9D5z~L)#t%}Dznj=_@auzP@+qARi zyywkb&W1^u*Q)0)UTOR=t0DVZuYZeW;P-X!j2Cu9tL&e0xcZ@OMQi7hx~6yE+M8;Z zs7Zb-WqX;jZ+0dFy@o;GqDgbgxGwKW*}e6ZoDTQHArlKm48M*ONxnX3!s?KD#yru+K#Zs9$e_h$=dA0O@N1f^2;){Z3-n=O& zH0S(qSzg-Ro_(X33;Auy_BmfS_g>uf@^ziY1c9ZThgQ0DNqg_4yT+@d)5^)Vx95V1 z%pA5Fx%rNH8S{7Vo#Zc_SsPY9Xm-&5nCX!n{-1^3%wY_mSBzepAoA2tRw!ER)Ri|A zRVTh$XH;WaDrQ*XtvZn|yDvdomAOgf@PzycFS2H3##yJoSnhI1Q+3^Cp^!bsI(y6K zZs1L1Grz!anqQ5F{bE>va_l5OFDdQay-msANIMoN@w4pkf5GM!zWp1=)E?>3flp_4 zmKvOv?6;UuDA#oVz_ZP|!P8E1PpuB+{J{9xuH{gXw4lJ+PHzMMZdYDwwe>Fk4l|uo zGNssxpIKZqS2GTZoyyY2SJqwQvY#(Q{W@#>H{Y&}ZBjZrOyi%iFM0H67MtS{iS3x%(RE4iwI)aN&6@OCbEV$cUm+~ws zImF^vi%_omQwGnB1M~@W9o5$Ftk#C3H&SVHobhWYJVx5Xtgy#K=<&))E1vB)NM~nD zS$^6&c_EXhq~fO{11Y(Vxn^n8rlosTPkS8w#UnB!`03K{XOo}L6`s{BHZSsdr~AH- zX%1ztE$D;jJ>JG@u+=fDNAa~vtKZI*e8+3EzsdBeu~=Bb{3G3a#R5;>IqAimzP2>x z*zJ%K;e-Lh0rpj`A~nj2@y606Zz4PGZMQ~-Z!X-tBE!bkbx)b(#j92Jt<#MAZJw!V zPIc+~vb&@$L)2jWN%nEB`4ze+`lY{GHH(Grn=N;bDd4+-eVvb+*(JIZ1)UA- z>AubWnkUb8mmjIAah8kctl8`6zWpyJt5}z#%fIPQeRo%kd8u7z?y9MK)*KFwYc1I5 zZQ_|AvuPdcvR!`n;-q~RC!BXTYwFiGd^K}Ze}I)d-Ah&aT8)U%PwF$~sin2B3eQj! zTfK`ZV(@uOc+TFZ?-OohCxz!;b8{%PDu0-fx76xz#ra2!pYtrK;I_x{2AuV=A;n4GU{U3SRDsCq< zx4bG^eDr(CwuAE+2ePMJ7nH1Bx8hp6gi+f=5sB(fvPVUp*ODDdM~fD7t!>$>Cz15_ zNl=AO>*H7p5ot%sYq^swIrlcd%DOQ(VCKx#YD%kORid`jdB1N7v(9ohPY}A9!67sXuYNM_BwUCK)emrcBK<*i4BKqS4x>jZ6YbI(2E6HYLmd7)zK z>Zx`vtXb^-e%^^Uv|Y&F>K{CwJm09);;54LF}O~3?T=-CUHoZ1a=kT&>Up&cJz9*j zJ^S(R1!B4Hvy?ifs>12#+>!bQd?w|a<_BwBWs<(Wms{Qs$ zes5K`e>|Fce)&zg%lo4B-8oG%_sKP%VVtqhP}?uZad!V2_16*BeV;W2p6PEgejPZF zdd76*}>s{FWqWJh0de7LeE#CjyYv9`5X1CfB6Z5t6oC;nY-_m?x!LtV| zj^z3~FHq5poKT}q_eQ!~vFO{DO&pg)#pO>nwC&~Q^*OpBG9Xa)LdWrf`p88e?w5Qi zab9RSh4nOBcT|$j(Mf3nNmJ){T=aCQnksWA+PWe_YJ#1g$nnO9fsrnfRSVURx2_ae z!_Xf9jCCpLILNu<$8| zQF2AwA@DNVmVXR9wU4GG~N&(DyfYwB`L zD-4(<6jp85o?F9oIw-`Uy0kXt9lJ)(UuVtb#gcOmW$K=ZN?&$B_@+R}GQOoU-x%!O z4PG{1*GacC$q3gFtbcnjq|JS`AD=o0hkH?~zQWR3^7D2+nj3WNj;2N2^){s$wT6bK z6J84V#uhz(*bpP&;o9?@Byl-Tud>ib=Tr5X;Mp~q0U7I?IZWr8H949De5IEzuvTlV zD2Xhp_xSARa(lL_$kWr-i7AOv?l=??uXXi!)0q^}I9Iui1P~w*2-^4w;NFKd198 zmN^ntEemB&KPYT}<1%svbEkjAWxMt>6QsNMOsm$~_vP#Q zq&4we?(fghH42{Ee|5z%6^1=;?Czo0iJxz3)pBOKaByx*@6{c)mCS)!7pKg)8qel4Ib~ zDo$zcTIqam+H18w5i^6cYqXw8ZRS-s)>QCJHN2$I_U(SId}@AiFZ(&=nQtz<3wvDBu%csM$+QK*_m_RnB&?0W$uEleY0c_yf~7nx%ftkkD9EOmVbxX z;h38jKkI_od(Vt$_E~&n!Z{f@4yke`OE1I43=AV`y|Jbpg zW#H~4DX-l&EGAhSOE=|TJ2TBb;)}=?Hh!|=l^hnCklc55F~$PIjjUov!q$X_KFgA~ zvU`6n+=R2qYVU;pQp1v_?g+~Xla}1--ut#HY##$TJL>pNlctsPoYry8=;GEmtTVNk zZG*;oM;_-0b`i!J1qDA@?&v-7ikz=gwRdg$^j)=iPF1zi9mUsrYYzuIUo2`U-NV-^ zKCu6cwpfJD+-TK#%7^(}l@1(klajRTdB`O8a>#i9iQK=VO;p)QA~+rAM3j)c8`mV3t}Go-+n@hr+eoh zS6ROLMX6inyd478k;>AcnRQpS*rY^FR%~wP>@#mmn3q^}d9h5{*~vWxq>ZghcN=#J z{IGXvK9KUV^kq(&Yv}beai3>+3a^YS37;BJAGAugP;+ii72leH-cEt$9QH6)PPVH} zWlw6-n)XTDB=I?zGm8Z>Jn!bbszMJJz?H{cF!(P7C9lVquX{WA zt)2aw)X@IELv<{|smbh<*77_MUJ_=ttWn!}kyX~@o34N5#WLJHqSR5BB zos=8P*CfUM=2-t_5^o+mo^4^u_0}EaVY~PNosqD1c0Dk4=GkMB^1c0$T3(Zs-^i@7 zyDuAET4u7vm4%sZ#|M#u<)S)T!fEE0vjjt8kA3&Ea>&nDy|?WB_ZE$$oJP^G@4M)Q zeC-$XcAToPE%|u<^$zQg9ugvtvpSlX`ai5)_&Ikr*Q+{`sI_S?V|DYMVW)^jiT(X=sXw9}V z&B)9Gjm!v9?SywKpJQVsl9f4)xNFO+XDuy`WUnyv^zw>0OAhiZ<9saU>&-iOBT}K9 z`{4JR_D;=Yrou>Bg}IAT6603-t1xi#aqWN8w#ls|#H{0^h?$F1^RAcV8gh}tYmVm< zZVO5$W!8~}ube27GM#?MQ%6%C7XZ8qI4vvPUID*1@~Npua-uhQ-ss`WEf zFG-8eJKwyLTPJ~8#;Z;b~?|@zyc~R3o?3TlNCjLm_OR5c1WQ5f6 zp0}3WIQW9^JHJe{!<_5SuXqP}O>J)wnCvH)oc;K<(ev!+ZF@J@a0qSiPrMs=D4bou zHNU5ErQ;DMor;Ab3)|zvSLZCdxOD$vNw(g7GKq7P>Z<8X`fqKY9r`_;)SaWx8&adN zbxDZlROKD#v-?a{ry1~->&N-17Kn?`GX%f-EcH?{l)3%R$&Uf|uSvJ^?22At<;1bm z^4esLwSBQ!N=?(&mB#nq&plGs7n5Ss{&nD^crZs$()lizK3SH5{=*L@Jns5YRD5D} zXM9vhB#B4NF#oZGkBH)8Ub{+xW)A1GQ~T5%8jhOZ{$U#18x^RxFU=@TioQg(Uu>5` zNZ8dixxG@HoK}w>?;^|EzQ29&?L@0P;hg>9HUlQrNfF9VvsBAZ>{XqrYLwlhmByUa z&~@RY#+!l{t-77s4%sfRHMlwtcCZ9@gfIV)aj&U1Ka>#TspEJ+P!ZgO~G+ybMz z@6xu)?JLnElM6##wf8FwJX^23I7FcMog~T2&pg$2;Ao}FhOm6$yVX0qBOb=qtt$<% z6SLjC{k*r%%f`8?GdF*DXc>4(XWq5ABsZ~J?U~5i zzB8rv?4fDo?Va0i`#gBbzAs^Vj)a)v-Dxr(EZo>H&Rn#0=E3u4-qzlJAs&>;%(>3s z==mrui)GiG){7-?+cKg0!pW&?dpNX`LY4#v7nX@cGCbP!sJTNpB8NSXLvu+sSzVpw ztj)z)r3bk$TFJOeZ;mzmUbav6)RP@~oBPxI`{?BgBJWo#f0bC?f3wQ5Zqrlkh)RJq zSLqd|cS>@yc<*`BxcqAM!Pf=>Rqw9`DbhPnn`o4a%&3XMcVAraqa2>%H9M_3WQEJ`brmx-8?> z9)nnKmx8<2;u8%5p6uA37M5o+`R1erg)ZhBO*MiRrwBGipJWhvQIpkoqRyQE{rq)dUp424JHMJt|a|QA+EZ+cgF}n*|Fx6YmZKEqinxf$h$~!(PxpDOxlIG z*gn{PI(%_e^^B zMWmv!$FjjY7$yMn$4JD4$D zm7LbxE20p#@K~hozP%pX^?OKSo0>^k7B${g2F*1rJo7)M&Ofmu$KWH|)3ap19xjEx z9`%;6BBkxq!j4w*sAj}UP2Li{qS-+s&RI(}#EE^%k6Jd@U2P0DjuuP_4eymja_0Ln z(Tl$1wqLLFSX-s0%Z&M|_gdy#5%HX#`&(TqGFDE>2$zl7BFmY#Ax5-$B5%{-!DYLp z*lL5^4&M*q=P5Pu-oMkf$9vKo6)y8u5m|GV&aI6Oj`iE`nq^cu%}#N7lb+ErJHp7W z-Rf-8l(mZ->5Q(XpK9mXd(K~9T6w%Z{0P&P~?h_MV4O2>b4U4)Vh2>l^K^yh{NDDeC0=3pU&+6qQuIHg$PU?{ST9`z4qf-p+p>XwYAw zSrq107pawWpx3&>ymuFSkTugp;i=Uw5~Umhwma(&JZnuntgzqqQLOa?XYb-SfAPPc z*SG4iF3ERuQnsbX?&~{A=y)7+$H0tT;SdK_t(wy-E1noD(5iTt3XhItqxBMK5DZv{2g;(ey?V; zEzgIzHF{BoFW$7(&+eM6dV0;Zmw9=WdMRAD-j!NrG`@Yq>gFPLu#Nq3o4n*#!yl6L z3Q2!us_oQY{l@Ipt-Uv=q>1cjjPeiJbkixgIl-Y#;&@_L%7-Jye0E7@*TVUFx3-B_ z9gdSs;*#y?@%d&kebe*PB!4;f$5Xr~GAf^s?_Z^IV!~scuWB!p%{2N9rVa9Fay#B< z-EwngT<86yI~neuV+R&|m>hV1-9EkrnpaEHCZNYdZH~5W3t7*6scbGoRgO}8YqFqP zm$0?hnuiUB#$k^PcP49kUk<#Lz9(w8t(A$aI%C1Wk+&E1ULD+9%n&9@uQ7EA`ag4D zz7st&_32_qu@8J)Z4-@ij6)VZ-IUpUe5ZE1K-eqwlsq0O;z)z%$_ZBJ)?HY>C~$|2CXbTHLcXGXb2NM&cmfzlfRMx70% z(@XDX)vVh0+2Z+&oL-d@`_}atC*|sI<_k1;>mI+B#&A1Tgyi03kj_?l?NL~6Lx}KV za&(6GiKPVv8l^LNLWRB6qB&)*7F6!9GjXW88*i9?^=i9!j#gN0P@f?C*RR}}b8a;9 zX|a%`g&*Ws9u&BmA49kQ@Sq;o5zcRR@jZ9nUOOEm`*pI?d!Oqiyb=pIpOF3MDObeJ zT(Q%EH=$`|*zuNGb0V~rg-tgFwr!t0Ge`8gFNf)-1e32GEF6iJ+ZOBe`G$vUThPl* zcyu=5xrwIDZodbb-M3Pc1KFCKmY+7;#cw?C8siS~!*vfQ^|GK03{r1#mM)muWWTXDf{fiEFOqozJ#W6`h;eA*4CF?7S`vcPh9hWWiPe-O`ndza* zy;l^pYO9K8a^B8NX)Al)l=0R6zDiQDPlT*OM)ktOhMPGq&7%LYW)F+ey&Ezoc;tAc zwsX|Xwp)D5%_U#gRm7Ot`;<(>Cc0>qSYJ7BH>J(Wl#I z!u&+MqB|w(y!?(M6<(a=9wv$v9za;O#5z-)2v3^hMi?%jSHl;oDSQ2!Z zuaw#(NjUO%(Km;i7`8J1NaN^U(sO-k(zjffOB0IwOp1CMJT(8J^mu|MTh1@>hkt7>>bQ@dJJ#kiPEmJNLvW2R!MwzGsXQaSwV}IQl zM_(1}ZVuXA@x69-&N*4Sy$fOsjOiG>J=!+i;Nm?$fzL5&M$)8DbJw3ax>aVuY_*V& zr6vs9Ol<4U&2%?#u1n5uYyGRfo#kqK`jWdRxwSf~)!n)JEJD&bn|e&U{M-?rphq|?=`t6=aK&Gg!8`ON;^;N4o);6dvrH8ajWHZZzU%5^h* zoq(|URb7FycqLyhx!6fEc{|(pNs?L)Mma|B$UdD~Dx`aVYG&-4%7StpZQC5)41S@W zMwc()KF)mf#9psmSW6aU&O6@SBRF`Re5%U&^1b(E$6xmZ zgedE<7TL4T@Kw+9zAqP`x#8eaU(E#bwaHaQyq0$)NC$%ij_0nP?!`29WnH&wcl|jY z(zfdJ$F|Oi)J|O&8vM(im4VOYrJ*4?VY?*Rn&&-h0jRRu=c!Ifs6qdB4d zXE{A=-tIo`dti=&hkcMj*UNZ`&%AkCK0Ju(cMw~x-flf(HDge1cA~mN7@w2@*N0s* zO@umH2f7oMuU%@ddGh%C2eB*X_PFGvt}L^$70sS=bK7aY==iQ%H7i8Jef?7FJbrBv#}k@RAwlLO<1NG`@(a$bz zFtTwc*+!jP{9t2m!h=Z<{bLhaRd;RBdr~Y>veRF*qr)$X*Z?jAe_5Gy2 zD)PvDzuHdjHS=do&nrw!&v7bkFB9+43h8fKINfr!pQXd`6)bRQ z_ssPyk!-IfH!_4U@#dD5Fxb>FaSWIw^|g?utlMI;V8GtCmor1lVPQ#0jQN$5jHgrD zqQY-9+8mxQBLBQB&O;*bQa}nzINy&_ag|U;!Q-)3b$f5LE>h3sMcyZgZKx?Mr zil?8020pb`y+@C0I8N}OwxT69$z`dpXTm9eMSo++77?;*JNa)(P@(R93V#@h~4!a+iw|KNlLjM=Ph;drgPE zpPyxGifPqy^&l>`ln0@+=&C9;S~j0xaU0xXZN=)mAj%+P0n28)HK$$V^#7`>P}_7X zJvVZKp|e{9*SRCNtv;^N`u5k!bGFxgl-QMf%Lf+SO6c=$Ty{yjFsa+k`{mM(%C?tJ zGqpNCecBn`a>auCNl&{6S<)}UAyUis`o~9MiBmGWPdZ%ZidcdE|FT}LvaZJ}E4Ryv zd6}ek#5FDL7V#{I3|VHn^y8~Jf6+1DDOcH&`EYrq$nyrzEv^+>jgv|JPo-u)Z!R`@ zSsHV^;3em2-!Vnl}CAmW5=I|I-?S6chJxGi7La!!gsFx9wK);BQ7Avb*@8Og4 z-R#cIrcYImHFjipwZ%PuiBkQ#FDhv~Mti#U@GYDxe5fFLslShFso?=RwjQR*c4hZP z+apiq`>tvC_iERC_oU>0dtChWvrj!+{d?XWol;_Nzu~$;nH^WIc;KzAOkv7Xa#VeC zgcmF5_I=p?fU{)o^8B?b8W$^WT4u1n>}8y=!hH8Iipa<;*k4H`OW z`%w9EhL)Pv6uY2ZiQ$|avqYXh43`g?BA6|4*wSjnMLD_pvt1XXw`E7(-KjyRC#IoT zFgU9|)347>yh!ta_4*f_C3A}S6P)(-R0+%Mn%ph3z^Z=IF|oPU9!8```)0)~&0P9) zzD0mq8mYGaRu@_7NOK?4tyVRxANw54_A zsrCHCdbTO{2@)LE~=EQ8KOkL$+3|8 zg)-yG6eo76o@bmwMKvyU+-)14UAoOb*c_rJ>bc9?B&Ou7(<`^Ky}d6Au53yDJo~1# zHd6wRfXhPvKH1_aVVU=@`R$Dn$#9sIk~i`7yutJ?WODn+{oW}dDmk&MSM}t`+>)(k z7w&&3^ZsGM{O=vNDt4S>=3?W!zm6;OChI*ed#=>i`z`BBBC@?d%AF4P3%d1E%c101 zXsXoA2@EHvrk`6TM-G@%F!2yWLg>d&EgAk_UW<6?IjGO0XD|8kOnvF9SC)|{gQj<` zImA5OVIe)wt@rY?va{+--YwhMYep~lW~!82(B)Mt_*J+WjTqA|pX1W>53Azi>5sIg z<8}S|EaKed-fJ1`=c4A%pMTlt_MBL)32$mUSvf-)&8BO{717J9O%%vX>^pGg@|}zy za(141A7!)`PN;7@Fmu73nibyXzN?oihEDJe{!(2@)-bMnu-szm2`2T6XV?*SGbHNT{onq{`iWtG0HKc?07ncO+a9 zlfM`zY?J)PUwON*ziN(DmgxpV@yfXxQ|^W;^Vt&4-T$%eBoIWOI3 zbk0QRi9M=8e!X%l;PVz;S;>8Il0jDfJlj0kp1u*uF1W^=d~9*sj8lUe{kf}kS;Lp_ zFRPT|%#B3<+j*t7jPHEe)-^gT6%89*SFD`pUFFL=kTy_vk(<=z_1+P^*d_S2Pt4ZI zwK`7&)5_NDIB4ZNE4nr{#^$Jyn$cRVIRYnlKh$zh@oJEX*ioD*cHwLP+4_ZvX0;K~ zJK0xt#q2%BAy=|xbBfbagl zj3PRcM#7W}nmv1bPRX3#6QdPBW39W~F3#fGQ+k7~g>^bQeShuSTv<@KAkpj8>E~^k zA@%Db_?Jv`?71>iJBCzgSkpd1)FOvfGqQEs385#hi_>SEh~$aVU`W&3?J`YOY5SK{ zZc^nbc~upgYsc=())j<&v3KjazArNOxL(%*^YadI(uud8dA;pxUUl01`BvtbJ56Sl z`?r^UkWS$VTNufq%6V-YQ>`rPqsxQan0i-pPQ8)Hn#!ai^q}jF&6ldIJULxc=agl~ zgBI!}-Ffh=ZEKMX-O=;|?pI{LGE4fJ9OItq|H1V{xnG|S=T`3Y#^{*KzUI@-t%RD} zQqsFg+c+chG)iv?4LT@wW^8NNJJ~b%O_6q}waDPCFL+a=gE}VPy71I~p$x}Z_+T6RVWbuxHn~UpWbc!wWTaK6Nb0?kY zmlBPS|FG=E8pem_Th|))2ndK)9Guhs@!J+NLE{143h%b|8xn1=A1+v)-f{Zto6U6F zT5le@J^gtygDiK&BIPapOI3o3vN;?Z1Y`KCn-&jjUHiBz?66jb?leA^+3ppQTh7Nb ze?PC}Y`*N+&J`-5a|;fN<-edWJsos>vR(3`g2FQS(%?#x3R$Dn@1B*cfNyoTfs|kK z%!`%YYv)YZQ1yA+>Bn7PDldFpKV9Lxn@Ez|AzrrAr@fyrbxDdXdmzlxhtA$=JF-NX zb~hxa-m*)1>pi#XuwxrMZNv3jhd=DR@J(al%A{iLJ+{3zO*`#UuAPgQj@P$3 zHo<7{`9rOKhTWS}CpB0E^Jo|;_{|sVFF*0)+viZLI?o@>lTs57?$}d2hlKta>znGG z*0GBqqrWGjA00P8CogYT4`0$$xH7k0=Csbu!pXzO$=Jik%gMpl)0N2LqF#0yq!FJb=}ta_>iQ~_0V79vK9{Bu3o;fe(%Iijz1{|G(#Exy8$g zXfd~3X|8W;>gnyi&TVKu#_nEjPVNYelcO>E@^)V5;N*kGl1S(YVUnSfhm-d@bdQ+C z64dlJ(2@7VWewN4JIRho0GTmcZFR*-ya=GFpZhW=FE>{Qz+>+1>E-0@>x$+;hwjOd zCZq3RbTD7%uyLJ>6Nwu&|3rwPR?~I9uKrHLhWs(M zAz~P~t#k1qO+c6O3aU!;JK1JISBqOxi^98EW+-nUd^L zyFF<=YV|=Q*eIixqAM@d4_f_DUuTjp&AWIe|8x#alsTB8d3hkrWJC{Qb<`G2he?z> z!)ZYL%}TkWOEMx^A}H%gqC>0oL+uQdd;fH%c>HoiD=$P_pwuP=d%Si=3SK;G5*e=y zk02w#Cg%TVd}F7KS~|p6Jw!Rbp*4FU{sp3YwC*#Hn%U3vWTEu%A~}#YBG`@y0~yID z(euAGfAe9`^$=6dg3t!X%df5 zBRtT3M>J;Qe`$qyhKmq39faKn;Q-Ez*N){E-~XqQ0eCIY`do(A?o3%Nm9pdA#};9H z%5qRBq(21R9$6UB1nVK{g0-RI7#{}K12d#Yo9iQhtM8D#^h5T} zk>rYCc%ZeBNrIFyMnf{U3Ej~j>bq%3zXD0vs@jnZNC9Y+C!zM(0KQ!{4@`&K|gyvDz`!2sB0Z<$FX&ri)cj1r3Avl^Ao23 zY{gg#0k+f7s>!6W+NM(QVVg$xx6Pp1-^C=wp*aGau{dV;HsKZSnd&wmD`hYpe-UF6pkNlGMT^!GgUTLrZk zBAcR)+Tllsq(G8Kwnq(ptDyUOs8tbN>7i>fX*vbcKV2vGSHo=}m0Q2QD?oF-*!~(I z%2Dmca9nmI;3d`S{?qkfi(rH#J`h<%R|I>kHX)jG$J#)hH>_d<(s=26)v7yYtIim$;K#)NOO(Krg!Ow2 zMIaDCP$S#X?KA&NcyV+@+&W!8k!>=fdeelmYDpWN<(jb$! zM->6E;>HNJ6Z$}oZh)*aWbj~*Aci9&>eG@6>{(zP9+WD>(jhEF)=x(ANDBszuZF{b z_?M^_lZUJmz!+beaO5-`0@Wg@(wxEgI;}=?>{z&|nGjJ^|JB^FrPM)~G-zVOy>(Gf z&EM{=hkDNc?cN|~S~PoO&N~eG0CyC5KvV{C8hCk-o&_{vU|nz^tw1v4J7h;-Cjnvv zqNeJEU@W8w2kRtM9EmC+k%wy29EmFzBP}vmbf_13{Zz{(BWpuTp0QO{L$VKkSq1%8 zM7ll?X|gK1GDL0aL-{LYuku5dSZBy?L++}N`hi^r$pbF`TJmu=HC_frU5PAO%W&#Y zGcu5lUt__M30Mdseghf#^%yK4Pz}d1@bIb)8QB|JFmSbOun;lh zJS5FZL(&ZKB-CG^?xKg}SRP5O9^xy+nh<%w55$%xG;!f9e0a@S7HN+=`cNYdsN>2G z@nU$qgyRr0s*})?sGs8wh?qbtRnYgZvS1=cQ9)~@6?ZJ5Ig7D5VoDi@2It^$&0HS|$LAANMCj$}a}eS_R9 z4aqo+QADH2Xmzx3{fR7(UJF&0m(j%Yvn<2R<OTGp`!d3ATcBBZ4$Xp$VkTOWi2b(b z-;`WQa}2Ho57+lqG)H0m0=)MRZb6#?;xn1F zjwUXgO^=?Z=+F)+WMh!ckNeDw1Ah4YQ{RQxH`-T2z4KT1U@ar@ZKH=!vC^hTeNE0&V9TC%vJViD-!Y2>yAONSv=N+arj@m~;#Ag|)Spyka zE`s;t!^D&Zj}EyX#LTLQw)4=00rdl#6Mjk;U4dmIqv|0oT$mnk zl5_*=4>d|6k_2h=Kvf3N2%~80k%OB(^^zM?w}uMlfjM#ZfsmMjalTf_;O}_}s^_0bzxpt^oQD z@$twHwi>^CZf724{BS!tn$k-U?;X$@Au10|rZ=Fj>eI!1NSp8{!on#ujWHtP8*u;xT=J9@5E&OqJ)x(TulSuk;4mN?5c z+FFuPenqTk{CVIt!~UQi(m~iAgiLWB(niRKA(MnQ6?BE;OsG!6HS`932VEzVHq*p~ ztCYj(JCeGi*Znh(w$Q|arIDZ+wgccX;4?lYuvdoYfzUnAzbk%3#bPT31_24a|5T!J zP2hKI7p}*QrU@B6HbKk)TkxNI1W|g7zgo<9gCTws+%!adg{%NLN_=1!8L|XI62MPF ze^q3^p^`vU^@3^Q!g)P0-=Aj-d$I5tf3}>I9tJ}a?}0c3_La~)*tG(w2&MEHKSITK z~jThzJR(hdXL${!j@7n+bJq zuzyh$T>rUz;L|t5{hcL}J&1F_r~d5gAkqmS*`dlSwHKT1e30bxW;^OcR2o1N{R!S)n((j&fkXh$LGz(n4t4?b9pu3f zeZV#tAQ>QbhUC#T_z&U?2WS$R6#d({02UDC ztyua&f8Z$)SHv@Xx^@F;D{6HbI*sEyR9}dvtd6!Hgnc8hdLVJ&-@sylMi?Uau!|2i z6Y6*nNf91V2i*b51iuKGP6AC_)c6@czlQgTWQQyYv8Uqr_xxdHqx0cJnpkjsfJ!0J zF=zyN5Y+jg3Uh!aOdKhJ-TR$cCeeiWXM8+J6CSo=N{Am|O9+n!HCNygu}=X!g*XN* z8$>X0J_G&+yF)|=$_P&~1=qhtBd}+p>H(Frhkl!GP<@7M5pqMY!Vo24D-015?CQV{ zJNN_GgMgDTV7-ZIHqjh4!j*M)C2_^Hm`VgyH!Jk-NJ7l#A#hUju#= zc3wOY?aUBesLxgs*P@6{!+ViQM`*57`tLc6tdkK>gupWugg=3k1Ukqc!G0B-Tcx(@ z4rNb7eb5~Fe5jtmT_S!tN^=HS?;+!Zx;1bfB2MrO#9k}dI;e^e^=+_v;OW8s5w;NI z2r}JcG;v`IHQ$G00eLW8QaJE8?tk8^2a#Sx|hg*#-@Uz9P_=onYkhVRc% z&$;Oi(G;HYgm?h=9oc$<<~(r5H5`W>s;;`Ad=>V_;A}Ep)k&JrFyG)j8ti;St^ubK zV2=kZF+3eeSZ46+V99~A5RJhZ8Swd_^&rKkXyW3f^cZjVXE-IOdq1aX!X56hV26{~ z>mYVy&rn8>FAbQlkZTeZ%siSH@tEa*k2yVN#b*a}?$e_)(}TKm{72DdGuF z&@EN;12z}xEpQ$SJSpfB#h>*cEDh%lu5eY&Z1bl|7A92PK@^oUi6`w|dC>p#k znRJ0BE?m{3&KJ%r0PTl+(Tg(Aww`Vwspz*?0JTi0)DTaEK~_pUI|kV+ zM7U7FgVjN#549IKZvwxe&I8&@CKdkyE>#2zPQep3Adm%!pCN80v>Reh@~^%U5PgmnWt$;1n z8{$8476;^j*k2$jyo5y}@@|L^z=GcVZCv1gARdGo9XvM)S_GLK>>Yr#K|Dfz%LF|2 zppV*cz7JV^1qIjm)*9;()w|#m$^7hcDBk@x8NQ={)1ny_&mgR>7&BpYPX?f+mLSfkqiV4NZvbB8jHmYm=m zgsA#@4CPCHh^|oYhbPPJhH`da#M$LTc?9I@)KifoN0CW&G-r!zx^T{oN`3sU7h{0|5M4u52^kLfE~q^~Pl!Cpq$j_P3-TwhPf%$hDjTp9 zLOh89GEJO`AaeikuxVwY7HqkwRHE(-;=TOQ)Otyi zT3B+Rf(4ojvH;Idfj=Qms}Oks=r82eMAaW;38V+?vjOS}mZF0uE*ynWS1|To`{-44 z(uDk<(58z5_20sOT)m@meKeh3(WDdRHer{EXRUyjU?(6Kg-C^{PlG*x2n%X?#2XvH zhC>8Fyl3z=Oh(E^bPX(X;-Ur#&=b{VoOG(}aX6K;!}- z#~`7Q3qVZ}YJpJUAWro|)dM^d_&kVn;4Va%Am?P#hu_Afk6=I~3eWEn^&jxFpfwQh zfHo1Q0--jE^M1(wf%0&NO!`Q{^>48}IO?L>?ctT3-ruGiM3e;Ofdde$z}XV8IPknQ z(1x%`z%_^q;Uqp-8{j3-noRmc6Bj$B2X(I0H#In;dwnz^V3`6x2-zkvKad`%MZ?UA z6W+j0B1Z?Ag830yI>-iO>txbr3a)<(pRry#pq0SW^TgY-h?ta0Pco_hw`m9z0RZ(yqre~P8zFED{3hNALA>3B z+CKgpAqHs90^7&ol%qzm!>RX`CamA(!ypCHzeT>VFCQsi)cAl*`bLvBSUW+Ez`jC6 z3a1gl;zI^YoIoY^V<97jsu9!_zzaeZ94s_=1TyJ6O> z-~ZFk6k~5Naz#r~ox**H8gxV7ScXTg4X!W;iR^)hO`wJc9E9pP!9|ErpcV!m0emXd zMZu#&O${uA0)j+Gd87LHxbR#@auCmz{?C26FKOjB>`6ZqU z&>dP6RKGxqiJf7f2(c>-c98M6alxJfSX`*&fIfh2g_8zEl^N=0;9ub#<4_rbnj`VP z3}}P;AiR_HcXw+~wJ5U1F#Z199{=SkL>IEM; zG*5Ug2&#_Gqpn8R?0nIEu({MX1CQ=8`Wf}n_u*XE?^1!_DtLXORt=Fj*d2(oA<6^^ zhTrfFwKs^sfo?zvh)-c(g208f<$t;jz`HYqCQ*0xC;m3gKpG*Mf><3gPoiQ7d!JC# z2l@c5AUlDq6Kp*ZJwgQwBpcpBL5n~9Lvlk#BgcAz0G?9^NdkL5`ndr%ny~RcB|(AV z=Wy6*j-5)Gm&MRN3G6+>4hg2>So7ha33EJ-a8gEM$@=qivEr23Ld-uN#WaTA)(=nS z!Tt$U!GYrVO$8Q+!uaGWvHOE-h`-yPi{|=gP-aQIhl$WX$SEK*0~-V}J7^Z!TZXv7YipdVLt=@_Y_*Iz!FWJJ+XT-jpj&vLemnh z-Wh#1A$+_vN8t#bI!bitO~LTwHAu8CnmhcDOz?k+(3(3w69jJ>CiHF6nwy0 zj05r(q90^61U%SFCE75pA)0`ek#YhtEFOVn0gu440+m9d&!6!N!-2eGi__JhS`NACheO(@lgIGeSS^}9j<`&!~Y!{YM zs0a{kV`&NObl@2iHgRk%fr>ruN5z3#h?R}hlCda3^v86-GsKdPG0>tpVR;~jgmr-( zok!7d;%~x6`JywXe#jbwMT8!NzK`r3{P$hp(P&tBByo@M2e^%(!Dwg%CQKiw&Jea9 z@Dp4Zdjvs&U)_^Nwh5}7a_9s6hRP_O3t{ob9!=Z>uS1+ZBX(S1W_a{iR2+E^vUE6A zEQh|qA}dhFDvzK#Aw641-2;z7)a)TYgHuULs0RTb>LcS(9p4+tML6R;{s`h8)ei$6 zzyy>bFwH=8!`evIAE??9k_i+B_|T84Q@_$5$ThJR{7QfR+{*xmF=VVEc%E2;pw371 zp`|mUsepBDd_RNNg>l2FqW=UJ$j$$*b->>De-F0JPtpQAngo2Rw2WnK;TaX&?^n_S z`__2AzmgW%&&U0+L{di*+#hLe;oLADfjI^mN3>yi`4i6rw(NhtjfI-~f6vB31Sp57 z23i4erXs~sK}B~wyMyn6jfHanpp)>_y()q<(vFU8p$W~EM%Z8{9P$RRvS5F(mBf~H zxStz&58`d`48(Y_XUb?a?(=`%%EC$r$)oBGyiW$VVVMS>gxh|lH$Y3G->+kNIC+Zu zVH{X*;KTu8+kr>8*I2rQM~rV9|5LmBzYj9_RlFvu{u3=&`$t=J%#T0w9q_c{XiTu{ zF%lP?>mXYG6gr;OaOz`z;g$S}9Rn>G9s&HWY(msStl-xX^#7C1(G`!;6#u^~n`(dC z4lF(Yb7d21@mS`twHhnlfW2MZ?^ky7e`mb$vlaONL%ad|mH)kX1F|u&oe(boWbplj z*TzxB*f9eUjX=x?Q3vE8kc&Zng+~)sckI!`J!v$Sh*tm(_(Wpt?__l_7VIps={4ar1EvR#FM#Jn z8@8+=E; zV!8NrEcI`p;YeyxDo2-d`(@ezABpmnq~@n?Kk zTmEEy)QZHPgY4D8B!N-UOrxO1aRHmO!cqBzLJKA(&946X1YANJ0`s zK%^Hbh9*cag7l_zkg5XyKtKesfE@$`@h^y?!2f-BcW&?YX0P7?lDW^^?!K9wdGF18 zZ{C#M1vO0DY?Tj*x1@=2$W(gebt_W~AX*l1&bsuvcO(D`nS}7yp=@)>eyd>4AJ3Hx zf5p4fizl3vJr|=-Ofmw7Ibb5_4C4Y8D1d)M>Cv9gGXb$QKO z(X%z5_c*WUK@OO-$(|p-f0oDg)+NT?{uy=4JulA0of@K4%Ig!z$9!A9jYAHmM{@te z%4S}TBR;aZm4HTCdQGyPvKs8S6ZVZdMOwt(NAz?oS2>y8lUon{xa>(WzJf>g^-#E9 z=C?HuOO^e|AqkKyEaeU=ge z8X1()=!hM)^iWVDvo5lZn!->YdIIER^jYt5kdx`X^|?mJ_wAuJC16H;6c{=daC(X>wkXm;Ah98p~_Xx()I^yfqp}dMi8; zY>&5|*IQXWaiE;-%C z>#ZQ?dA${U5Z8B#JJwq<%VOPc%j>Q3dMk`3;8lt<*m6&VT{I%}zuQ}hyP7~bqtVr| z72Yku`XKaM;*1(fM=hqSxT1e7LZPi{t8Jd`t;FYA%-f#zUyLWrmdLX4UmRPB7CNuD zf-JbBx8kjYh+nhe>4K~w)^x%BGux)CE26xc&+y7tQ1<3Ph0-Lk#1=egdV%o0q4rpdw zotGTc!SqJ1LutM3pU=0XfLVTbl+KeE`&SE0pOUaz8mOUHX zE7~f@tT^tItrROysf)b&n3Zt6K32M{ov;YZ|70|}>e0%5u58o!s|E6YFIyJfldA>d zT3?<=i(R6Stvrv`T^=oZYUanVu^qIF`GTgSJ9&=Vx-Q7tW!<-tb<1+4-*k2R$=Ra| z`DWe^vvsU}nEgfTIBU;&J5HFzRjbe55dhB@60Iv_RkpKok7X`fj85;$R^C2cwl41c zvl4mxbmcu--j&|GeY&Fb+H0fCM}xAhweD@ot?QUSi|0~&w9JxdRy)+ ze4MPe_~rw1e;K16)@zu0%=SKI@40yihLyVIc6OfDb0xFBRUKzG4q@Xh)`#2bjm>=v z+Y~rkPuIs}XJ_7<8SxHZcu(U0qwr=%**ek~{) zaQanVp< z&FGV*98jiNvQ2b$FB(d7rzR;|Q+zwJ=kyfPYpJJz^7K^hJFLsPd%X@|!(>|4TT{P@ zwWr+548mI2Sv$!#=&!dHHW^{T}woosV^#6`*$$Kee$+FeT;Do&`ZEmG-r>vi{ zl#1;L+r=ac^2fMsOPb81q^ z%fX{(8J&?{)=rK|6@QIZp2uQx>)sKW=y9>Knbni^2689nu|3 zCr`IfHsiIrez6>;?aO+2+wBXyAN}_%fD@n({syc)Xjc0clgJ1D`w+x5_C5rA-k>e# z6?w@oS4?AhAN}_%fS=5w;hae$lVo!pW}5jhHNmtWVv^1@)S9LH?`eYgg~B{dfF*GK zsW|a#Wvq{~t_kv-&%@OOCihQzpCI=2d79upO<=x+tv*4NJk79qOEtmBm2Jy?MY2AeShwgK2E^6 zD6da&SDzrim(`YcB(Jbo_m1RsLhEbIrYnH<&K${ejHbR38x6A&v%KCW&S0po^K=zv zULO6KBCHg^E6kI7cga2PZRosbaxiBk&mW01bQmAN3X3BJw2QbOBd-VWhA)&iJ|3(w zNS44IzL4p=m#xnf$@_}k(*r=a(eE^%emHPm!f-{Yjdjb1*r#vqG04xkvWAgd| zcl86N?_0Jm{ig4Swbl>V>;E_>{qnnKpG@h8mB^ER_esC(+t`wRc^36yN&9NEXK+&3)mag;qRwnIa$J~o!OJ?jc9 zW~v>i&C(O)?|3(T-?KGO)V;C=3}xR_+2}a%%RD%WpX<(3RoMk+L<*0M)tOQ*T-aC z1vEjv@@5p=HKSnq#3Y+h;M;L~-^=c9J8tTsKG}9$e$LY|8w=aatc7ep00loyJrcky z?TGxo2FL4V7D%qw)wzH3{sR~TD^MZV!Kh`nkx!Q_sgBZR`qo`$Z(XGePl||kSbTm% zeC}CI7}*&*%U{4Yx<5tN7~c*I$;yo zsLwIpIxj;QnK8TW%{rZvAy?>h*7iA4C#KwL zY`>Oyy;nkRnfVv~Jlf4rRmxv4VE3i`uf@bq@6jtTerSORMjMhpBl@19BZ>g4z{ye+ zOHzD_VsVN6w@enr8t0Me~PIT`%z4x*o|U$iajWHp{S);jUo$$>12|0fika1 z=cwbVbdEZIkxT2qluk_;(n z$%gc7Lvl`*A!T6uRKpNMRzrWI5dSJ=X2g|{u5YnIc*lDW>Kz9Bx|FEAIZ(pH;@%U- z<6E%kE2TEJ$i?`FgzuzO3${QCt!mlx5)x&l5?Hgbk_7pM9KR`LU>O-djTs>X&r$?G zD^dI(MFe(3xuW7VV}k}auuKg2tyF(gF|Xx+Qwd+D%M4!)(@8%m11pi?Ioq-<5u#M$ z07U`Kr5hnc-0-;sJtG~zA)cFMWC>0+vMWMT=`6hblj*F`5A`f3wWax^*#T3$k~ zrF1Qr5P^21DULAYq@<>0>j!7&WDHClM#eiMUC0(;=#w%yEywKqXQ`ZqQn^NU78Dv@ zqxntBV8L%j)D0=a3(}F5@TzpJNt8}Ll8$AiW1w_o4JBN%OlCkz36L^d9C}I+#y@5~ z1Te!cp|7GM2U5>3ijozP5li-*$aGMsrrl z1(1TV=S6Ooi2;9=O3o6pa{jU<81o8^Rl+m;Q%Yo|F;^i-DwR{7KY7r}hwn%!${_-Q zN3~>JP^}scsl!!wYF1XCylAnts>5to4L{i7sxRekJ-q#H#Sg7f-NGi-@Yx-%dP>ON z!!K7`YmMpy#;R*c&32AzLNK=VAi9_?fH*^Yh*@nZ(Q;5zOC`leQ%_1^!ei5~KlDNL z#YS7IB`&Yf?!ErycO7CJLpi`)d0l|KCy>D4Kam^H&e=V)aYBK?*-?awEI_APfg%PZ zMJZzVw}xVC4N|&wDufYvw@%$E`LLlpU27^Irs{k@#wi6KE&WyC=h;t52tL*5uL3KM zmD;JCP-!LYUMjCFegae|AI3M0C|0LP+~^IK3BXR>o)a*n%PPoJp%ZW_l8;#nBlB?s zuSQdhj!Ct_LpH5V7%c*5THB9wZMC-lQE8M%80G?B!du4m8~N@cTwISzcNe6Lh}|T@ zjNZE`;v!*UISl?46~NBvejz}npbEVx_NF+VVrPnFDE6e-mVM?#f;&}jk7Zk-Z+?oq+e z-uLKOozf60ACxZw^nlbA3a?9S>{Pe`mFja}xUIWTugrB|A#z>2i!xC5$_MBu@)(Ii zJK#i15kX*}Z>)Hs@!2limC)@uHqYnNgOap63GB0#{;EY7GIRPRr3^tya;EOcgc^Oe zA(K8MEhEc3M>k^*RKd%Uf*dApxRThg8#yV5VA6zaU^Zq?RU{Gjf=lKm7h>kykCG4sPN?Kja8g;0V7k-9Vl+O- z1>_P4e@KXoKdvPF_lWqLG$Rs;CxZ1I<3oQiF-#g5<-%lpGb*JC#hMgrQPfeaLD69}Yxn!&-pKraw4VCoz~rU}C-iX|P3C1A z(QH8IyhyP&#a0y2bH!8irx-^uh++$h;B^Ozm`a1QUxy-OwIRih6k{mXqlmdV@B$_y zjA8)A=P9C|=P0(Om`Je=#g`~1QB0=TmLldJq9{gFOrY4FVoQomDMDCYrszk}VfF=O zG*4RoO}cK%|8jRsu68%tY4#PN+7XQG^P!986x}G2S(;Pbw=XTI8&&1Up!gF@I+-GS z5|vX}EFNS(xJ^Ed=9C1qNZeeI)`-*+rxQ(|swHCm?YNZ4rl?9u*TS+=n+&YTrDY86 ztvMmV?e>~u4$N;ovG~Ucb5GWM+0XAwV`s|BcaGTa2xV1bms%s%k3%d|YhkHDm(puM z->i(m>Akhtrqh%TQ~pDN`@JU2dOLi6sp}m!oUPTvw248zRmxR~`;MAfwIv}S%9ezm zB?OqsWJAv2Ozpsw979%WN?Nw#&H38jRsE9I{TVYkteelzdp?@2B+B#}YQqA9vm@Y0 zCu)Si;Oqz>FFjYxZnXWdBnXGagXRAr3B;7S0Lubj?VxmVOgb{n*A$X)XXvQ5)lK5K zx=K>wD5+=*eMJop%T&km_uI}Lvm<``C*!_}?Uh}f;fG2XD}Cww+=IIVst;WgKeUag!8;QHbC@0$^Gy%OM<96U=gn7s8+nr`0J=)Q|jb=!@UPO*`4WJfBCmNTXOs9)?UaL<~uEE2Z}>F%Y$oW@Fl>=3%~t(wQ#kleV=}oQDR;9syx^Q zlN&{Jk4g|#bX61R#-bDxQeI6;N$+bAguOLwA2C*8?2ca}KjYC@G^-|pAO$na{9SQd!?-u}L4{l8zaU76 zHF_R3Yj}W=wQ3C=Hh3Sj-QRFb$c)7KBPunlwSV(0Qx-FW2Lq!tcs!W53|=_lQ}g|v zwX5#mk~p?_Ozyb?2g{`Md*Csl_LQ+}!@aw(PIu!*etQl;ui<1|s*+KkVw^K#Yi845rrKmI6S zK4NOq@80Yg)jMuMtff?y4budw%7!^_hn4MK znfAXeUpqPBz0g6|YljT~jiCTk!Ak@fqk)F&Q`;TB-D=eB*yN<f%B0QH~NfSSTb(os*+RBPWq=Y7ba;G$`obOy#p{- zJS1{W-Ppw^FJ6jRIC{*7+xyknj5@7JB+`NN+3K%ex$#~=)Z8M!yxw$ov-Uig8;l>s z7F8O9seBlLDknzOgE4vg;=JvP-uW(k%zoV~^@n~o4fohX=&-GO7c^YcBjMfsowtua zI_(n>s)P+eVNwv$T_|0tqN|!fH?>@6}hyE^42%*uCvcG;@!+wx$Z9)9|B(` z%njzvJ@Zb^s2CUlqLdy959a3KRza%PhOfl)*nqJ;O;@N{Lg){-S4QV*UmZVv;vs)f zq=Z=x!IZ}DbGH~jbUdxcwHcILZcgm#Z!TZz^=HAuw&+kAzj3&Mf^egFYW{yvy0mcX z*lvOYQU<%%n3M~rSiVGPEFO&iKDLKveg&+UPPmc|o6hqqcmCcj`~B9N`p%w{zxb8C zrlzy7gj#JnJ~wOag3aI7h+a24VCYYSH*Dm=yk$DUxI3K&jt;IEsGCsXLe58vuB`#8 zw&WQ&EAQjMJZ(CGCj!>Fm3#%<9y;_lbLWUW;~&u~gZSrF<_R1TSWFmH7%*i__< zPY#@wJ~6i0htao_mYs4{xaO!DYaNOIo^^>kIYxL6lA=ofx z7okdD9fT@jZuZr&Mr_=CYINLzFoIo%0~vv-(g)|kyycfC5k5=&F8($$sYLv)_(`#) zkA!Ulp4Pfcr2*9A1`4VM@SvEkvGB_aN}ZDnZgp5;E7tEjGV>0*)jnrB)b{WCcdIF5 z{a3fy89kV1{pu1$1y>XuP~!NZ*c~4qYrZ#o)F>WoqC`0kqKr(CAf~07WRll;%z!Ev z#(BM_l);&aSm4~I-SH(i#)s_4gP0@L-;{evCeAVuw7yZRnkM^~I0Bqo3V( zp?~NH9SiYbZm@EA9|1#4II6aoSuXLyc&9xCeYYvCec;9&;iLY!SAOr?*IolbO4vP< zO2on+-oz^KJG*4T>_5v73?H9RDt7v?<*j)z54p;W6K2Byh)%59z1wdo^)K#q;?BG@ zJ8)y0Q&CH=?5}mC_wxfy#g{p8^@x}H-XX7lzUW%)rUTL4w(3ruAaw!k?sF*R}Hm%~OKga&lGIsK+zlJ6KxV#My<_0t7 zo{7~MLf9E+4MZ*7JZ)ic_6mJ&p(($AmcF(S59VfPtvFRHIBUthQqo-6(g$1z1rHCq zQ|_v6)YhZ|x;vGs@?e(knrFB4wI#fQn|16qV12)YNq>J=Y{ZJMbOf@hD36cZrgg?` z`}ybHB{SFdj+}hBU7aqMS2gF^yXT2TO1F&%^On5}Abgy0+kmsuZR5c_ZSN%aU3fa@ zgMg+Vl?nefVrgi6`@T1`Zxf1E#S!ViS?SL4U~aI3-f`!EywY{!!5$@d4)`hEIUdYg z?i`fj;kk3}*&gIa7RI+QRsm^b$lhKps*rV z%wCu?UR~qFNh1nx4QaLX#@DZXdh2uw&+OsZV5RrLgL%vBq4QLFX9Tio_JDJ<+CFQ$ zwQL$WBl>!i$Wqr^@L--cd%zXJ)~Fk}m8wy)?a5WgBDNGu%KytxCEN30ZZL1|8O1u| zS%48BDrM)$CvJZ`sb;gqLzRBT%(vbAYq*J|4_lwi9ppab_1Ja8~Yk+uKt7)8**<^SpnPM}>EXYa-3PO) zp})3Ez?3^4L5C9Np+T|3yC8v^a>pYNR-N_sl%LOc_w0gfL*vAt~;mse0 zKPVlvkU)0v{Y0HUOYYwIAa?TL9etC24-Ez#O4y^j3-U4VmS~%#d%LBWzh{TtiaX7MseG6va4zibmVmsnTjIgI z)h*!-fT^de4Zd`;oqpH&F|)6i>AVN@+46gUv$6}~!93J0;q{|H(;>bqyCvYOgn6r5 zYE5-dyWir{#AAPiz0>*L_WIjj=nR7F;d@TQr)!@oJTQK8+`Kh!pJ?9@bSPnN?v{#D z6~?``z>@{L8X#B7%|;N;PZxbj?S4=y?U-~FbROr+B>+?0lhU=t>)57S>sv4>{+L%Q_)HDtOBE0U6ux4Qah1 zwcsDwZ>{)<2lG}Z6h`=T_aFD|sleda?eohwzU5y+cm;|rSq08jN=)pV+aOW5xNdg) z#_MYh;laGs3AH4A_EbOZGbVav^yU?vb52!Rkwze!ItQFP6o0Mmwx9Y(yqUko7sCgQ zyTgOAp2Uexh>0xZ8z>nAOE3bgoEW!X;%X5;H)`e58x0oTyZtJPQNn^)$#fJ8$5a#oqeHwh`BzP#JY+aD zedtY_29q;(t4-X&1O(ujJ+;EXO-0(oug%}%r!PKfHkJo_TH-kF5eoNFw!ut?>{bCE(?3%=FopBZZ5k1F6OdPqig++@jf&z3pWurT)eGk@t(*Vt%z4jW zS|XTRdm2VLDgqr!n1@D1_*Mc~>JZ!Bv1ojUSH3=a zekusEhwmTnd8baR9h2kN{P1&y9nbGN06LT~4~&Y8U!?$^EZEfm${xu1QPFqQ?gyp1 zEk;Fno)Cd4uIi}h0C8Eh4?&mia3At=<3q`fraiuFE9H! zrNgG6gv|p-zvOfHa#Nrr14;W-J(gC}RTXP{LRT;lf}CVhfavfr+RQz&Y7( zuZ?4j0P+QWLJK^1?487A=erzC8CAR@4;I31p!_0Q%7q|&&Dsnjd+=p981GbT09HM4 z>$~RJq5bCFPF!&Nx0vEX8V=#XzGWrTk&mx?UXq6Q1Z|mg{?(WbY0)$PX+QR4t>>|8 z%Pv7u?w$l4O4v;lCIx{GA0^*i+iI3iDjN!+++B*KS`?MLMgUi9C!{@UrW*rJRnvWw z5*;?(!`2S{@ccW^>y|t>=G}qIcLtb>Iy2o(i4#iG&4YQ%bhjjYO79D~y7&CzR%1If zIWjw?N;$NawU$IWa8{ab9?V;&yDs6Qd?pHb+CzuZOoI+3?6EQ3KwfFOd9X*tbOSe~ z>E^*aWV-QXFv7ro_aC?^%`p$=X%o%5J_x?@xhD{0P4FKpQ;dg@95%(XOX$OXexpXz zw$Xl97FDhK`5CZ83d|IvM^>6*9?YAjcuZ!%_48r-^^*&&z5M#|m!1X6)>;zjz*%XE zc`$F8VmvtDj41}rO0&y@JvOEo$SX}T5B8{-V&JAU#XOjYOtHh;rhuE$6!T!7HpR?a zhT!u|F`iUVK4C&2tBU=onP_bRE8enGPYcx4e>klEjl1#d=6#-7e$uCApJiYsI*_=e zG|@bmw@h>k!Y80bTG;t9rJ^U4IB>1r+RJuH+OFRed`U&o-X<2PsgePZcQODIfBqwJQ)Ao`AwZ~iQxyOk}YPb zv2=&PoZFM)rR8@~M_Jpu(}ofq_OHkNvSs9^wjahXozr=6Y>O|}Fcg3R^%O$DPJzZl z@136f&5H?d98bIQjP^4F59S7A0X9jsiU(7C%o0p4_DMGx?^J7Sz!8A_J5zRU%}UrA zJMYYtuoC?Z!+EfhLT>R-EWDuvQAJBNfo_ClR^1}OaEqc$#n12iXy$9*MvWTKa{tj9 zm10n-8cj$;0RF$^e$jDRi&F7xr#xNa?@L3b@Lr-v4ixO6sZO&$cHe%XaQNJqB};t$f1U%HlrT%9<9V9kL3Et_M^41Jl5yK& zHZ1S3e8o9iG>t_D3a)Pj{Mnj0`9-Y7Xiog3YfJkk3`;51GR0v-(!Iv+P4n*$(2sg* z+57`_kM%ND1m;&`8%+CAjaqCx-M96Y83~Pk2r2e74|ZNc7zaV`e0oU`(^8F@zzjyS z5oqPark!B-0=H{P>kBO3yEJO~jY73+)^E0)2lKSI$MCVGFJ6+bs}eq}G1TSjl$3L^ zbYwk>W;2O|8-?#$&vmPV&wk%(?fZ?3f81_L35FS}rCw18A@m>j=`&qljocEuqer7( zhM#UUmCc^TKHJU6i)cOK5|I# z=*sz{$99_Aa?IHZe}Ph4LJ6F&?CMbF#Y!o0TY`6gS$AHrjtA?F!ldw^9GyfM(sEL? z$%bAT>AkayMWtn=Z0oEi1tmEnZTvD-u487AF)8&El{P z*DVdK`_Gj+ajRzDt^4cU5oRxSVrmphxV;~JF!}lJYa>_uy?fBnPW`U)VCNZ6>1d}7 zXJnh)sd{R+8UeRngN828?Nm)a_n+cfY4-5(|c>%q@@hiCK*z)Gt!Gi5&+lYr8Y8s@IZ|ZN)!lTdJRLLv|5t(m7637=+*y6v1bv#)O7l6r?eOo%BDJZ*6fI4d89 z_fe*Ens+NGDb4vl)Rn(u-iN45}T+n)A#`Eb4tr4F2r-Zkm|*Zqe!oGs9y zfPoHXJ3UE97}2q6XPNjppUq30w!P+C#sBH?9D%IL)f>n_!NNTw)|bc?(~N_adeZe_ z>1c5{C_#=%$095T``i_iv+7cU<)}l|Je(ps<#2a4a{ko#w?@4o;2%EtqP{J%W5nF7Wa?b`Z z-sUrV=}>-P4sBx?Qho*+^eJH%QJ54&`ds=>5-W-wjoncVf+#+t zO}anT^!@wCBlTNnuX*o<`Kd*CZPJ|3`S9$;n>ytV`uP!~f#JJl!S|hpbu@ z+ z183!YI}g?dg-Jo^a5N32D^u>U9KumGfl}co=41^PKiVLiuv?8?4{t>Rne3rRxd#Ch zDPc^o1%J9QWsqL)!AH%ZU(yZKkT&T51VZ#m*!O9JY(4s&wA_OUt1Vqw98B_FShP8%-sY zDRxUjSNT9c59Te!#w4Zkg$H1(HI^bBICnUf7Mr>HUgF-mbI;dUK5iBd=6%I(PneZR z`Yj@QaCq2;yJP&mxY}0eK<%MOx&IRsDPfOYFuQaA_vm+5RZ5udSMu4?LpBPdI$H`4?3M3` z;lUmWg@>J1zF>zyb~W4m;gQ{6YV%3VvVphC-MDk{K8RGp9Wy6tYn#kx zmO#}Q9iSpqjS<$_9rixz8&;2>_tz_lEAMNT^^2R4qbNy}M^@`*SirHWCldkz2#I54N<|DHd zL^_nSGp;=#3p^3@6raER+np`B{d8+DH`|>=qAPoVy56|4?>+?o-^t%JfoEo61IEx2+!UWt$;_CtMh=Sb$zTm?4Ynj)3 zCFGWwf8o!g-3%@W_yNMfy#hWZZTjTR4+3;kZ!Y|%cAYxccmf_t)JA4kDKov;zq-ZO z!w!`R8?lN9V;ll^ydmJQ?9K={a4#^o&YrKH+7Q40)`D)Y-#fO12YW0999&^xnB877oL1Z5#q|{xOgx|Am|k3 zv!O(?X{i!OJg6p6av_Sm^)lRP9N}QaQu+KFGT1W0!2f2Qe_o5eRv~Wo?BTax7;!U= z2XljrdiML+AXMpPI4`5mfp-*KkkM1tWVDAfGCJV)FP;lIi zvH{Nl;eH1k1vd@}+Z49qC^%(^8;rcUe`ab@{E}|DW6u8d)p?$f#}LJ-r**+`Z_n0G zy1uN@OYeuo@nDQYV2~)}%8`$IhJXbHiz9T-gQDDWDIYMSj{V_i+c z!v$lF7g?z~yqV4z>$i5Dc)#N>DG^h9PAqZt?@F^w`Nxm9KoAI_gw2FGxcG&LiI}Hf2)O*o4KQ4c9%>@#9b)>;v*JrBkR1f8CgOT3cZ8My?`et#bQ>evsT z>gK+@w&?xJagBMfCrmD(nh37g%YyEat|ePw-~T*ed9%5S0a zV2nTz=}Ec7%ZHqiOW@qc(6MXZq6c+v-0YHdv-`GbJlGQ^mzB|86kL!?tJ@1plk@4Y zz4Ymkvhv>2>d`Y-kDqgT@h4$CxlACWm7CvqFh(GV6y>rZPAQm{Dng`x)dWf>a%@jn zg;6HumO%p9?9+k&ckf&romyU_n{c|(j4KryujawrAfu1dgw+7>j)Ds^>PN#I)iKa? zD*J>`g98%{t3Quf@kWy$q9@e)=j%*Ov-PGz!+g!wRH*X9kvte95IFE{r$f)uNu(GL z#xW4q#g(6nK`vXqCUE}r%*miBv-ibM>{hE#=L?;0@nBDwT=oU;D7Ye**2X|i$>pWZ z2cEuPe1?8!yCs8Lq_3RAlgmUx`f}g)``-*$tzSHCV)t(G9b55Wj6e|SNx8%r$Qii= z&hdMDY^&YxmTumNW*-%~Gp`8`_JqkL+!_Q|6Bc)v9#dFGk?Dsz2&`O+5@8} zn)SZSUbZ2mmEV8o!5D!c(vx!8h{|_HE`f7u_*>P&HVupZ;QJ5!vy1-UJRa-`lgoK% zFAA>6CHY^c#8NC@12UZw9PY=@uDx|U_sr{I6C(;$2yH*VE6-l?K6S=}F#>_0C*=}j zb7$ldICsC*^YH4g{ueRl^=2_i0|x!ggFRt#$=oj&0;kK&-<;bC{mUDb`+np8k{ zr;@O|Z_921_t~rR?Koa{WUEO(@9V95A*=@v_JqkNGb=90XP7m+sdZ*f^KhjPOZulB z*S|Y$*6>qxPTkd&1^e7uk!V!Tdg~f5e;lYkV<$(6~FOQ>_`1h5(#Ptd|WpwXIh)AALYyj&ne~BZW-}?k(e2)BgU>U zw7P04*i@MiI?})LTW&nqL@7TGqS2TjK}<_E$z;V_Fv}%g7#BBT8I<3;Ll#?t4V)8- zb&M{3=iT^iEf(bX-Ro-L!PwhyP^PG$o}r^Yl|RsMeQLYIw_A<69h;ogybM5g(V_g5 z80b*KEH;j7K1cBsSbMm(aUA?cKzk@Z!3MZJ?eR+Y9uYHllxqE6<=B0ne*4o3(4mBV zfx@Kl03)I#Lrzwz;T1!+Hm9FK`$|gMV1qWJk93ihn$k1P&_LTOC0#o>+n`NN&(1NV z^hSmhZMGpZB`YPzpp7=w%x(u`{ zVQw(8tbbyt8C%~7uySHo=g-6m<%Cm2jbH#ql?X5-!Ye9itSuzG4k!g=^wX50f6Sab zPZ7bGeV}-)DMv?r2DM|>;9fbY8R^>OURkM`IhrFGy)(2KByL$GLpg&p8x;#n&mcK!O*KKxdXt=K^;rgzEggwtW>#u?j<(O>bOGOD zVUW6kS~0|D^hyz^kgnU345vvjD%Lb>QbvwN)+`CuNK=xCA)BvZY$`_QIz!*obbMXI z3Fcr@Kk^kKSUaSjAze%C7^>}w^0KvkGO~z8sl*9^p_->CE1HZ|jV5cG+G~IlwN^6L z+AAe3jTlLaoi$Y32W_b7O^FDo3m?cSPDj+m>Mcs=?E4~`O>}`!m||~3njy#F1UfC~ zW|0Xb2-L)>eTWIHMPYCl6SO$#nK3vA64TS56>IF>NHYvLP(X9YUnRj17ec6`hyYcH zF!V_ooR*{MOXq57X;#v@T1mr7kXo7jt)yYpq;_9FD`_cK(z;nm>ux2jhn2K0lm_#` zBta1V=ww4*Z32CciN|Fv-_yR z(LxeSjFPUT#Aft`iTMM9o+6k7Vsp*&H_OLLAdjwvj-%+(;z zD6DFAo>SPzvnvCm9!BSndLNR%6HHaZ7@)^RFuJHAbiqw%u9nbDE#XDA1cE;-x>5DR zYU;;VIk-m4b5?{~o#$+%<3>EM8-*U3`~0|emM?kkoa62sc>Oh)PQjO=E+oP)C?d)) zplL*8RA6XiL{wmt5M8J)uxV(he_(*W*(?ceW`Rw1up{6|FDU$*&#fu*6rf=r8jr!T z0L9K(IgeT%;Dx~O#QYdL2OPA|#t8)m$ET&(IpDlJc+f?e2YC?~oL85a!+IVi55MHp zrOb2o5zO<9MC>`~2-y(=7FQXQ0Dv2UpuW)nsn_sFfxV2agm|e5G?i}&CLN9*5>F}| zHmy$WJVCn40$(%$o+CoANK7Z7UP#ht%1fx!lCH(?u7K`jeX`l4iRlE2zjPNPth97D zlS@{Z@z|x{$F<&lyKdNfGq07Lzi4gNA}Iy)g9s>G2$-HgFr`?PN~p6cm1C$B*QksX zFwtnrN=JqyW2m5JBPh{fcHH&(Ch~`JJ`pSas2-!eu(_TpI}B3QcCiB*rOJ*ss3h0e z;V_lAj>YfzdDfQ+D;Kot_{XR1?yFMyoFqU*l}z)Ti`UF@*h=#!}wFE{%B&qvj{KKiRxZ-;&S_Wm+4WmT!H;swDzJ&wI&x)Rr8#w3NMZMOkvZEDvLBTF|{AA7Wp)Yfd9p4L>h>KY`W&MEWcPXKU zbhPva9A;3t&>H=3?_1Pr{$CFs^zD2(L6t#RqeHNZL008uES2IKgY1%**QgqY*_z%mMgUF@*x9c54{uCc=fc~Nq*qCk}F!wC~%Sn$fG_$tLA z6bDmun6pKX7OR@vp@x24^=1pNe*ak!RY5D`h@H0D8%-fRUE{37RO%LPs(CTDL-?L9 z?OrXCaOQ1QDl52+%8A~mvUc>6pRca^FlIx$!(*;&9=BMP%4gh0L6KF?DlaN*NhytS@4jg)zwv%IL({ z6Gdkp#=j{#xON?-U4)WnN_CRZn>x=C>Lf~;f^l>|ms}8so5FO25+&1X2UXYGVg`luPcttt}ODHNcV!R=Q z@zPN%Wn|MKOtoXBbc;hvjnfK>vX<&hIjrPlXI7n~oDA^S2m9#)0t57cL6IThLAt=8 z;7I?FfRNCDfS@KJQNrS|z{meQ53z$r2#)fwX=qTCJ|HkEARss(GB6-q9}?vsySt>3k_M$YbeD9ul$4-!NtYlkt#miiornKyl~=#_ zdf)Ml@BVj|>ms0kDDC2H#sT;UB@S$ToEjsKM5=*yt{Xmr-HjgO*75w1KelL*{ z;n{mpF?J+`xTMgrY5QerDzU6NhavRTjVaoP=+H4`PZ$t@C1+)61igVk4$#XQ1_S~o zFo>{=vWT&=uyBeoFo=nAaEdaqv$1dri;9Xcax#fB0`edmlpn(0cR`>BKk0R#18s=J zKQ3Mm7|=*GS66`-fn?dDh~;5j2oV(HI|u*>2f_luf-XaOp?467hDJq{g+|fH+(^&P z=m`rQBj8kfX%Ed?S6{u-pK#OU|^zG0h^hdft~4vY>o6@ z%G-m*%&qjm%)(X{)=<}4g6%-$nthQ1|5vTDdM}N>Yh(c#KBa$&2IvvjvoNBU)fEy~ zGBN>4TVP838dcU6F|r1mf=XWCn%o0ql?-gntiklcR<=ee^7=1~48WjM$tQf!nEl23 z;Sta)0e?x1--cBzp$3_Y8iHuy5)gpY5(G6{h|D1ZJy9EbsMCZ%C$MD50JxwyR2J$= zWm7#%A&@=y94#_1Dr014_hTs8_V&B)g0{AL&I-0x)<(8qXOLvcq8XrB2!t>FULHtC zA!y`5&4ugKNIwZ-D|0Jb(CDYJ?)%UYePKOISv|X#MutL0f_8TH7Dk5h)_OMfMxe(Z z-{|3dm$0(1fVy4CUSHqbNY%{F40;1SCFkKm1vFY&ng4~34p$NkY@>f0xXG^Z``>3d zgN^>0wIcVV`8ITxu(_U{9SH2`6!o3@zRZFsBNHHzzc2bGS0pX1?ZF_tISxj^b;8hW z0_$0VL4~UR{C92!gg~*D_I!YYzVk($e&h~FbNBIQ=r)6nTG<+!SwdZG2NF+>6985v zVq~mmZw^+~Gl!aw-hRjosQ(^)MLkE*UYb4+5QFanN(OpRCp=qDdJp(m#K_J7G`Cqq zjsPV@4b8w-w(6iLPRK26fWBF_lAeXNIW(fq)<&S(@kBBpW1#D@g@zQmBg9oCML=@1 zZ(jkmITS>Ow!(#sHxTGNn@4|-}$gy8Dpc@8o4~_O?JHT^)XF%uJ)jU)LeDI59 z2XZ1vY6G12W3PcyuzL#u=Y1#tiqu8!%oX61o6QQc-LDD4`)%Nt#vkjB@q2I&NQj#W zzxY2_xopM61Nh-a;QKT?5LSR4C*X&h;UCg=Ai8wh3n0D4LAE4`O@QmaSDCaY_TE5x zi`!b+TgyTBGU&ykKrZ00?;}c9wqONYGb>wYQ32`Jg%N(AXb&wjc`l!4YgJ=-4}>YlKj7!dxODzebF zYzd^xZ{^0!#SR;Q2KE~$K4gv)fCdObkO@lE-VG%LYJBXeb3=)Pz6i<|-B604zP&j_ zAO<&C1==dvXC(P;;Fpj8s+iva%fWTu2>y-S&m9z4g;7uTk0Q*f(0T_gAL~2@ zR`Cl|#LU6W&xS%3n7yc_-(ilYSw&_XrN9K+AO#%w*nVW+w7-iA^>_J&**)X#lqkDs8qAP^SNK{P&9W-Nw=mQe~h9|Hb;g8X59RRGeWy4#ZE* z3~UN5w-#n#GY2D3tO#K$P@9#^p=H5VR?i8fHpW2##7@cD$iN<&^B_U%Iw!!PN?_>Y z82WrN%&Cw2zErU7U!mk~u_Xthrv$czR*t`h89*tQz|@ll%vs z)Iac~|A8m-4?Nj_;K}_1PyQcx3jc<;0*#UBPag2h1=`aeH_$gI57??e`#Wy~%H#aO z`YZ0*Kk46ZH~I2A@8;9$Pdp&gfc7UI+z-|tc{lPm_uuhu*8V3RP%waYBV+x81Z_g? zWBA$sJ8vDzv;4_}K>I(t-)|g03817t`#BN#aQxpiKnl2^D*uO0VD8m#V}OhR^aAd{ z-WLZt&{pLCvjgn|yJ(?|2fXZ z-|`Kp?SNJQXBm0{ZR7s~&iUVPfak;wj@(Z(`a}M6dw|2Z?~DGaA9&{c9fvUNKgT)! z8;-{INY_Q1#d=Qt;S^BeGN2ebnDM*Xv1-;eu+ z10DX(2k!r_K~?@0^Bb8z;oSI*1^|OL;pG1g&W+!0?6J)H@8I0jw;OvB-u>q|$G`a! z&<4C;0e8S<+CSBQEd7N8^nOuL;t%al@%aR;QR?D-SUO&;9DXR_gcYW|jFCbw;JgCZn?%qH_$?uDS_pif0w*@W zc@#190?ycgGa}%W2fzp3je%n_;7k=b7Xcpez_AMOeFmJ#phGX<8xT0r1J2KZGhV<) zH_tZUEMp70pl#>{tO4KwIKW!}uNPngupVIDfDV8L)(xx&pn)|5JircM?EwAzIA9yF zKEM`W9OwhK0yY4)-HZY2zOfG&18@L40Na0;0qh3m|1JZp2cQ9a0e|1{0Dl8Mx}kx2 zH<*AdZ~?r3cL8evYy)igT?Ux91YH|22K1MI_5pby&Op2Y-VF`J8=(J3`>Bvz7X}oh zASaHBbRP&gs-%R7;td)C;504UJYx`u1SBaUsO$t&aCI?U*yDhETsYad;~pNV)Y!H} z+}RYFZb43}@u8=^lf<{w;95Tc)dx0%;Ek^WDKa@Jh8ucx2^~rBX}joLSw0FW$GdE; zxW`lyaF11j^7S8*eoJxJcHL^2apRvIH0V1kYUq=!+0=R2w@q|H#4F~=-|x2KMhtQF zT)KN{#dmc$yn2_I$Ibd=PH<**YrZugf~AVb)8nMRvkv)-uXqFzS-&(qWDcfQXcC#_ zFhX(Y6F!BbW7O5$wBxM1r$o0}hI!}pbK+OWMMCM~Brg86MoYXXZV0~4PPiW#)I?-z zTu<|k#XDOOkRQs-o$2Bq9PhTEcrTDVra$(lYDJh|%Q+j&>cDS}Q{#V3)UdyiUtAzC z5jP)F&GHUSjWyvaFw|9ABiY1|uysGO#zXpGETI&fl2zJ@$xLYE1~#9R>xk`0*+w4~`p=`$dpwtiG4kpB&X=cMG3}zgMw$|E+++UUORHj+?-23ti-}0I zvDD=A9#BYyau%aw;?;YUvx6kLRNzPKE&lUEcPCPC6L zHyDdy8uDXD9-}I?BD{6X07KeJ^l7f{oUtO~BGybRdZ?7mI*-^O|0;&Sd5H!w)~|Un zL|($_D2!cKa*9{u4wg@mPit2C(n75~%~Cz07YBs#;f5C*kzqkU-xi8$^R#d8X9F@} zCApn+!>=D%+XEud_G2{(D^@Z4xDtJk z%M+mkB8m{R!f%bC3x2>=y}I&^Nfq1`UA@$mRVUx04r6ntm|TEeU)&jm{v z+~r>JfD?METc#h~B1391pBwsaOyzhRK^rNO$|gd_8Sy-AAOEe-{I=pcy&?TlxO?rd zPiWg%w-$6ON}piFk<)xKwG1T>w_1*}AA&KH?zmr@$UqT1bG4tl<8jW@NRTslPGZ38 zGOUr5&f|J4d4}E=uFzT7A&yfPSY3xjHNjnk|I%GCH7ITe_lg`6*ASy3LW& zE$;AYLl8W5lBk@l&#SSeH-=*WJj7*f{o)i^MI_5AJ65qRm`VQIt#pqgN4sP6){OAGEdcO@Vvs^IAiV&x< zSNbPDM3>FynsFyD12>0rCZELSnQabu-oI|mv(NOrKn6HEP12fOjg(EEaxNSF{AT_1jo9A0)3 ze$L`c_6_5%AJwX5O8D$BN6^9CQwTL%TAvJj=TN~LjAr4>j{_0u9*2zMi)Bpk2R!-X zi{b_NT8k9sNA99b#AZaqgC9cps^T`!C92iOhRExSbXQ;=f`zp zrJybzW&ZkFt*n&M&IWPpKJl)f3AvGBWq5u0-LUpF5QVlxdVpt! znd}>ecAk-AX7snRkM4{*7nBNTj#CqiE%P2nxVP_qbfTvb{vyWg*1^RW=Kjj{sY0;u zttclK|CV{icx4Kcde?q3f(C3ZWb^f-iM9m7M~=#&};pZAx9 zJ6H$c&U{dPI7X~{{3xjlYD)IJz;i08gG@GLL-NLjJc7r?0e2fOb966ku?F$D??iXK zKF$_j*scq5WRZhk<`wEHyR$OjPVE5q+EHMnEkRk=2hk=VstVcQegb(TOdlFnI#`+2 z#Q|==&o78ZkkIDgPOl#$_#;!<*kYOJHbG#i!^aWccBHp9lDs&z@gdas%*7%y;g0Jm zm=|dl44^@*r-K*OU7pYHrn#pKD}+lSQl0RgQ+Lo{_X5GeBUPym-Q2(i%+#vL&xp25D4wQgJMnZb zG{s`dHWk?{@oK6Y-N?)LJK{%Y-M)o6HXZW2ajx|kCTd9rvFcmDVp?>H?-4zIoA5q4 z!KtRbd(B>s3KeyNkluM^+qN)WuGi?rOnE%?3FUn}EWoHtDwrL|1+J5_<0_L9x|MKb zuw>ZLm2*xNer7yQnwfi>yZq%irw+UXZ!#w}vS#(LB)f`Z=fY!Vt615xfKnON9eKiK zX~i*XlY0*&hcaYcE!g`q_i-xgoWO^0qH?%1Yaw^jRx#(|)CNjJA8KauYskQy7J?qti5@xUF4ywoi{zKR(!j-#c)ijt) z&$b@I^2L+Bp|EN>@|fv$_|21|D zoS~V>wNNAy0A40UWj>HLwI-C`?9(DoG&Y_8ER>YE!5h@G?zbD~*p|CNy_T8yGVpV+ zu_6IoWzg(KeJ#Z>)#o8L9J)8-Mo;O33l*q~?owtd)dg0hk=~1Q8ld=EyFvQ-dZ5P4 zN%h^pfMt$7@045|?^>njLpzBVzVIJET7NSyyT?$rRvO{J=sebpio`WffF;fRaAS_| z^XCeM0Ht?WC|Q!9VUTj$>ucyS&}9)TBbVE8?(e_lWB<^8r;}*4c7zUpp@%ohse+C? z+12@3kUL$8b8rK1qaAAPlRZg8uF;XF%gctaHsQD*)5k-*XTSv(7$lFstyXkV#dxI4 zsna9FhN1Q|&9M!l5i-^!Coo2A=pUbh&0sg(amvVC3~zrp0nJq{DStT_XUsWVdfN8t zY07Yzehc#A8Y9))urJi6N-6Kj@?AfjlX_#<>ZB7UEvm(6HRxINKJc!3&uyX_%#6dO zN?-J4(5s7d)Tv5jxq-lCDZXz({Z4mO+lzJ#z8d8`N90G-hF{u8qS)ELZFs+^as9UC zICHtydcv>OU@DALJC(2BjW2U}%wL4NG<_i=Z(cK~*7)?Pb5L>n99EE&q92c2%A&oQ zeks}f<9gu3`-NDvjX5`wtWt;?>kLuG*o)g>aqmpGIs^olX9RDJOqg=&+ z*c`8DJhzn5DxL-}z}-Sju#Tt0L_^Qxoxma#O|?qy!?GD?62*DH8KI)_3s1K>8MeKlbwWjC4fV;FqOMxMV5{7MuB_BB!ysTb~*^(@-?l72*S;G1$fXm;)DHZ%yw+ zj#0c8&^CPaCWS?F3MFq&siy{}z|K##pf~X@qDNy+L3s}nnB2Id$+Fp43#zVi8VMpC3YNP4HJO6{|d*#0p?*-G$d1_c$zJ9~bT z8MXHreb=TPIAFg0;HP@=h%_o( zw^*>YSr$ECcTlrTj&k-ro}3hnsV_>ARlMP==)^ro8$Pe*#%2jEZu=1O-14|=i&krP z*5q>2TsWnx)O#R-)%(ndAxTx@JAu>rPZ9&Pm zoj&Z@yx3E@`M&4%!V;7N;mS(Jg72d2MhdxZrwNvHTn$aVF_-x|+AcG_y)elRi~LZE zK|e9Ej*-pATOFMgCuZr}vIuUPn@EDMaR;NDo0>BfK7v1I(YD!AXddKY@hyZf%TLFzak^Ebg%{Dk0Be||t5e7G>howhLa!Z@7ExB_fpPC5Dp#^n z#|(;@n^XB4Kh6V#jC5t4=|QK2TOQFAEm)s4NH_5?rmo*iZJIiXDfb*0qj$uq;5qtr zte$}JU1JXBYbx()dCRAJ?2g!kJAPo8v7x)NHn3dgaB~=vG#51Tk#6ZXYx`(d|8*-) z8K+R{)h-+5G@GbY=xr!ia(^pUQh4vWnB#yBNKY* ziJ2Im$D7x4H7JiZ*YpHs%qi_Ta=!5r<-c@xAWB72m9rTSMhWqha++bfS9fq2uEVZp zwdK2+c!$^qH9+~}Dugcl12^RKWeU#O0?hUYgpPC0)5^+&2V`ttkOz|n)}_kpi<|b^ z35eYfTg1<4`7IMgv3i|AN>t`#n9q?)ytLgPk_boNaaQ?SdOxXOe{na)wBeQ=Uo^*l zW_C+dn-!f_0b)cPFB8_1-6b2zXw|w7Y9Ix%`{|%~0Xb9PSR1Kg#tNmk52g;aB~`(m z3L)mJ`{4JL?;X!OFyQesXhXHWOV|FE~!_OFL7|CWJ}f{m{40dm?+e&xogMY z%4(A#Oi+YHHJ?}-SNpI@M2_LhSV2ZEg}(k`7Nz-MyX+CQ*|0J}M;JlSr^F0e7eZ+c zsopA$-cSyhj~H(Ev{oVm#B}1Sx54qmRN-&yMs-{lD^1P}eM^FAeaE`=^`=ZVZOGKb ztRV@|Kgzeyp!vKf_PIYPtRRCOxAfvuT#pNSYrmXeKVI6p%jp=Jb?I%o(Ux>AdI)Mf z?^6d2)Rq~~>mFjbSCtFauOa4&Yjll~c-xY2gcCtTt#zA^FmRlF?aWgIW2V;yH!BPw zFHLIg{M4#ayy*@?Sd{#tG+gTMk;C2CKA>`8L3al76-~@ic}DDHp>kOAoNrWKD zqRaP^zTkD)jGc2EInhhC*I|35#oL{U8IC+_N=(&fZalGzU`aw6_cFUQFLU&^(;9xI z4r}FV*CZvudp3AV!bu5VZIT%i<9U*m2+TYR#uucxyLu(fFgOw=*h)>YnD zdl$98_HN%>_K&^F*YsUWfz`36e!j*Uva#t|4hnPF^)ePD7>=0gJiLS#o^s42|3rPK z&3ZnKVS=GW#KnJVS;uLEdHn8*?-Ht(=9dh?(nw4KXxA>ZD%z z{)geWvZ(6Zv|g)NgCq8x^tO%b=vX9!?Vs$JL>C&G2gdAMixA18hL0S;bd&HGqb3dGNw&m625XMR zUOYLs-=ftccFYu&zw0-%*i0$SVoXbu=v2%+$)J}gDLgjxP-j8zy!v*r*zx9DJrYC2 znNt*h5(e}!p^87cwUn^7wqI%-3SSi1D{o?kY1llI%0kC`7ai&jipOygpq=N#ZaX&u6&eaq@IF=B;2>VB$iP zPp_Q%(gpt1DdX1c{NZAqxm^u69x?d#2@e5Zy?gQgApNk#vMfaT^%Iex^{4#1*__yP znlGj(5HmetGaCy|?;DYZhuf;iCQ7bj1-@VP?5Sq$i1+B*a!@UrNlnyoMrxhaMZ@fsC&|ti zHC=3xvtCHtSIK9H_vOK)aVcpd%rl#G#ZQmsnjlS=YW!*sI}i=57%RTgir&CQ z`RoJP>*YdX#+dykG?Q|hDr}YtWrTaQ8du&M@B16_^`yno?AQ(SiNHwlcsMpEb&^!} zdn~=$Ho~%Lns;XFpF%MWuDKKWQ7Aw-P-~;3zxCdEk=6-NpgOQ5%{O zky93g(1P2L#zkvI$jh{4NcmX#GaD=x$$K7s*HKq-hQC8 zPp;i^K#j1dlxQS`*>f;vDH4e_MC)skz`-X<>})q~zt|&3DM)=Jt$*xzHM4V0aK55p z>*{`KvyGLr)Nb?Az<|jKWljHimhy+&0oPkiN9_um+T(xyM#AW}sAkEzJc2W`2qaNMDQ^xRNlInr7Z4X&$jUc;rw=p9 zlypEnQn+7H$8BQXoT210&e57S=xfBmYxZF1DYkoQIs3C@qzqT)6IjSR{q@N;x=HS; zlUKw-Kh_R&QBN0%+bOrnb|cedjRd4CofanQo2m2aJJ*+Idf{!{ z>~n_FA!b>xgHeK`_vAKAh&>N&c0L%a91ZFC(!xGh6vOq-oeVB5bp>lWeT*PKcTM>w zVvMMmS*z)2w7cC+SH)gjT6tbJq?3a2td;6c0j+lq+uO&Tnpu>{vNEqhK}GXj-jwIs zcctD)y^ErW$wqiSshvj)OZpzxDtuW1Pm}AGMlbXE?DZYUuBYT%?a2o&lDk+DclplO zvglxon;_@Dclj@OTQsd2j^@^fbFmEsn`s8WD9?#rwA>*Ex14f&u3kg#`c8`WIT;k- zy83bS9MR{X!9Mz=m^J|(JV=Ht&qA~%6xOdV`ynH^a0?SpAHiUxt%oiyY@U*Jja9ok z)jXn>Y`;2v$~Tj$f}&);0AXaG<{-{t-@{1o&_BAZlsQk=Kjy%a(XPv_jh~&&^ymY* z2GhR1sKRFG;uBa?<}SRB1U zhxlGw=oDIolu^|uI!IOQ2W9eJsq-btraVPcu|XIIR)fXJq+<1? zUlQ^4TahdpMTR0ny!t2!$jYgF!XH`bd5+LukM^D8+Ve-P5uRX7hh$u| zGIF_m3#pO!C26j_t7nE5y9Micc6&4xEZ6PSKWEgL$TtE#92<&ee*Gf;td^b`j2{ta zocIm;PZ2S-*)w-93!!gjG*JiJa(9RzHJhh#=$vQi^M*C`Iuin{X=Ta(s<1$dRk=Y=M*E2hp!q**b0>#rujwkVlE7F;-*2@e+RCcGQ zD&{FZ+;8%~^*{!+y^s+$+v77wzN>pZ>#^6GCUGCceU8UutosUIV&awJ{m+w3$Q?;< zaV0}{I3itL2qDnwrhDPbg|5Hgc@3>@?k=3tHFPI~tw?kguhpn!QeQhH7 z-XDC&3S;kGhwRb_>>L})N&%f=Uq_5FVg2UQT25D5#>}$=p70TN?F}L_>2LH5$zQ*J z7rz>X*Fz&7)y)avJ^P}26{pLqSe^9kHi2|~`chG6GN4f(?X-eNT!T8~Jt24g(dH(x4^K5%$GCt)`9Z!U1ySh`b zOmB5&`>HAUJYi2A;;o&3z4nE*drj8X{qkkgalUSNCq1zhK_nw9Oy&fwNEM01E7#9F zn3k0hL3fEEyXluf*T#)Qs72cxGAubQ5KGwEp&3zp(o*J|2TZS>< znZ;$N&h#+3=DB)s5tTx&qkDhi3LMtJ#H>ir8nOzxin&_}bM?pc!>n>NOy}LfbPKW} z<5DK^DRyy_XJQ3{W9$1F@{NJ>qmJQSPou3em&IR`ub>Zi4+uYn`P8Q0kvMloBV1r` zz;jK*o1DpLE!FYPA@Z2}>uIBS!%&#U7Y^}#8@s%VYtgGWdkt94pA9PFcIM-q_d_A| zGSP1^z0SFd+ztsMwpHX9lKRH>2ORgXdX|@8@t+IpUe-ArtZi(Y2aK{IEXHKx+zP5= z=%P6rbZ)WI-A{Hz4sh9lnHz_r>LJr-+{-j^hStmmPJ1xs#&c8Q10)OfEbv?8uZoIm zuFF#KdsAf(lCa>}wdQp(Rt|RWB-WA7zCw;_y!l&z!_U_rcfvhu=FdF$(yuN3uQa7Q?@PqVS>k%eIBc1 z>gV<|$ci&k^HTm;BgM#yZ=$ysr)XWTn5T4d!!e&7%8oE!<<2f8sNAJitSR0`u8+7O z=#wXNX1_b+CI2dfQ|g7_m%h76VyQ{HPW-k8ZcAy1h#JKf9P-aM$qANCie7ephLe^9 zlM2eWxwX5R6X#O~kqYBr2_;JQ zk5=|e%{_nYxo!Rn|E9|nW8;o2!Tn99%4BYcIIM=K3739XNYhD*LqpvqF%4Jp zVh&08Uzo5k!|sgl5HE8re`cR`%bJcnd3{^WP)Zf4wI5!iZ|JpRNC1`0LDU0Tfp@MA zSlz}jFwLlMOvZ6HQV!n@gctIfp%Z!uiiMxV&$BK~3|*vQs9N2_ea{s;+SU4rN`mQ~ zcI?~mKAE9YK4U@^{^Ldd6UP&}I=Hyg7hSnCw-GJ0^`}JBXQm%c4k8d#*k~D9`B^kid(}Q3V=`l)lijxql!z0m z!Z-v^<-!YA?XGw9r|Ib9AisF}(q@p_5q&Twf_hc3;{0(5^mo9gdk3rOj%wHX^y5>J zqf?PQSj}lH^vIJ=ylLGQYXe`EoYI%nCt1XaTBg_W-=m~nc$>Df?9)83dAEYvuW9AE zT?n^q&-$RSl)p_<=9cQN28L9KF}i!28f??FFH)1f03i+@s{!(PnRk)3OnLyX;&a>CClSyb}hB@7uRFy=iFxE z!s*>F$}A>*BK1^uCas#Lr*Y-v3tl1kjcpJyBl$bH$ZHmY%3T_lDHWR{|+HB#!D zS%foF6EtnS;jwfmD$4G}EBAKAh%gG~g-0EoW7-ikVc4d#C;awRMl+tw#w@Au$J^3S zAf-|ns@=g^KC`IFZ40v-3T`n_w*r3*{eZIh)Zw+-Vx$1*>2cz$=0Zg&U0}316Z}9b z!9ecjZC)Cb?ULTBgDB4TkKfSU-3k;*@FHcgimhOv*wx}^5qQ8=Ya{S+Ilbyb2M=+9 z18jBcjNY`(W&gJ+i!gf=!c%Wz$ilUfq7;umC#LyJyG-IJSq1klDrbsGs-{hKQ5PuvwP4#Gjq>IC=gRZLe$zlfy`&zl260^xBvPa*AdmYm z5783t$_bkd;qR$Yl@f0M(UdP*&Pz| zeL`2igYM&2Ued&rqAL7W^({7%rud-~;Z;qrDUGEBp`@VX$ePTzXJs$H2DO^azXu1? zoA@%Otlev2jo8#qxmRwcN>{dQ055)$Vqojjd3U4nb%dOeR5oEaPkM~%f~mtB6&yFV zQ!!`w{zu&gdU_^wv6e)uTSw-Ht1+m;eP5^J3b(vCB{XT$^N2IMdkDK7XF_`qnqhiY zJe`@F_Y`s$_~h z2d$C`$bVm|U2*@Bh^|53Qur~+l)@p8kO|p6$kki~BuV%E%p76URvS_x+~fz5J27)F zxEm*^1sdoj-}8D9aRoI{`NjoUIj5rF%!tj<^57uaTGCUD<#}a|!v{?7G@Z=QH(m8{ zUq9*~rJl!>Uv=6f8MOZz`2t0HhCZlCXsr&@?^p`WLo=R2u|1M(m`LT0`zIrdwM+b- z{OiL}&&8%xCnw10^@Q%(;1rWA19{28fLK$^fWW+Vj$J5tVWs^|`Bk+^DaVr+JMvN*iLVek4>( z_(BBXay1QsaWyFLK{1;6ZT%BUp4Akus0e!a4iB>$1U3c^+~c)yE%wCA!6-i2qn)eH zbcm;4CSvxCpB-$ZwSxugbxXeEYTQ!v1Q`h_`?@x4$*hfT19vUC%Ar~=A+ei1Cw7T< zZ{a#zey`3sz93M_KtE`F&xt76>6w`xCFvb?Q1 zuqH(@R2TC<9gnsVf?)~dnETc^pA1P|n#*n4Rf7x@JB;+7e9$TN>L~76dut&yC5FDD z>`Y(8IIg3B5k}!5pPlds?-0jvFIiI3QD)#p0ed$(m_3t>Ybt`rA(xwy-B)XntU8gc zsSXc9ZH=KtpucnYenXIN>GDwoLerL;0)D`!YFnQ52Cw(s1dU?@$@>8X*y)j}(q7|b zQ;dE#Ikjx?DtB!ho|{#DE24g;(|ytE_HsSdQvB6YrW>j?e-Fs(l%Rz7EgGtqN zTN_>KNUbwI;r{C^mj#3)q!-gAO+uEY1RT!!hqvV(3Iy`HoTAPi_Ct!=#&SLPRy|jc zHR=`_5?Y?%O`x?Z$>;C8Z4BSm7H)gBCz(W0yj$Ndznkl{PGhDtXP^#P8YF5v(5`su44 zEIJUeovwQvUjS}mvs=7qpbY)DH;wVb>V=iN9sZ@0K8sRx=ia|i~ z5RB~ZtAs~ft~FCLv}|K3uMcK(P~vTb*RYs*y@{AN2y>IN*L)t2H+W4oe^%q7&k2%O z52Poip>tUN&`&TJ^wqseOIIyoxk73q&}Tq9jN9kziERlLNZ0jB<<=naX=t9U8L|c9 z1nkyZ>$H}Q8WKFviRKIq|E$yDyd6jxD-g0j&-|KN6x%9Mo%Qvk4bkxx@1XW3@ zGWAxgjliW#Mye`_4QnvXICz+TVYjH_9di9Ak_NS+&SwZ}gcK?35uA?K`&JjDP4szn z=@;dm=iFKW#=R-_^JsYw-j&L~fzQ{xSTM{Do;*dALkS8i8k0$&3ytT-F@LHBHHO0pX(t(EOb znIO?*=H9j>Br~|FqY7N8efP7?N+P;9V#=!f$0zr4irnuKyKV9BM?h-fUaumyV+b14 zzs+~#M6uSun|Eo;i-_g;ta5UdO3?Qjcc{i8Na=<8CWmLn3K@56*v6%DRnw5`gW|Wb z7@S>)S#Ln6BZUExCcK|rc|)n~Dpe9oI$VvQDKrs5;R8 zq@$?gEGt&`{Lb|lKSchrIHVxKDs!I6Zn#?JS#d@ zZv`SFGLr&D@nO8oJzw0`S_9!tXYgZCT&+(uJtnV@FJNmgkohlSW>do;N}d4*en zhBnaB3|9|h(fVOnW=RgLpI@Nl@D7e|<~$Acjk3Gq4rI7h{>7CJvCH1DAtmNfLu6uU z4QLG(rszFMwZ0H6vZd{?su`Qb{_;rEZ%9ba%J`MvUUB04F;$>hwDfzHGeD46xyXDU zn{@>ob7`-qj|sQ7BU>2VR)=e$CLGJiQxu9LyU@wpIrp8tuA)dIpClx>pk(9sl^&Wd zJiqI2Xm)6cj7$z)Q$xekSYyk0LOGY8tP_Idj05jd(cs`sdN(xzPCTpRRxkB! zUJmW@ycFupJi7dtqQ;c2M~|C7Ix5nH!WKliY91oheC$xay2$QP?G@Dyj7+MwsJy+I z?-P(KJ9n9UtauM@>`nUcT$bm0)n)!{vXUX%moAAQ#I!1<#~x0U5Fw>6EO-~;vvh>& zpW%jg#R$?*t0=_BH|IwAKGt4(y?gp?s;r(Am@<;?;Z_8X8#ST+;y&5I z@VYE*TR3y#M()E>9#3~{{;d7|8pr4tw^7nSQhY9JZ$CU$NJ4C9FOZRTH5c9Kk3xAW zyT00=kY0V?>Z$s8V-YldioQjzISu5pZ5uhwToua3R^yfdKBoI z5OWsM2-V#U1lKoROg61riAu*Pl1*P2wY}*x?%^~Wu=0zYcq^_uCk!j0#rL(a8@lN~8h`Z;;j&srq-_jlddo)cJDnXg z=6%Qcg#PO5?4JMW(OLTSI{$%o(bcE^6!?{FSJVtM|Ek$|;ucoHOt9KaOKAf|9Q6F? z!`q_Z9GJFm;>N|kOmLYUWEC_Cy3zT3^Fvw>r%)~#W(n5ll&wT4)6hSyCGVh))R#Ih zxj2$FQmZ6Cl#JN53y+vS1IaEdbLr|(4Uj?qM`BdRb5VuHbU*0MxR%3$X?h&CIF8Su zaC4C`_W5NoyzonWOG#V{D!9AMBS=XoMI)q+J{bv9-8|vjtOE)Wb7ik`Z*igY>CQr? zbxrptH6GSdNvqVZw1Ck%fb_hyRn{Mo}*!3)U<7^v{+t5Qf#ky?~&I( z5+nq0brO+S1r~h{d368n1MM)R4NGO6JmH!pHH{uV+LvXOZzA;&oX%}Z9J&{wPeI5L zeH*b&k{Uf%ay1IB3~WDl_-UO@0OOWlbn7iW z>B;@%V_wz)-w%lK_xX8dv=y2^%#}Zq&~iI`kxw}3$f)5;`}nXt745QnV$-yVX<#r! zY|m_zdr*V5Yk+!PrFEZ&6|2UcitdB`Hrg3!5`JD2a!~A9lcD&geMr$^QhN@f zX(!qqJY>H;M7cMm43E(rgF4ow8eSTO*IIIpWp^E#uIZ;mt7om4bf}bDG2Zwl0Wt9k zWKJ_Lvf=C=Tc924b4lvEz;>+mRi%w=<@5mK%Rh|F`=HTk8klj-rqSBeRKBFTiV+kju|gnv1FBQf~tmc zEv%Py<;&f_vv%4a|!9`XEH+UukkB|!%sZ3HG@@HBXN_aUrh{%@R)VeMQ=jzS40pRO?q{?&Q)y0^wwbr3oq7enr1#6&uDE-I zoQS-|kQf{Lko?GNN1EXE#ZHd;2MoqN$L#6cw3(;Ipn0C&8tj}MqM^mh7lXJS$Ne6A zCv~im%UtO=>Y&=&)ka1qTi4j^q+jISEw4rgO>}IB-5R;V8!HA!lC7`W%(Ijntc2iE=5nt8K z#NN#lA7;vzjU^8FGEv`fP}9F0t_TT(gbUp_nPa8R!|@#;N!fd7g2~E3V@g3!sGu4& zkY;k1&Y{=G8$!-vqy6;d?MiG`6pd#u&I5~2v|OjI8h0QwO^B2*6W%H9D$Nza)wIJI z)c6GW$6tEj`SsWpOU$o7+|~^?=xzJV04B$aIUn2>QMg3}iJyg7T}GX5p7pQB__z_X z?@blf9kPW_2@V^VkXRsIweJlk_4o(IAV}c#-G;u1?jaPgg}q>D+~BKuIH)wIdB)r1 zzGi7C`PH2Bz&&AcBhYpprBD0Ni-)862&n zpQ&gfCbdT_Ny|{(<->=*((&qDwhSCi<_t?2t|QnX@a#Ed2O3i_UkqFO+85ELr>MCl zrUyy`pjCCgi2HRi}! zi%rBspA`JePk!;+vj8Md;#rN9{7r~UOf{$?0;Z3fr+s`>l)HxU_dVOG%=}qbx>1Jp zjKgJL9yls>-oWE;vgda(EBhjgTsI+hZqdim=TEch=VtCTrvfLavO6i`6=Sv-`H0-g z6V`K$&-77qUDX1sz3TjXS48WfJIO!tCnN@O zkM?vfs`aO1w&&l32~%&#PO}t&4{m9M$6DL^hVck3X>uzUt>5}P{>|@?|7><~n?1cT zRnxSYq=GAug=dfxi*;6gR)XNl<_+D@rkaLi*F1tdFKIXK!&o`Xm3)*Fqn4V3_wC2a zJS`k&=!f{QL{YsH+jITm2Gy(@we4cJYxJCht|iwEPagTprAKu!l^o;en&%c1$?+TS zA-t7s^>IzVqSpy-d?ZnNV~Rg2jlVJgAstu;9(r;w*D>U<1AT(pM}qtC&x7y$gMZ|2 zNkj=K5hMhYB!sra(N;FG>6RQ`?6x>)lL5E1H!o(&XW|26sV&m|}VzRH|nY!cXW*O+XbJaW8 z&yR+#ad?_QXOX#;!KNm5*o z(Y*Wo*L?1Cayn9rqZGpJx#V=RGvMI@&eME7)|94i!M0cdZV5x1+;^_ASoF$Ff)i!= zQaCphc72XCS#x9Yo}i(I|9#*2y??Mh>ci8mz;P&; z+G`gV^6k=+8f;}sPWrsitSoJG@M+SLE!Z!AI9%6JkMLuG4dK@DJzi-zR_JXMgH@GDpup&i_Q2Kr`fFiXVk< z<3DQR_sUA`Pij~D!Ih;C&W5Lmi&=@Q{6gj-@0bry(jt=>G3Xg?+ML?+vO@*hQgQi2 z;DgV7{%bxDa+$zUWPK^UxFAE_KMp$lVK_j$`TU)L2&Z7ikl=pxl{jJUDjsw226oxa z>&me-Kl$q~3hr!;73nvfSLfFC-d#3s<2n42-F}|#j4}^oYR06H=TCCEUvNCkF$!CL z|M&di|C6yQY6&8F)RJ@)2VRna8M`Dhl;zcyKybSt;L(;~3R*9_D_O?7JdX8nU`xM? z1Q>hN762y)a>3}cV34Ox#`0+!3qCJ8R@PotEdM4y`DE>)VBs^?2`MUYr1b4LUtbxw z&ig>FU|h%>@GmDp+__n_4jyG;(<@}q6i0z8R8 ze&Lb0H@x|i*tw(hoAdC{U-)xB_1*EcuiPf?VEf*;%-j4h>3H(YN&cWoz6x+PZA`Df zv%!sWdM51s&5N!q(LNTMzu^kPs3{0&J4*&P<BhG=n;`rwB4Nu8g63YiUIO!Xojg_M>Ut9| zEX|+beb6^kGxm_C-@_h760Z>hQUXe9UM_w z^Fs{;wWy+3(CQa77Kp_F03ZNKL_t(qy6A91VKsep8FlzS{lP!+gwSipgi1xNSlhu`Eineh4+3v%@>9^}LC0)c<^ zk|AN)q^Q|TpEf=+Eh5_6Cj{oDbr(9ZvaOLr5n)h)s2mZoZ z2{*^vAi{wpH20}WdjIW0aHA-YrYpc~jrQPxlI`L)CV0c}tM`(7o}| zam2E?!?DRo1D}=fLccfvt^sAhp7GyrT}17SEId|*y>2+uy`Dx=_#gkVpZKLs z2Fba1=XVE=6re8;7#GwO1Z~bQZ0>`3JYOWC}vR`;cIG7W$iqNJvU) zpl!6>fTnqUzfV&5fFyqAD>KyonZfB?+0%N7gd05U@&eydU)oDlK;AIiGHKu9mY%?S zge8m3mYfq^%gAXD?ta79f8+1`g}?lt{GfcXDS0C!KJ1gVqbH#L4>k_2mOxgZ{=JXv z4gsFz;L=wy;Yy<3UF7NH{RqoLOXu$v!j#xkr0=}>K{oBp!DWiE$*F9{JFC6mB$mXxJ@S)5H+gi!qr(GEFJ1`^haUcRvC&6E#?olB7d_rxjL5TK z;9IFw1~yb)S5rW5N)Z`xh8?IlxnG9)Md+a!mRp`7j0<_OomMC2oCLm2 zd>0+OxuZ3HPdNw|$LBIN_{MLD(wss!;*rzbYIE^wDT7ssuiqLCrlRx*z zc{1N+Sc68_{3b$3%WyeXP{p8~T@w+V`4!TqAJbpljqORuy-1qD^HHc6#UB+_wpnZ> zGkLM{h$=EV9FD zH}}%sB!ia}3VwZj__ZaDBH6Unc6&I*P zg=`zXU{dn;9()drWlGzLxBbzQK=Y@;W-Cb0CMNoI!zK6m`}1FU_e<~jGv5VXEKdNv zdY%%DDF(n8ZqLt%_eV4jXi&ip{ahB1g%+nL5S=8Ze}XRqedX2HUU`(?8bW(YM}j`v zRoAN@`|+RsdvR71La=M|gCy8paFccMlGBhkq0!^h--Ok+2yBsHk{q2R#=pAMaCDMI zuQoVcV3HFLxZRs1H2KqJ zo04i;GmV{>BD@Kjop;?u;5Y$wxEFI%54CW;m2pFG7>z zIdWrbO$`F%Voy5TAIjwSb`s49)clgY6zMUmi zV~Mv@B$p=0IJ<~E>392Q&x1ci^P?b?PF}SRbLQH$W@KD*1&i!GgQ;L|ne)f*zWe3( zElewC6ihxcuP1;Ai@5RO#goyJUGf7r>R=DL14wWmGLB`kZt8R@r=Z|0h(Vzr(9)My zZ~~X+=-1B=e(tZQ6iY?v&?}7ilYi#t{+^_gJjb_947Lh>NdPZ_7Dk%HL@y!0`BS12 zyGaYDt?WXAhTL5Y$XE0gICAOKMz83T4d=D?(xISb2OL|-^Rfu74vUTgh8~?4+tyZk zoNDmU7hko;hYsGDEDGveR&6XGnPQ$_S_Zz@*3mI#p%=zMr;B3db!jg&+qf`q{1pMZ z33s7bme16oxKBhD$kbx)N^zk)CK>YBN$z6T-eLymJum+YSmD_}e#6&))9;K==Sn&k z>Q_PQP@B>?Y$3;e4iFVb`xf!wguQ*W6aaVBV8I2cADc4g>#+-4Wc#)5d?!8pMITkE zvbkH~#KM%=mzZ&-?Jd{#`P|`y_uu^>i`?bn#2Af|B@{B!>Y@%;UqN?J%*;)WwCC>* z1lgMp78JCnxDgd;Jwd5zj1draN_8YD+;Hq~6a3Ks?x+5qL}H5ImM{`%cS*snY?A9o zR%!W5a_-JbhH{%Y+GLVv$HW^WN~28%92sQMBOw(vI6gRhs{`*QEI2u6!Hs8kbcqfo z+3|XzMWfKIO&2@q0pklicoj8X+=D@eD076`6*5MQx30@!BH;*K*!CX~6Xyf+-e(Z~S-l z6T)J?CB8pJfJaBl34IfhY3M{9o|6L=SaKVv?7A|AIT}~#(VZ$eL>BoeYHUEy&rgQ= zMsCxrbu<d?YJA&!$)8D8^8J6^5@NeAoD1}^7Zp(FHu~cxjH-3)n_p= z36S&qv8%f>BM$w|&DpDMR+lP0My`#SQ#&%5HP~P^-gy1Z*ZZY8N>ZS;(C4q^_^$ts zZIC2<_~HA#2wohK7&EYbELTZ}Jp%pw_T1>G$|EmWKfm4eFQhXek&`v*tSXkwBWfje zB@4`=kVN%Ql_#?DIsY#Tcy?^ENrYopYXQCs!X}4gKqG-9+435j*gNVb!5%KQqJ3AoIV;{JXZ@DlKWC`=DC2I0!EXAN`D@)6CVcl z;7h`Mi=0_ea;$MVs!`gVyBSPlRR|d z;3lal88x93FxzbmLA^*%hLSkx#*Jo&$jvW2ThL2&GCYBslepvGz3H(3&N`JPOA!?B zy7SK>AKmqeq8AkXyZ7))WV$-&RlA3EQszm(wv620V(+RKYGRwbWuU6}8Bm?i`lE)c zdX3-Jv*C&7(ZfIS@BasXcN1KYAD^|39ZiUcs?#Kg#NQoJUlIJ9*!ao8BjM1f!6cME zeM=86q442>my~!E$)#kFt?`nh24f?8z?O!bUBocy!|&KET5;38OAPkFlR-DRUi#?4 zmX8nUSG0{m&2BQZKlje(dxNM%qUV&3;*4cssY?NO!Qb%Q(47E7h2X+=OVW1b9OyNV zmL>Hq!J(VVN%^XL$yQVAMQ^=kubg{K0is(Nni#|dK)0?Kk_)um;QcRGn3P9f|Bc_g z&j~~};j`%lm1O7(nO6(u#6YIzl+(NwO7NB!>6cd>nhHisxa#e<-+4R9=6ejyG_}`k zsb}a^=lVOpQ1mpvnJ&<>81Y!FoEqc7l zCJpn@NFa1{*s0Nyx5+Q5;OX1ML&rWaa?$J#e!Byc>7^JK-S8F{aQeZ>p?AklKly0r zMzagmj(26#Z47wTYvr*tX=3wqmKz+eeI1` zV@!vs_Ih&p(oPr>ba(H)``!oh3nDXUfk?S)`TV{0-d-Q$W|AEPUU}`c`3&-yNVgr{ z?+s>PRd^Y9l*Sf+l=NKv@4))d(X*$MeH|pzbtQ!&hy}cW7W4vK(6iBzT+!adfy2LW zNh*2N_~GsBV3O?ilmJ%;MMs?$xn!|HLc3(Z!v;l7ud>OC7Vj2(k`J9l30_|!>sve& zJnUP3wc|WLpl2IA9(}sWV4tyhk+BQV$|oDI*OSL{@5H?1d*u0HfqsJ&NsC;l?ZKyU zplND>O>5vUbVG2kp~mnT{II?F-XLH47m=4fV8WFQnLX*AHz;pOZ;=MXo0*|}(#`jLWZWc+Sc_T4Q&gq)`PKY)kp0^F# z=?~O<=DxS~2XaN@J%74vi7PHK`=)1mZ-D1HfGA;20y=*L<>|*WaI47(_0DjNV8CDo zX~d@kUBg{AFnCcI(BnP;-NmWK>UOwRI1Pz4_z^j<5MZv1#GG;D-J z%LZ*Y32kxFM~}`Jz<1%Wz@TN{E;e*)lV?HW2m1BVl4WdQ#+{%dv)9D2ZB`yaOi0Ql zYeK)}+B%Tf-SPqgbTB7|;IF{pxp@~ymx6BT0Y}gUeIIgNXjTG~E+z+fk9~=5rEU8~ z+zb69v(p-uV#jXHn=bW;JN*wI<}ViiPUrBR`gn3Ku^s=}TM-Jb{3j`&qGihGyFb|2=}cc5fDilkqHoQ@2A}Au99;cRaQQN} z7#DaHDIL4Ph`0f#YNHB+T3@DbTrN3TdcNwtfOB;AB$BRm{FFS^zay1m$M zY|D$EE;u&n<1t3#(Z6`^co3~q!`iyOvcQl}UZW0QjKbDw*s?K3}ThR!?%bDgmvyS~Gmf-8DoR?0sp zJIK(zgmhy;?f+3+_Ls@M!jNFWbdR_2f|8^aG^8Vcu>X_ZX{_2=1S)+^4D#@z2y!1M zz8!30=au)~fA{^Qd#;TWUptm}-+lKz8~ya1PR0t!93za+>y$A%!FCu}Y3Ql*azmqp zz=h8VCYL^W7--tYO$RlIM%%*&Kky@8{6)M1d6P{tNFKFhRn!7ra%|#kGVDim`kQ=c z^acMWnS>yRY?R;o}K2kguV~}K*j}6-w zxDrc1D*{%6N-hPDU5#7`v&p_YAO6w(X?J`{fERufOhW95f=qon=-s52Ea-RVWe2*o zj}Ef+*#wVPZ6T7NaFP`aJs7#_wM84f1l=2zL7qI0A(>Cr~-1=qhBiCucxOZG@ zFa9Z8o7-(`YQF#*hN1gPs0$7DL-ZABUjz&KJo7bXyokKWm07cBs4rG-gW9|<=Hr9= zA5}14E(jBnV?!&s;oA7ly|J$_sYCW685g>7jx4uvMx!v zfh#E_$KDAS)PmXAyf%qQ-6X>!=p_Q!(ryw+Vlv?*ksW$<j<)o)S23#M4;(9y#NFZ?en zmziEXz)fkAPKeC(!o5IK5Sj^+8}64k8%NS-c`6`pUxB|#aEY<8SSqa<5i`v}eMLDh zx8~L_x9!hTuN#;i${S+MQGUjj&cmDnzWLk!+F$)ke@t#Y`_$w1_US3>gUnk#oXr>L zBBJsqEt_YF*E!nNl+}@ZOmdA+j*Ug-#&s^!$q(}g(~i(L-+KGak3Rh1!#oQ7Jbzs9 zqxn5?CT|3#&8+PbP9|pdrLmxbjh&9HC)kD>pjgj4C-Sx&uc1p&V!ZoPKk?`Oz5q2o zi6MC51^*@-b}&VPN*p}e`1Y7BaoFu8K{uiCkt+$jEGYOShs6NQVn809o0w#v*<_+q z0Y|ToR-1ifEshNfUz_N)gVUo(V)B<~$F-*fGOh84KzY+?k%FR$i%=yzbNF{fXO5H%4|aEWjY#Q6*jUf2k%m= zFN4bTd17y1=Y5$k*W7`d<|D(O_G7`5{4s%#^4XuWDT+fhLc~Sr`$+*lK0W-Skm7T! z=s_m<-ZKb$r(;BRJb7cF<*v{Fw;PCO3}c5U3wx9mxVw8vPJv6O!A<_stvpFXz9MNQ6CLQuSvq>iBZJJn*2cFu`q?JIluc%G@$RA^3D+jN=v2sF zxopyhvp85V*0x=Ac6@AvBcBa;;k3PWJoH)+*G4|t(*nK9JMX;H#+mtUVPa9g#f-hA z+{S^BxiVad7i?VY`bu=mAzsM6lm^hH_Z1pLKfG6xstZbe5qTNZmF|ChYlYm{Nyq^o zy@s1%FKw{)^0;9L>krqzq4Om@C%-ua#MosDe|XmVUVx9z#Olx-zamTibSQ_Xu~eTI znhiTC?0ZW$K29?mQ+_by$@}lU`+>)C%Rpzn=K8*$8D1Vw8r0}^CqGZ<9PzE{=LBZ1 zBz!3d%p3ZQ{qEs&-ymGs`CZY$gd~Cb_=o=FPyUiX-oTcS`;x?79JOr$tS`W|C51j7 z;}G<4k^~;iOJYe>FSO)2j!O&)gAdOZJdz7e?S-B$FwS3@`ih!8^s+%Amri`-d(n;7 zn90Gjv}%2_6}F6ZtZ_kstoi8j^)<{c_nCEV0Xb0fy&d)mPQ}a^WwGlC+l)g3)-t ztX?&@O-XO=2Lv__^L>H8@}K@kfArxa-eTzzdAT;p<=c_8fnWJc?^Y+EJtwwTy5Ui(wyB+YIxscmLJ+ zykPqP&9Kmsm!b~&!`$`%CA*fulq7gpufUcB0#@+COD4RMYj=K$nnAMN@Ly`oRA7e2Bi(eAdZYiZ#n6kT|YXJyj0GVtTwF<4L(crUh-g;%Yx)2V=M z_|$OdCABtv=do#`rl@hvpU%-oB}&mgYb*h@%XCPc`` zlDyBq!}b-`O>C`ASF#;L+;Azk?F(=TFM!*|i%5M#B6MH3^!M9GU$5U`M%u-o@nnGU z`@{UM;O_y@_Fg@CSF+IyQn(S4+WdOH=G-+X-TF-@v5=sNu8JzU?eHA~*8WjKZ~rie z&-u81mK7rMuVps|hMeIC9z7XgWgc^*Cnu9JY!qW3%TsA36FL}!2&5l5hDJaml_(Ni zzzSB0B3R*!3rtOhmjyx631l?8IDnBMVHZyheEk#i=#tzLc4h63$$B{S5(h1Ll1W)R z=_Ox5%U&>ccASCZAp>q<+egbTJ2t!a#^5eOt7qxe^sr5_c(Hl?N0t{py7*+rw6I<9 zjA!i$;e%iO)qnWkWljXEnYzqr72SV3WC3a^TTkz^py17Tg%bVMq=#ETzf9(h_%ui9 z1pi<_h|h3l1O>btc3;+uy~9`?>x(toLa_Jx(0#UCIAUCEVa_SXI^i2J^+|TjtA(Ai zkZ0yhUP|WZ+^AU@*LrCtn-G^XJadVFwYbA#-MF3eorlCveh2WFxdi!sK;rHCd=Ke_ zC6IiIkp~h+>Sb_g-~ojyoXilq{>XJfx3kexMAp>jcR%*yKht0Hl{5l*lS05MYDp@A z&?sujAQ8}OFMJac4xNNhBqAJIHjt|}UbJ>nG<#CO3%3gnTDNH05^wNP2eorJ7k~et1vM?(8WO!}D^8tNqGlt-TeQ+1} z+{h?r-%O!MXIrZ)YUlVQ^-TAPh+C>{kDsYJm!XTeSBtME|1FeeL0?@NSv1#G>5CVvR)lN-AGlG+UlOep&>IJ@8cN`Zmvn9y(M_egRmc@}7?;E}T0d zGdaC4(98@$8CJ){QGk&nq=H=3x%)pNt7ouxKlr0R{!99TQBdNONMIYh8|Yw?fG_s7 z3ArQ0OBNpVYJG5RiAax{3^eLZuI)=Wba=d!FBn@-|C=; zjjOOKc2Pn{t|IyAVvC|p&yF9RG0?#tcnbsB;Ja{@x%}HwU#7o6yb&<3 z8?wtBYk1u+_k>i&ef(GN-O9UdU$`osQBjTHp1SrH5*JKafZlEUpa%$nVVT-Kz{0$x zzn28JbQeL>I4Ju2D)g$jb{F^X;rzO=v{gnqpY{J?30SvNQPC(7^*uGa@-K6n9dVcn zU9(1)pa^=%p`N_@`WrbzkCEVx@d?I}FwB>>Tb4)p5#la>xjc5*Y^hC@uqK=dI3`v> zNz+O9PH+o);}D#Kn;l*-gGqu-h)v4H8K+%La!Nk+UMrJ}-ius3l9fz2FR~?!T9R$n z$0yhT03ZNKL_t*2z>!C<9UFe{%%j@`Up_JnfVEWE7Kvm zRK?#zHzqFlmo`Lj^;4`&7)?EpoA(oAg{;+Q3_-=ME$XViSQPMWd&q9yS2>XO3FhOS zD{~it)pEmsZJr@d<`z6QpJp!w_MDZE&+|KbEt7y9K+ZIe9_8C&EE(UZPidasNE~y6 zjHn5OCEf8x=J|hymIc6Lfh*h++<)RAh#$r+TI)Pj$VRe*yzzc{9>QWo>PQ^>fhw1jc+yF;-4X&ubQn#>or8Js@SFen-}D_n|Fb{&oq6sqYjb9V)pxqkljI2h< z3$(hOcJZYXy-_^0dA}`PC<55}f?M*fFNiiSP>o5k(M1iFCD6Dn7p`02wl7=(jMOx4 zfZIf0d;nklo&cAZxa3tH$Z1TqXIjufZY;ni|q1EzHQp#G5wLEQ9ChF)IHIE*C z;rsvif3-%lViQfUZUAqBY|u)e-DNkpB{zCS(4&={cy|Ydvy+o;Q6Yn@U34rM+Gti6 z7+TJeY@0y(8C!LMk%dRmCs(11425hjcy_U!tqOkE@>}qeN5_k_;Pm6&g#aD<;`_eH z*|EXxBD(U>;w2kwb*=sv>&7IYV7kVfj#B8f4#9(;fQvZw3cTf8*d+(i9-!(e6cz3U$bWnET= z{O@1gwTu9zjG?}|m=xyO0iX9~d!jDVhPWh$$7y0NC*~UH5V=kkd|sQtk_0-2Hd)ky zSu#mTq(Y@1+=*u*5?f*{Gj6#BF`!6g3fjuJ*8Yi(l(TDIV&PmP96;L6%A z$=JqLIQ%Xz=uz;)DRhwIR3V8sVewf&*sdmT?Pn|fXvopVi$|49(C5Npo znXcV+DQDfUk@qCx zC8)}iG=u#Aadt1g-fT&F(9e6$Th(3V#uqSP;h{a_6EI_9g!}~<7=)2528bCF;^GUw z(KZqjhD;eT1_@b047!DS0FnXOz`(-YLSUP2->}=b>QvS7^NUzdX8!lyr@BnMZ{}Jn zE>FZ-8L=||m%X?1!|jZ6x`j;M`>)<>VO~p$Q_sCc>Cd7~h)^?A-L%rY|tQ_~MWL$zS}XK9&ncLG-RIVI^iDr#Q$Z zt-_$!jX*)tQ55cIT5|dd29HgXzjsN6hKKl4M0ELpsWAFf0iT?#eLnP&IFT`a@8mGb zrz0LXEk<}xG8PlLSoFItu*7A4`g~a{1lK_yKB{eFG8cW=HjA#0e%CI%mrFYr|K^+* zh6BH+M>1hhRn+I=WBqJ&XW5JX7I82q4TC-oq9UO_v?-HfmACfH4191iRGEDD_f9>D+H~)ODS?PkBD;34Ax3Q&<;_^UZ474^k$=sWl zG0bZ(m?v_I`R`qT%d(kE8hM3{);>=->JG z{`fB`#sqxb1&t-DB63J#$xcVXYP%^&TGWCjQ|OAwVJuV_#tOupS7EhS_%c>l32EZc z!sK5c?FHH24Aj^Z6C5plKDvo$#ez@A9M~x~z7W0w7K2#nij`gqwS6{p%(=QS8moDc ziL-IQN3go4=1RA5vhRAp9hyrUqmWC#=Us5$8jpUJrNt{um2Qo2 zMg>Pl3Vo~HD2(`0zRVbf`}BwLGtpQ^a|1X?8RHkEZFTDCZMzOl;*Mo>9*SGQ*uUe|)Ic=7lqH;2xhjXwKsINeaJsizY%JQ(H) zgYWz(K)$WyK`s~0I!149Ck)<@yplIhwt-w(%2Rj~p{zTVxEbSZ=ZSr_n`~>75#Nh? zbjR!E_*Fkvt6P^qao(z3GrE9k@zdHT_BGouFSKJkdg49?wQIYQV|4-Ta#m;AbdnEW zC3n7?>+1J`sy|BK_!*qN0=Y`|>;mR`B@c3^iSfWt*HL>@zI8HzRGL@zpRXtU@eqS* zYCRcL8QAEYIVQ;2cCM?)cLMUZ1>MjTf0FK-fB%pFnO~8365SyIC1YF4y)#K}g=5^r zrN>^P>!UvA>$8C?sU7ST27*(cY`gK$Gj_12hsfFEDA(C z+hCqk*iEG;d-}U5WpBRS2~_^0eKmL;-D=Cfik|?h>io1%cF_hv)KGLTRe+(HP;D+@ z89%M9auVPo-FeS0owD0rO4DJ*w?qGdG6or!Yy9b7`9pvBPp8C^ILWqEo;TnZ!v}E@ zoyp{SLtTf5w@#h&3wR#9&SKUk0uLJJS@41=l;0qd-%`p?5DK! zI+kn_9!W%mCpi^`2}*GKT4P5y4ZLm&iUkHdIxToQ^vUQbred~G`BM~h*eX5;zs3qk zF(G<3oW|Lr^OT^t#0{r9-8jV6;)B~lqiYWQz($Rsd_L%lyZvq&Y|M);xv_ciA%?D_ zIXc|jwRB;U>$9gnwy{1H;!)2VBzrL@y8DEA((6h((x;NkG7<9|$iI|kv~)g~`; z%|dzSK5wNngLu7mPk-k4m`olC4kFc2pHKoK%`T@$GP2~skH2)sPGaOK!#V9ag`JNJ zzw-P0=VyF`(oBEPk zp!pGB=cf;=M88F=&&CE~9tbACbokcyk^nyctXBJjv&1LRMx)$XloiKta)iffSFsG#$Jqx&%kFs?*y$xUtQq z*zjR0C@tcr1qYW*LBmE027ZfM3x^IFY&PO-(XzuYb}`{U{T9mx)u#qJ-I(y%)(70K zTV-Nv+}dQt=;)h+x!F|2D;_NpyIkv4Po8-M6Zq!AUVN%9@Qf}w?x6}>v}3JeD_FhP zQH`~W{N%j!FI;i`mSh4q;>pLOn;K8-2afJr z2XM+;%vXa2UEW9Xl|1J1z)SZsNe0|B6(1SS{8>G%p-}W1Qy$LG^ZxpIp66Y|USDA{ z%Q!g^n>jQ}e`?<+0IrdJM|Y286o+Fps>vuYOY>$!o)E@H^C$kyfAUL`S^{b%wf33( z5;Cg8=aAe4C9xzYXD?y34#nrL#tupD>a_@}r?@8Bqo(f0iae$93lY?YyK;#X0hab@yptN^{<*&$Y`F zoJGpzU5bU5;(Mf~+4u!Ri0<^m^I~8#{zNv4c`@&|iSA^@5n%$4Z{%G&%%KfGPX_*Y zVC=fW<0)neL$W#aCAfZYrT`?agjCQ?%oc%!Rd9-%Org=oZ%bajfY>SoKG?Kajk72- zX5Rv%1HW?oZa!MN7ENEdj^Lao$~cdCF7I4xk?$QR%mj9)#=~$lcbt6j zUfzSVRr$g=YvV2L7ycuR7ydPvz#op^bn3gT%`?Ofkq`ckWcn(vdB z4qNi-i>vc{&T&&DuICy?DLrS`JZ0&jd3gYN5z*Fa?KYPnSjiVRY zM*}flk<3;Ut&8!IMWwGw;|=R}JJ~(qzN&r*dK*^xqxLQDhT`We%^ksr@8Qam$&xvg zpAq;oGf;hD<+_gGUTc_ZpEv)eeyx@@zFSCJzjS--Eg_6vH;)G!{uJ(9Sc~P+gJZIB z1_UN2d6bxLPeG9Il2GEgiz!}-%T|ISIucS6Yb8HD1*L%4vXR{Q9m9id6L7#xY$Ml) zC%$-L6`O2nFWsZOwsNpDZ`Zffi+m+s1!*fA?HxSN z)vVf#$0tsYYTfONKK3wH|J;^t<-1oiZR0QRxa%w~x4>WqC?^RhNsT3~gp;5Os7b8YBrqNPflZ&TyPqPI z_~dNq?i%c)zA;h&-E7F&(Pt+tvDjoJKRx(x5j{4>?DX*v++vWk>zJ(ZwFtG1mmhQJ z9L-N02v02J)&ezNxP23`kLvWpPPNgCc6s#^sIR-Rbyvqx5EYtj_iMlr{uO;4P0!Gxqc?|O-l9k zSwD*11ib9ub)T02Eb=dlFdAu!)+vd_`v#YYilpE=eftrwGf4Z#|MZ{#C4oC6dIFwA zl#B{;Rqvvgv}6j1jJ||s-#e*(AAjj6J~k4%Hi|+qz|$gyPY=;W#n-3D#}mJWDt3H! zFrNey4;HFT@oawPgRj{5@F;S2}XRK#1NmgxplAJiayYxaqKiwG7dJ;mcRWXy=ga9xfa8r zgO}0Wt4#ag9v8=SW^nqZMEQaZ|J@8Jd@C`3xcU}7n0&Oo)daG^+o_H-S1ih_RM z=!5(8P42D<&q0nSUNIT7Hzx(n7rCNDjh(JOJ8d@>eFq#Z`_6?f{&OyP-CW4b0kMJE zxWqt42hSYDiT~ZK;nMmR!eP8N!+l=(oloFCq{*8|nqZ^!G4iAnx90p?(7-O{r1&N% zqm5$$-o=E`qssj0FX=zVKSL1@GF2pLepu7_jHsE_%+nfFAopvjEYVH{Ql> z#a)YY{jcBL9hE4@pp)}C!1_!6=1~IZ6mg#~u5S_Lx!)rPWsePFh&F@yZKWAc5J|fE zWdhoN_dooTza+sptHZFTkIz;43ZzAd=MG0#0U$g&HUs_M_1)P_$VNae$;n~E!;|#& zYqOw>&QvdbcCgClTd^TnKjQqjklQW&9cF zqX53$5a#%4J02S6PU)Oqd`JD$zxs#&$S?YpeQGhye1|7Fsz$v+cU<4-mA`m8|sp`kd}2=l&F)M0UWVM^+3;&E8$D*b<(;jfPKh#l#mM_$?6j z9;3DF%7@oN#ph34HUWJ+HgwqFd2&#wV(gPmHzD%Qq1a;c+MjIwoss~43OV81#2L8>-btB;bd_aT0KU@9oS_YwErsYP1hsxKFY;Z?taOkNs z0CDb0UdFfTSe#NGEDUjfKreBOUQWYYhb#ZkbhIP4f2|tMn&~Z#TUt95mc3~hWA&}r z2jFVnBCnv+vJ$)MHMoG+Th9KwY&4=j{jAHU`2)N8nYer-C%;%fzx(gUKXeI4?+xe| zUwzt-1lRB7W1QwMg8KM%KL(89c|8#vQ0sPPpJZG66Y&KT>lA@61`R71>Fixj(zRd| z3gS$HO8ORL3k+Yf({U(P$tp?7Bs`+8FpN!>ToEcF2RVOaik)pYoF@i7F_QDcruO0% zBe_BmkK$rO7oV<{4|4jb1q}}$iBSRbj}Hq~*O(4@b;+%Pd5FP5pMUe=zfUT3__BU< z;2G2DoWzdcAZvC}?1PbCC;fFYX$V7S-#wdrSjLJsJ4PY0_!7VoUCn_Ci1?(ltkS$w zU7OW$j>1X&mAsrcuz`978o?{;#Sm!dic27?zG01!G|X!{r%;Do>>{*f_>W03E!x8p zpyNb!;~!m7c^Tjd+`~BbH+d32-{WC<0&nZOZvQ|;XUUCh?WVGlnEM9b5s%R(MqVS_ zKP`BfPd;qol$Z9KKlO|M>94Sr%o5bacSuC71XOg|Ca1)ekcx?pB=0-pip=4TNJoLt zci{DjK!W4JrGwbvA)5y57Ge9vVqXk0F?JEnLrmheIcV9;A8&+Q)cC~_TMeJ@LoFAYighN75&Ac1MiPfJAU5O;!dZ!)4H== zbUAqNF5$OyUKS#bV|u}Si^;H`ekaWAS$;q${6Ne@z3VNKiH0A!=W0t$0W(|_=Kl`jA7Nk!c`cGW)>#4?D&Nv7A;aJ^!QXn z$k-gnV78FSU>hqke)-YTZyd1c;nAg|#n%e&>!a;N*WkgP&LV0Grc{4QjK#s8T?{+2QfTc)7*L0X4-d81JrBN zwid?4dGO|?)vNA!ipsm0T)Y#`z$x6JMbCb{U;L2|E`zpPR$eaT2LcAy-f_an)rcOu z`}yIBs*(gE@48&lI`KN>N`?Uc(f{Z_{$)xErbS7&cRhUtK&BOd;%?jImAHz*n2qF@ zxTuM*K=4}_5+07iYH^XZpq{U%VIuh57+OFrkm`t&&-(2KWZX^5Cc#gOmVdFpD!+X` z@f4uV&peC&v==)JGWhhZo3(*u+(WE%`0b`-e)QP$Q9oL^Hfj6*ti)N5n8=*To4M$F zd!ZvM{On1d&#A$}X51|&!D>;>{-OsoRU z4URtcQL6Fb${Tv0W1JVQ7guLiG{Sk8Ka7FdO=SA3uug%@93__|1~-sr2ECIvA!$oi z$tj5?ujD2dl)_Q~HU~0#wZX4meekK6*s_6*Cmw~*M&aSNkl-n9vc_REXo0YA;c59| z)7TofwP91@qqxOl%Rd`F_;c7ywBklubK~1Q%*oi=bPlljsLyBobQQJ@7>0vSIQrIt zKe5clmi;^Fk!fv`Oc44fo{SaywaGU{Hdp9P)MMs!P~6>Q)+^2#NzmB@E~}Rgh?pYpXKgQfhQB8On< z-wTH$Q8LY3(|nuHr#H#J+%G(>Kb8VS2+l&z4SN9gy)beY>vNLn&fxVuYWcXqyJVNcO$C8%Un5L~u^C1wjfbjV@Taqww9#KES%8ta$8urG@&WhOLp zJf|&UgZL>=8cil_Mx=YoXjXCB+pcULR%g#ys(njg^{du)Yu0*Zu7dlhh{JEFRM6AK z8Pdw}KBO@?r+ryo`)zN`=kl}2<7o`o&v_*31om+&Xr4> zeIY>_#N&s@miY1xt)(|4GoHqVZmZv4%%j^8_D0H0WN5#i&S53eWub9vrwC{@|^ z_OPX~m$W)ZdMl07bzPlj8^ullko5NN5NZC8sOc;cWhR{dgHC%SCAHk|_l;GBAC zXFUF1IN0wP!^Gv|8t7cK>_{8WCHbIpIYIEF(iEy{pa8{VhVkr;3k3Js<{;A~L2(%%2&{yi09SpMM&pheRs>EtG zf@tNBgC>JQkVZHw=fj0qo@3%zh0z*!0qqrmeFB(*FqXWMQnE>0Jc%x$(KERvsluS! z!c#nboNvMM0Yd??fhl|kUr$VaTA((a>e^&rh#jvn;yd`ja~OAy`1FxJUyVo6>1+99 z%fGlfFIZxBSdYr!H-@)3-4w{_+c4l+53$h4*CK28Tthr-WxiyHzuAnWiVK@@lflqs ze$aVd9L_C{%?vW+mGwY-edd2pB-=7`aO zUfWvS{>nKv^Ku~lZx8xm@Y3xfOdxgIsI(u_rEqC<*;akomvB~U<~Lu&^V&aO3!JwA zGSR$m=f{LI^8p#FoU#Tn2`@x>GzQ*RiuXqhrd{Kx%&!hfV%?O#Q;eU4OFq7mq;7)g zOF~H}N%foTbo71EN5POGdVwBUlUso)Tso3I9d@UA#z@m!vrDVmQ*8W)Y#uZ(+3?Ot zS)Mg|5Aw7)_NxmtJr*ypmq8>1Rp7&HmZeK}S@YCkTJulc9Dzd2adGE6Q|oNa)8-eTXN z`|y*5@_8ZfcwOh?G2?yVu@~+{F_9_IlH^ht?%s+nF-b@XswGzd3Y-j9 zbtJkX6_>+U5x`R*4s!nZXG@Qc%><7QyN>CKr8q4lKIte(F^Ny{(xU^HEgfSRbYQc6 zZZLQVUkt{@gn_i|tJ8U!8(jxq{P2yB#ABYueaeAj-RZF->llVj!143n`#E=ts7Zjy zzi)d?CTt>1zbPB|<3}`;L7PT=AMmuh!%$utj9kSTo%{3C$BW)(Cy?5MivzE=QQ5V+ z+Qq*V=q>B>XAyF3@zUT;3WD_o;sRyGGUhu#M(h%oFOxes(PJg6H~n5uz~H z+x7I>{(P5fF6d<%FWxtZ#a#3FblI=R|745gRQy)g6=biwNBV=c-wp7w17F|#u|N6e zep&JXmY{Xef@~p4Zd4t7$*Hg;twO@n+B~>rQ=AqnK58-1Cxb8p6<-IhV%;f z7zM(5KX`q%%+pUt)0H|+L8_&ktHvpJm88#gIy7yrIq zUwr;sfBSF!9f)hO?;-GQ$DKAXb8Qs4qfqxgIuh5Hc2{NFMa;`tA6Lojt}d|9?`+4BR=@% z(8JZwn}T`AbnoI(9=o0Wc5_>h5?es~X7eb42{Z7Qkl6wpb!B!G2JDD5@=T*T#e-f0~E7&I<}^zR{<4SV!{rc*qbD2Jt|bKvO7Th5+;8voWaz41c*Eah3F zaE3X`*7SG&u7C1(<&l2g28i8!97vdJou3z+99Flv0!2#eTfAT*|NQsVuR?mD9w)@z53FM$DH&# zH@5saV2WMK7Yuy5c=~+kHzq#Fwa>L9cd#L|F5O7Fj$~p*h&n{`JiiR;k`t1d3Y#)+&vyQjvM|tesTE$N}Wygk=OQCZJd=sj8>XY*&%ni!};{{ z-~0aew*DvCqmqS=adIMePc{#1-5_`yFS(LlYP2huB*}Fjnq;~|$(vev|8H>@j05qU z_A1&IyE~{tX(1Um@g%z*+(C3A}vkG`=2`-;|@f$OFW#T~!5syp^_??S!HxzO>V%M*|mXGJ%o4t*O3@mGCuFiP-wvB>~ zbQRP4$AA$I@XRAzwjO2S{o z9Y0O#7KsFN;oCg2eO1Id8+UxrwCVEdtd7E`S5Lbo2n$SaXaOr~m5Po!` zdTGV(Tc8tow5|uB1OHQ+jW!A=l*>oPma#MooN@K3w@>GommS7l60%#bmuWex{0IK! zKlpF|h5zQi{?90e!p!V)PX9}9)Ir!wLVsd$S^dVJsGZ2t~UoR%7--ak%)osH>v}(rgwM4f4^6~x)AhC`QRIt z?r@@I6ZpV&bYBo^+ZM+7Nc-$pKGxTuU}EoT9KYB2p}gIJEq4Y^pUz8wd?m5rfwr}Ep{@cI)8>z(~ms%HU(H@EdYHy$*-6cFMUbQhq&;X+zOeT9estt2Rt}p zK%Eas=b#brKXGB>{9A!By@vgNBA0ed#}0~5IxHYsaiLljdBU$NGX&&Dk#2iY?| z{t*A-;9E@HJlNxR{l(BV=^O`pvv4zzuV5pS>UFl^{3M7G7YL6E`FXVXonMcj={T#dhR!eraKueSZl;E20L&Oaa8 z;#dQII$yTr*4ezx)mW@_VAkH)!3K#@4958S^kGDEQzBUGLvxxOm<+%=yy@=X7}X{c zS-5)BGdg*s`=oVn#7r)O(W*FujY*6rwkM1}-J@T#&5v(0cmwdTt^LC8QUv@g%Zw9e zmhU}1P2WpD;C#Em<##9lw0&cAUizGPT=EHSv?l0C)+C?mFE`D`KSoJ~Azupk(r*OH z&LLsk@wesO!so|~@>YSnO@w_j1Sun0Z#s zS-!k3L;WQuK7Do{@Uh@mU*$(g^G5IhjdO1j<}UhU-w(-xB!N=)1LneHvfQ|{n=pDMcm9@ZHDERy< z3^wk{FvLZtn~hBckF2rQ7a5;oYmwr?<-b0}+_~!Gn;YB~rpX1( zel&kdI2Qztw|)HD;UrfIES~c1;Z5G~@NEW?P!UK{$?A}NE#wxB#C9M$64qE>0&5kL zI3+20i;9mXH(!VhHc|}wEr^b_>|pYxUpxL3f{ly3g{xIK@aXhq3qLT5#nvWaOwR$I zEgs*UPi37GzBMwY&j%74KEg+MT@Q0-1HUg3=+WWB{K*|K`RU>5#z973f1mcojngE| zNu1Mvllk#mYT{+iVdnpxQKLk@);Zs1%&(DoB=wrjg?`gkJ!+9~Q_cs9??kQ%imOZZ zn8p)={OGj1L;8+I8WW)(;S*vJ?xlDyd&7AwTksa~s2B|6;!fNXL{{yz!()+&CU@pL zfzC!##W?v%pX9Dh;2cIbML&0*d}kmA<9uf4?mpAT+St6on4d0~m9Q!N9JAqxs{XEffhUp(R@ru?{4^r0gL%;Y&(! zb;D>vYsu)qGG+@KuL<6}oB@L`cDKt<^=e$K5M8GHQ30mq!g&&C=TTTI60gZQIIpATb%#|Czfi91hy za!Ohx&}mxjWwUR(QJVwv!QRo)g7b#PitW&}9o(8zFxWXR-P_<+T;8f5nD;Kgl_vdBksgyH=MV0lHvu1S29lq&YFCa8bN9K-=%Qge z9Xhs`#)xt{jO3cSaY{g!)*2t%GZ>?2#Ai5fR7dAq_!Hz>kDnNSWPSOx1W)P^{7t)l z;SIY_5Vu^94(nP@+rg`9Mo-PPeX?F`Z`Jv@Bx{HAsPAci9eOR#MRMp%%;vetGyj|) z@SivTatb5=6hl55%;*1~zWQ$7u}|_sh~YQ+0`a{5_kMt+Y*I;Xhq0uToDx%kJ!QRH zNkWOQ0N~K0uPr==N~3tFxm6f&4&+!U%SqijXn&vU4!c4Ibgx0Up!cj&Y#Q}p4cmA_gqVB z#LtPzFP6x6I%2S#NsR4J((dIi13D=8@I+8mmSfLN5|tk{efeK?!ju(fxN1# z^Qy;9IGesyJ=LGx;PUpseRd}tVS0mdW4~Rz>v4nL#=P7)KUBugV>%}mYlFI-V3)Vk zCvD)x!#lL12v#=sGuT-V_sqo~5D&QOcV5_?ZgL^NAYk6yEAYlKuMKs-zoeNC%bn#&zHu{a*#%oRYO~6emdigsO zKZxDD;gBnjHL0V6aB?g!_$O&cvGP&L{1N~bx;iru*whpDC7KRVkEf8`q07J+(x9DN z+^gHMc+r3Oi*TO?iZR+S+j(he5smhde5|=^vg&WK2YgU!t8L+f9lp~zeB~Go9oeYe z@n+~!yGQ z+fht%MAux5%|#y;e0XAEkH;3-An3Qi8WSCHT5P^rlz6ZdHd~lv3X*N{>(`jRvGu7A z%*H7W@xZj9_U>*hE;iz@KF0iwpXEm~W#_v5!)*4x@DbWOYC6Q4E2q*iIQ$WfLV96d z?&1e`<=TYDmZSUy6F*+*yo!v$=$+u>!hMVJ~ z$9QB6E z#8Q8-*wa_IVnN2R9LPM`iCJIE7U_$vb1yz0eDZJY&7G}HOC0)*L*IJAv3B@~E&NG` zJ^Sm>d1W`>_*&<8eo-9Wc36ex6pnVVFw=cDH@~LUnI~c~_;;HfV|JUrFLo>KnP`=) z2fE$Ou%`z`yY%NNAZs}ROgvx)BWn5wwsR`pX$Q+GM+1gC{6~A#Ppq%<%L9xmUTskK zaeO(Wa9QA;#hXs5G&kxj#VN+(Jz%rm^Lb#J`KSH-bKm{>*$UuU$RB+DgKzv;kp4Uo ze7%pFaD65C=dwZk{CB^XHvxbBx=Xr{iob;>@g$t0k+>32K{zCzf^hI5K^3IL$J1v& z$q`(|0vnH9!W&C?*b0QKdgN>s15Ez(@emBeR(x=(0}D@F=EA;($DWU3;kN+kvxRMr z#^wyeSf9SlpmD%KE%>fcHyUF&olj%s1BTYoO_zUb*SWyfM{H5A51V~&Cu_2$IP&C^ zMRG|0Y0qFdl^wx~663iUUaAA;M25i5cLuI1*ztM&zDo7Gqpp)R(AU1#<8tA((YRx{ zd!ynMxBrl;t^|HWPPF(>?{)1cJ80IWOjk z>%qAZ_6LG~{Nv<}R|9$d9s39TuBX2OozL)ZFJFAAs3im1_YU__e?Jx2Hvsd;2V=8I z*Lf)%B(Wuwgq7eDu@_B(O1>sL8C^Uwq$O8e_;B#x_O3++liVTEn-Ka4u41zp*i=kd z0hCYXU{6O|JNk$|zvjjcwmx5CYO!_`XiR*ugHNW9+NWo;C|{p1b9K}&9CNN;`h3=J z=g&sJe&OTMbC(x8S?AleuHE|1`kxe`I|h%0S>d?>HI?W^aVEE?NZ39&r#sxmO)az- zZoTn&58L|yY0#toA~JYk0O)iE?7hoX8M~*sDJ)c72=`*`4DWg#KOZ5$@xlf z?m$WU29zHg$R`87F1(2+nG`f?g28HE5+X%FS29a%ccCU}@9K(75lVhMICv7+#i4Hu zqqZ=~>FY~s_DElB^=YhN#G*)w#Sa@XlfkCTCmp(Q%7bBEjlOIoxAe(<@;}zVeIwbScp8(|W<5K$8&RAd9<2Zkb^_}O5F5LW|*z;206(|nRA4{3gwY$luJ zkA{zeqB`nlL&yT0?*~Y*C=9aALJ~ukHm8c3>LMtYT-UKf$ z9KL&qS32_Cj`rAD^!9O%IC-e$2ti_q`hhxl3XRCg5Nq)ZudxLDxHNVWS z5Ja|oI4?Gr&T>0E7*RfWn=pFVkwnW9U9UI0lbI{vu=j1`1L zl4Ob&Nz^8!1eEmdNOUD{i-(Q^lc?kpw0Cj^ZJGJj!eL(>Hj=!B@YE4QHx)%j2Z@hw zc4Drt>hML*R|~drm_s)iIJB(oU;cDflq zUhiMVtJm`jJ8^i=Y2J&nK8N1w413<3KDqJGYxgofj5N@Vy|HuA-Uv za2Ubr0$gfETluv>ml1w-(mD1kKI4i{yP-b;UIYT&?{GfL001BWNklahY!n` zJ{}!$bTebmr-NQM1M}jS9ELvL=g;$N!NCn?PBVX}O{orT4*o5_+%1x;RInw{Eq?ZR zx#25$&#B~YUv$)Opf29sy9~&V{Lvlpu-`H-!($hDQJ<<~JL@#k)$*pH;WanYpCx!K z!&t6{b5~;eSFDTjh~-#?1M0@a9~s>fsBu;%7gt&P6hOy1B@Z5y`~31^F!jFL9`R9Z zk~Ho}#*Z23M>Zb~`k3+bpNXbOBv|mT#3Pr45>>*}k?@LyOcEo>O|CGT&~O}?$>@I>S2k%mQ>0G!bcu}~l#`vLe z$?wiXT6?XdA~|{urZAI~K{SqrP1i2x-tEHbua@cClXqHZA?)2*Bh9HdzE*};XSXz(0t z%td^36rw(VY_-PK<;MYozM`&w{%j!PqHi5qnEHIN?K;7A4e<5hXz8H0^QmrQ;Y)lr zqsD74V#Cv-#`*(2`weG@fN&>hw9|j+8TWXwbyy| zPqC@YMzhH&$vBnBl1w5>PD!Zv@Qf?h(pL-;Q=g3jljQn}36a6kI^5mJB{6Kpq3Foi z!i3X1IDQKV57EJgg9itXJuG}Sc;Xg|v3VlJ%ig>cD83k5wC2~C>C^Rl3fm{+2X^Cw zSv>p_Ootd77n{z(CSi>9&Am@!;%*-%x%u*C{gyV*oEHb!;*q<9gjVUnzm%xXu|b^S ziU$g3>FVwK17%<6HzTa2Crkgpzh!SyGdY%zNZ)ohiUArQE8pl3?y5YUyyrY&FU_j8 zCD6~2Yq(4KQh=A`b|#83ej@CJVK=r<(L4eiM6>bU-?q8<6#XuM$R9 zfi#)*>9EtMt3Z$>HFg&!m)tfCeLmsyQy+8{ie!gxtlxrE#B9aMmLEmeO#r@Pro)yG zHsoT#FTU2%&BkK#MMs}cad#g0un;|%j&3|1v!ho(=JA{lnfZ!MOIEr0bWZ%?i$RRt z+`87}-~I0VZ9p|M^A+34E|=YOaJOVWmiaV6u6Fc8rnAW$)V)f;^NHnk`o`|E44 zXFSG|S!@R+)|@}yVC3qGdI#hJ2e2Y{t{oi>&9WAG2AK1v-gKPa6Qj}eCbakA9pl`HL&pDhcCt z{*Uv^K|0P)5G5hK_T29Scp2c=hWX-<1VfUkcSmCvpoKwZtQDz*m)sKGSb`&bycVv) zgsI>Wdva78xC)c4ev3ts7-umq8+LePun;@_ZZ!J*+8kinT#OMc@rXf@lEXr9@#s3} zvb6?$l!~eCeAv>3)wsz#F~C&N@T|4!Y zj()C0d!s*Q7wfJ576D{>Stj%bkF1dI+VOF09{r7Vwd3}CF+1f0Ygb~T z%Idttwj`R3Kc2WF5kV6tF9*L#j zL^gIveo5Iv;ZXq<+eRQso0R0`v6r|lZmmO6Sp|Ap_KF0C0+sk|`NU^K2alW`UBsRa zxkFrZ^x2cUW70Qvh{+r}KlbKcyxw8OQH*X}bQCW??6vgW&H3tP#)mi^c;bP954Yb% zfLC3u*kQ5}7fj=}aI8n?&%P<{!7=`R5S_PwAT(F}%Cu(H7{+!GfJ`U;;w;_kMv6V0 zbDpsisx_+w`po`{R*~*ODdVB=uDgtx`*hc|mUUY*?LIN=I*t6Y6V}uIvTEmoeb;KP_Bv{_;%j^AB z_A(&fZJ(b6jPkqzxOee+e<1NlV#zN#wUVoky)c?^HU@I~4WtD{CSfHz(n@B!+7_3w z1JzbvqALn9z*ZbBEG^>0#-Vi}`i+krUk-DCiCR2j5=Z5Y10Rktxww!%Kk#jUB~LT( z;o`IH!3JJq<_p1wORt-gxxlt=eL`Yu9kg8^w(!h{J-)d3Li62^%zY?rWdAU0ah?b~ z7tWUh+;}71NA(Qu?3u*#4T8BhZ!>VCa-TLqx61aKj8^>41#*gC?_Phaju>61s_JBN z)8sV1IuI?=Kuq`gynY04^&j=KJ_dI{I-WLQk-Y3~4?hR`qvizk5KT}SUy=Z)|19c< z_E9?#U4pY9JDunNSe>X?%04CTmx5-sM-HJ8MqzVcUt zCXqOBjU=C!3&>b9OFSew@g$!l#+Ps{Hhe{3TpN8l&xGB{>?Q+KqDx*$Tr7PyHXV00 zdM#ct>9ctjQ;S$Zun~*9Fn{!GXD;MobkJ9D+7^>I5IzjPQ2lK_@AnB{xziWReDUbQ zF%R>Bjo^vRxHw`Hr;Pv^H(t2xYeP=AYxH(~>7l`ns+7+gz(2}MyX?}3G5IJnDLP*- zzBg4F9qFjxE@vvGvf-^>&YtAgu<|t`I>N;LR_9=(iLF?uzEWWx{1!y!XQGD={0I8g zm{>AkQnR$N*#D~+oC*_8G_TQ()813A&vIJb?H_a?6fSxWray`|*JZYJuC=%C@{4?P z#@G+|MsvRu^bUKR_`&~46tDCB6`)Dr>>l5>DTpqIcNOOSfq8#{#iws1ACkcQwN;Q3 z5>KLa?Ik(BR)R}PMJu6=*^~G2S@P1Uy|z5M`ihE9i(O2LrZLc=>uA!O-}9+K0gHn! z(u&<7R&5KFOdR+y`L{W>nBnj*4tDK#4vmM*h9M^LqvDdmf!Twv-tEgXXS(Lnb;Lv3 zt~XiNfPZsg=Y5>CQzfz_uLpBsGhTXaXH?chWBEA;=CG$Mz%109$&P&dRrO|9tsm6}v+bAxWA5$4=YLLmwu*J_Sf_ z1wjT^5i|}7-$Kx*!wxGCubwZ87=9b)Q(;Lsr%Q7BM(Z1Ez z)VfR%872?r*S?XwS^M1d{e+*_{;3NIlRpxgHU%5(yf|QTyFMUvGa>6^ITKvVPzjUN4OIxVD$KQ?g5=!>g`+<3*wo<12; zsC==}B6_uN%;FW7LlMHU8Q{;NXG{jySS&UV>qG}%-yHZ?xZ+|13uZSP`iP7^EQc6N z-LS;kd3GJGmDtRO9h_bxu^pPr8rS20lO{6UX?8alT{)Fmt*{!A99=q(?wCaXVx7*` z#XRvd2;AUqon(Zf8o?MG&Iiz0uV|c!TxzwS_LaLeG4qUcWD~}#7DJv(@1-O8fGz6V z)=~~V!3uh}a4wCzqc<+h@unSI&=Cx0*0eI(mS(Qhn9rMdKOWuztY{vC3OC&y;+fAg?F!R!=qX0Z5Qb>7l=U4bW+K+ z42L+_$;Kd@{916v=MBJt$)kWE<_kbJhSdJ>)6K_%pT5j*1oDw_lU^aV@Hmv1S_w{v z6MZeJorKhPG`V3(Tm_=oVZqk6XxPD${3RGjE6Iy3*?dJd{lJ-Lu1`jXbmoG!6TNH(ar{Oha+`#E>wP}P;MU>=>V^RMN`vAwB=8I3 zMRoW`OH&iCcb9#KTKNmWDmi1v=B}4-(Ho2UVHdp)+m6oSwR`FO77P#&7b@q&c%seZ zW~s?%wCeNIf8NBMF9CVIe|Z~4qshBXXru9!m)i5Y08`NJ{1ZU>-_36TT6B-4UNgry zNuIwUmc+~(V@Xa4DB0bOkfM-ql9sJx(?^oJcPlc*?atXEVoTp4@#(a1`7kbqKHqI6 zx-nAl^bjnz@WiE0Pr*3w=;*U+D;E9EOP?=%E!}QD3K5?V{K|{fG2dMmGBI|(WZeX` zoj-XW_4y$yMxT6)ivzRQ1P^Z4xMMocO(@gZ2lPp{$r*dSJNFg=mcp<}9M&wZ>^%Fy zDvn-71Itj34O&hWCiBK*p+|5*oY4{0g#S?dU5YOd)td^w9EE$SyAE;tp-hNFmvkrA zArSowY_)NpD!6A{_NDmJ`4B5iQyN6|eL)Y_?2;FYn_*9f?vOYCzRsWfKE;oB`_<3< z^ZlLg%zTK_iOm=J^WeFoCSiu6xD(xI?&9z3caOe#l|M&j({9%cGz1t*~T#^jG z1>6FX*pk@wr*Euy>EY9p(B$rhuSJrXj}{VrGCX(f+QVpZG|tAP_#2~E9CY=& zndm#jhV&7??4PlVkDUXKwsIRp=L_qJDQ=q~(ueEl*ak`7d6*yj`qIK=+cmIecwIA3 zAT50S;_Vmz%qfUNC#}Z2)0yy2JA>(L^Wb4*7z8Hg*j|UL4RYxkpH2Y$&uFr9lrEhb z$;e#Xt&}p4pEs}t*jX9H?hT;fx3VIbfP^!2G-r-sw0%flunb-pM{$}rf?}O^7W0Wa zSSuXMocyoZsQ!2V?O*uM)0rj0AboDwW8-wb7&OZ`mbpdWJO{!(zB2=-?Htevm@dP307SB8a$0@{S*z+o)OTewZY2_RT4)D}hg zEg*JHYA)!x3o5QAzL<(Dso9o?uNZ7X`0(fyQ`^GQx?AEY9tG(r7QQ~2f|NEs?3-6 z!f{>E#n|p+_+qzC*NBeWYewkk-JMy=u;=wk*c0QZVPY)jSdZZwt%2AR_}j}m+cC5m z1ES@QpPcCObe+~FXY%CAK1P=t%g^prgdX?5llK9B@WXuG9UNnu!#DXRps@`g2=hAw z@|BVNAjv+4OKycN0g;4j0*b8#B&pd*LP^iY*xk-pk{YwsvX!XD3YM{ za+>cMte(;Q<8GZ{4J99u*Z)7sdv*Ia07nma{tqnHh*!kL*|9x!9iNZ%2x5g zdSZ0*fT3T%=B=<@Gq$kBVh-mzPMp@7jGd!v%7$L=`jw06tIwbF5im-mNn^>gQ4jB2 z;Zaz|X6%EpZ+xZ{Fm1`n|Km!-MI-=Noli;-n)EwpyEkUr)LxY_)$xj3BUj~vZ z=l>Y3<(OdaKlZVlhDdk7@F#tTLv)D3ZM=h3roi?djmaYNGQHs)9lAphC(olq&oKd1 z{2bLLN@tD?wmKpMTHw=`Rn%+zP(7&6rfN@~{-WkQc&B}%Gyz?@Iyi^HWC!6AB&YHQ z5~fXz?)eemtjbWD@W&xm^5Y0reBL!kapjTUMxfnq2ksYv=5@dC3FO^>zYa{{K=YEI z$q1@R4WAB~I}g6ZZ}Rp|NY4Zu5|@sIHCCWnI!$g#YfM&oi@ycK1`bkO@EpBMv$q-1 zS2$wBbLfj1pDzVgJs5Cp2J}kiM-R0n7YExu9pRZHY&`4J4agiEs2i3!H+Gu|q9ab& z;uDV|hf9~gu4CtBKCtjx^svMloV_1tb3^>W4}SQ=biH>J50hq_Y14HYHuI%Px~p4V zjOjZ~rqz)7*x)MKQ5^2mINaCas4Zqpo^=+p20 zXMTsrjY&>LDM68BY*I^9{U&q^MN%pZNA2iIT7}SrC6~l-V9-?*4t)MwXl&i3>$`GA z&%OkM4xVBWOXFwLIQXOEU}J^pZu0EQ7CJD@OB`YlJB$`3zcAS0@gXKY&BGkvv!|oq zO@j_w#Fj1{_H6a}=U3mRBqni+2~J-gJm*R`|2A`Wp83@fF1%D4cb7b);f(%@sz7J@ zWXFv9sNQ3Y(4>d%yf~nTi%#e5c!ft{gqN39y$n`oRR(W-$=XXr=NizT;czGV)1xz9 zuKA2n@J3+`uk*-m+%vp&%Sa2a!?oYw!pp{WO>9J?w=CV7osiN*Hs{~?^A0II3u~j%?svh5DwZRu(^;)#BIu|x@#lvTdk#5(nZSl;< zTwt>?Hw9iC>(cneV_mvVjfG!DZXV)6aOgHRF?o+eEOh9b8#z4dwzbGudL@F)CC7X} zSlJ{gV==O%=cVlyFv5sXjB>`E=8QIVM)FXmyPEN}IOBpTLvMKv&N)9!sYfA{_NjAB z56>uME}9&fgpFGVYv=`c)hbH6wrx9Fg#*?whk0<{fL?&a12P@nMl&ZZ;Wq6?Z8$pz zPc+xC9W5Bk@st1gFa8hz{nq^yyQew7;t%Z;Uf}`GS`5s*Pmo_2_9=OjdwDuZlzCTJ zv1fM}vkih>9_jNvqp$Ktp`{M^!sdF=k$j4s^CqoU;z?*alF`vSEjfLOs+Hgp8PSo% z3WA;_*5_9d^)5$GLE(`(;8Yhb8NcFS#|M7>h>bqG>a#K4`R{zi(7D0mOG`&VAvy>i ze&+;_UvhkQ)wO{kcyt`yd=z;%7_li}dTi*42Ni>Eb-G6Uz^e}5y#`{*k))YN!pV#Q zbjs*d8?CtCHIsQO&2qKwFf+IsSu*M|P5)6acag6oXTW2AyBsr?3g956gTjz>+VL=P z9mlKjayC7T=#HCX#rz!&-aGEa81Zq-+&FDQ&+1HfT<~|+is=L}ayIDO-5iwIjN*W& z*E!%9MAvU|`u}o#otzljaHuDzzy4t!8|#aie%r~_FMpg1pPRp=^G4YgMmCl7??Lh6Z{y;JjD5+x_~OSAnuNkzYCEGzw~Iq(I7ju^ zUZd$;d9#{pd?2pDYx98 z|5Sbx$$ohSAAavlS%U*EadJpX})j!3Bg+H6rUgV7Te}w9JsjbmV{~9E@7LCGiSG3*jAJaJE z7XG0o_<~1BoMq5#SaTtceXS@QX<1s<$KN|Pli19I>jnWJ2Ui=^Wiv5cqi^ffFt`DN zvVh;FzkJ#hU+DNRe-KY(^zg4E!f*cC|NVdc?^D+NMlzsjXG*E*7w~X5{h}I2`6$r) z20uwI?PrGb1dzmrg$9#KK_NJ}*S zMgt{|C+6y{w<9=KBboT7cVQoXnqkdaBxG+d+{h=InKjMZdO~~Ay#c3p$-V{SU=GeM z>jf~eWK-$Lshv5(EhaOl8-Ax8E#6jW?{zQsbBg#UX|kZLzy9V(8}4^|Iayx))6hh%H`;U3ILhzPWnOgf0@RSYQ`3 zS2Nn`K%9HUVtA6L zDa`%+e~N!G$LyX>Op|yK{d2$PpZNT1f8(!xEfJf0OwPI1yd;#bT$x%n7E0 zFFJ7evk}$5HDHU#9kAKMVb4e9^#hMDSnlRF3&f5OEgn7dLiDWxALe3A$2=P&eAk?v z{G1%ozexWiD_&$1|FUVG*-Qqn;&z{gQ@t3RBzK;63p!4YIizlW($4#vGp`Ty0W(OTyPA(`oSGmxx~XE7VoFRrA9;ZPuoh#y#rp#^3xY}h*J;IV5_kc*2g8GDDZ0)=m5 z(l4$xMD*Be*_w~BezC;HA02%-2o^GKk+PxN!X~#4jh~DU^I+FGv+Ku^TE473K3lrl z#y^>K5;2$NBoJ@u&k1*EA1z(L$(-d~=SjQ+bS&2_=aZC`zIYk*dB~_AW)sTzdGYmB znFPj2L}@aovC4ToLU}_GtUkV;=GMM@D|&OT=7e^1XFsXkgZG@z*zt7m-nJ*+uxB2l zxHeeFZjC4$kxBpRum07)_<#P||M9Cc_oLXLUE_m1*PH$gH*2>M4LdiO^D*BpWUp{Q z;COhL_XDCli4^(1KagCYkpHtqXOs9B|ApW83ld)uOFoII<-Y|kG5b+o<%&xoB8e@* z*+^Ik+@gUobBP{4|1kQ7Am5UkOp(zQvqMaH@Zs{&;^UVtEHZp8J2vo)`4MaN#Y~6a zZbo7>M_B)eu{#giJiG3~-s|-2n?};eS}aSlEF+d!i)BeDaRL>pQkB2*S4fcnVX-k7 zNFWsh0YktfgoLGBl|Us`U?2pG7%yN9-mrF!*3mvo&)Pjb-Lv$*zTN%i`#I;H=Y3{M zp}5_@=iYnn+3vaL+$V;4N&jDEE-Y-*!9)C$8wc|<$t^TtB_RZdKKX|=C?x`*f!p)SnO2?d5pZN zLn-Z=%`mI>d{myr;QXKYvw!aII=i(wTJc!8dtFaeY~mNE0k40HNw+k^{Bh7-F9DTv z6k>@fep&fz>urlz(ig+vu9N;Sj!&5_b{}~CYj3~pwrBg)DTthLf`>D5KK!j_oPH7q z7fh~!Pq1-bbl`$PKq`Zyn;pWmqZ@}OOTeHPj2z!Y08Te>_~63_K3&-ZANs>57cLrl zOrXLsDF{|{@WAv19F4MFk%aH?!WWHp@EL;%e0=mvKgq-kjo_viT6H?XnY!EsPrC_s zbk{#T>5%VoWVsS!wVLHIa5+j3{0vU$%aaUUm23tYA4*{UM}vTy8F0B?svNY-!AhxF z!06(um{n)AML>}?&*DEcA#9cl0lc_vc(cdwug0a%DpyvzksjW!Xx5t&QGKjVx43QU zZ(DwaK3f>{sIh?T@RIbK4dq~TcBOOGzsfV7;ded#t)T`Bqxyu%%Emv1ikRRf z>Khi<;~C*llL%2fXkWzdiim6m9cMan(zSJ-$r7 zn{m7J6F>1+e)2E;5C8o~UVib^OPCpl_*}Mo^zPv!j9U63B{t$pUgoQ6eT;4%6BIx| zBWR)oxUf%C9}X_U!lhv|_M;NMC`8~bx7>B`EpL9)odQ6><0HWE=XipI;|Wwr`ve1L zmIN1ExpuVhwaYp2;NmrM1QaJn0|rkSE;v4d35}0n|{*S1?GYahg^X!kwsta_`0;27{SPe?;2j)HqgG!2R#^`F1qN4OL=$}Q4eJN z#ur8E4e}f1f?JNa!CTHVV_%9^BjgCJY!9$pBmfau?G3`fKPjKs=4uAbrCYXG2CP<8 zP*z&tscxW9%pfhKY8$FeVUKD9YD@+sZ>7a$xM|pw@hHUt0-vkljkjRQIyFUoE=GHJ z!x(0jn`bi)$rDE(|LjAb`|_oiUpQI8uOU8Bi+Pinq_%=TWvL$HEhD$SVyl|+lrIoL z?)iQZPmAqDDUj#oaUMxt6GGr|BvVd}9+3_U)41=$?|JZ6j>?HA*v8p8pEM3hHW;~s zE66yiK%P|(p2oghCrAX+Oe*m4)sBvAyame8;h_y24{*7xlKO1bwd*&1!RRr3^hFy!_>T^w7ai#^2da3p>B!Z_2JADohBNK6t0Is5ZCW~# zXSKkG_msC4EWlMSButaq5jvi#TK>D5s=3OA*W5O33%$Ipjnt@3RUWjV*lX{ShCNtw zQZHE4TqX4a73aNDO#)Tjz>27lH=rW=w|~I37f@|RzJ>FK}uxBkZ8LxX?DZ&^pZ{vu$JrlFYlSmAG+dpno$Hs-Ew zt+*8gb(&xI{2IOaXGZ`Dzaj`tKP|x8N}7{>r6A0iK#2Ce?QL(p`z^1#qepxx!;v}T z1b~3#R&2k%!H(k zPTIi88Xf34x(yFOC&8IXYV?KcBA0&Xhv!U=Y%-I9Hf6fYwJFoVrCs0H0ZDXQYP$sBq0Iw=&D&~WVrYO6hrhS?_ zSKkA1tPP;O4B9K$Hef@Ac=bq2RVq{Le1_Y4!8f(9}n_7PAG|E;etXi(sSf z!0|2MD4MP{!vL=BT)X_Mzw*mJ{jpDc_5wfZ)QeQdXa;i2Y*Pd)^l-{u!VrdhXcN=9 z(Jy|!1xP)?CiqKGNG9k7w;O}}0#PwQgd;dz;Xi-k{3RCsf$x9E-5d@t4ycXujg!wx zCwI*%1#g0mgQMl-+R-adQr1E6p_z7dZFCqJCK8EG^w3U*TtXv2rwy%o+oM-Ylgvy= zbhEPKLBE-3)Y0OLc4Xi`y8}ASw;=IR*AEFT9b7YUYM1DPuSrAu^m}X|`01g|?f{-P z7dn@T3SFgkKj2Awr9d*i!yB^jSL=piHS&)#9Ane4A4~ zTh_uyi)N#H!{KaU6cW@*8iMakqw)n@_^T_6Y2m_OSK%K84=!2K@PrFS?gY8u zlLXp!;0jXuOu)fMDC!Bk>2^J1zi#6J`R)$>JfjIpj;&=fmTM7$!d;a5#Ty zGzV%n9j=x2QN)4f5#7K0oo~D6!FzAn&zU)$Aiz+7$OWluf=E6ACZ-w6GrH|wY`q4*SlGAnSaN$XEZD_XXwW&L^F?{W6DY*UD2v&K0 zPO)L-m_X%Z9TaKN`~HMhsOtm!=C|Qm67eY9fE&=Y0&i%G=VCY%&2Di6TnVF1;HJ>s z2&-aW_{DdNU1>1n$x8)!QLTo~!i0d;vR$rr1k+v&T2x?Ncm=Pf&`_#v%WZsQN&9@? z|H{Wd_HX{#$3Fg<3w*T3dPQUo-!qJ&GvQfJ0cv;axId_`yaaV|jLi7vqKgNFo(HXM zyy>{Ni;0MINKi0oTSTs%W`!3gr;sw!DVrFMA3J?9RcQM@_<^_IEdT_1gq1T+VBrUb zj+0Ix44z<6MmvGUsa*mL{scH4a9sjiKxtQJIQ%7T^r4(GxLiO_kj}mQ1TOi~Ok6Wr zkU5ix_K`Pu^u!Z?dYA}ZWYHhJc5P(BpUDyrbgmhA{OP35HgHTR%J^x6KYE*hMyIj= z@S<-#qU_*PeU0@h7hsy!l3WDFTA>h%LAwYDV6FhbAPri{Xp9A1ElbWuhhaOEt6qY( zU`0J0*keUPL>u1CHew_+Cp>CP3w441e=`VmZ6i;oY;mTXe1khQE8j4WQkB4yd}^zY z4XmKeEARO4Jof0fKJmZ&^}q3PzG9qz>`(vbZ${K)q_zeaTBQfx13<&x4YWAZK+gju zbYWYv%NYqVa8~~?%hDewO^&$gtGy?a%o%Y=4%HJyPYP5sA?#ecT1S-k+cCeP6Hp=t5%5@u4Z`Qv8ip9(xi=3E-1V`%!ZZ% zrB=74eH#Ujx(d8nu-zaH%fi#L@EZl1t8|!3>iMD-A*_ip`@d z)82Wg?8Tpc`l&DcG``TK!11&*NNgzr)-t*^j~x>cWi5Y4J+*Vuzh`p^^p^Z}fV=_`7C2Cj?;-SHj$l(pIMNG6g<4o-a* z%s4F|aB4CI@RYmSU~Q{jG!T;lUZLC7`s|P37k^kF#h^gVeZZUc#(}z;M!!8sDK^c; zRYlyr?SCx7|Vf8vLo{)<0Z$yd%!ykZoKjB(;pcqjF}ewXtpU;{iL zwsR$BNf{cCDxqr{v^QCYy6|V4W6hV1ht0aez-i z$k_r7TuGqOdjbKDgpX@v;;D=tPjnNg0!4jz(-BVzjU)&Ko`hce=tK6Tkuy6L^i!U` z!yyX~I+AUI9DVT}{o&xDuHWh=C_Ft{M28m|dchkTs863Wi&N1s)}tIWAsn@1p1(Cvt;SSS2NQ6xn= zIGC1@K}OZ0GzBeEs^g349`7xHUBfg4zoj;5bvtb(WGgT9=^;2doi>G{>fO<++6$#A zbUx|a*|X36ZP5bFPEeukU0F*Lt)cA}r%>q#nNINZ$(=WU0Xh z3k_uFnjZ|6;&Z)H=dnVrS{;dkD9@14E!3uc`dhvcXNVpcO97m%EH@bKs80%ihmR%-bqJY0C_ zi%VH>OwiJeyf$R7ilfVHx9Bu@$}su4`8Vh!3|(V4)|BCCFPx3I<{p@C>@_ds!cDnI7h$pzwbxb%{h<-| zTr>v&;ceGfIa#H&^^8?^TDViLUX`5P`i}oE|MD;W-#_&a|M3&ouJsv~vEvVa z>W}}>yK%F;S9evaD_|BebqK)gpbS`?s(Fg4k92a`L zlt(YRlA~Xf)ZxM-YwQ6|FElP`nh8c`v3s_hPTM)nkcDCA!#K#m?5sLx_p2DV5Wc}f@N`PuP8UCSGEsqD=#*i`r=uP(%DMY>tIY9G-9{+88Xci-c8OJ#Avj57!tC$b!#3vT(YG|yC8oa_xDSlF0Ciork8Pw>L zYJVznCJxr)-77T)R(n7k;jBWH?F>o*tkQPk#JP*iP|j8I_wT#^fd_8?9Up%C?Kkrx z5l7{~6ZD*4AHf7IXC^~^f>KZj5VV4agA0I&DVTO;bQ7fT@SA|NLc@{B0GB41XZ6&7 z{6-J?BzodAywJ40T3>xZ3lD#7E;>ozj3CMGnJc6~)FN2iUh z?5a!;Jf?qWvYX7f_~Q{Z&gG67scd=5F?kbbV5F^U!GNo&KC2yM;UmB$S@~U+N?DlA zubaEP*WT=kd=C>J*MQr1htZxY8-x)td7-G#W-6-?+0_v`q_oQ27=dI>do`!N@EW;+ z=%7_LEa}r%H}9b~yz3XvpFj24&wT1<|K{KN+yCmh=U%9Ts2NXw@MC}KkG&hcWCx(E zeSs)bX09w9%z}NhqqFrv*2=9|4ZvAI@r!P*rxVsnd_^1pyetfmGa zSP7siO9SLfdSMjD;=aIXY+1uWwXp(8VZ)lVNu#mGQEH29)1y6#rcC|SpuydS7g}{L z!EyS`>0_V##K(T_qyO}ypMCo2V>^6+pGd~<)rm1O{`)gd#j`rVq+vLgqH|dHAxuUi zI1rK{X*-7`PxWcnu#L65>NsQPI&&+Z9*mnIDwa5%pRydj{wbRXW)c{_BUh|1-sLO~Z?#q8LqaimIZ%!AicQMUX>glK zhP#J7aO0cSEu`fU8#dLvByp6z#GRI)Zf`kJ5!$LO3Wh;l&{Asn0Go-5b2V>NT7dww z8iwT6`L}7r?c0D~O&O%5WsYgw&_yff@7G^^@r5UT`CtF5kN!VD{nKAPe*ENherI8u zF-Hj2!CdEY#g_TS7_&=LZ`E4G@HeK_4n?7dsZBC>36AFv?c^uHo$S|m&EZ}M@;DD& zr!d>uxk~XcYsQ>RqCgAl;HMn;DDd)&SFb+sx&ybWuiq9lmXzB6hVOXr&fjtCk%J%q z+_UG-UF>^bofha5C>)!!3of}N2-GD3C@}{K6oYOE5U;|imKIhd zK9W$#gIHo$6~BVN0!PIZ6U_GJmRrzj>yO%qjNmYC`H@r-!k5-d%|%fyDMQ^*c3XdL zlz9aZqonZa!m3Y(-*!2Ecm3G2&p!Om|M|~<^k;td=bm`(xl=cdrQkQ7#%BEKM}O$| zy)$EWLvQWaND=yZ#8-cer!2gzMn+jWxW@JR&dxfOpMI5^`Iv#K7&&|(!poY_=EpsZ z0Os}RFYr8mNbr}4z^rV&a`ml3Sf}(M!9x6jZCx?oWloCJR~r3@d20c z!JDqyTO;WDZ1&xiM-iWDJV`D7v5CvGxt1rV) zwW%OtS_D`XSam?f07e0{4|>ro%x+Xkss0xha5b%#l2t%_HZ7~Qv>Xj;f}l^K1$EFj zdGl6nlq$dvAFPWMxrPn0dVw02SiXAn=;NRM=uiKXfAsf%>K{FxmH(!(G{$^RGA<_g zRp~LSu?i&2yr-ir#kBQ;sNQ2+#;!_zKOl5_NzA2I3bu;T_hx@Ph!d0$&-$~H7vm06 z@Hze0mzph-J0CC+$Xz&;uu8H2Y>M2 z|4sM5^*io7AZR!&IHwgboLmy{6Vwc+U4X%nzj~#dKo+2QGSb`*fRUjtknoyAGj*~A zl)=GUB71^*d%F%7e}M~^oY8x9rwiEhZ6+`L$fk>SN!#!oI&JvEm4^T5H#-sX=pdg- zV|1oJ8)+*Sh)`pgda7H?Ep3vFXcr<-eWessnx^5}7DBbCS3+OB3nL&yKB%2f%c3aN zpcV4^P$`L(@6mNtQ@hf9wl+<*a7w*lx~XVXDZnZdoqB0b|5Y9|^}(;=sui>vX~II(?+F6v}u+25EDP zG4Tj0MQCSLs}C9$)Px^~@u5z&0PJQ5aM+T)`T(KsH!6pmh^?JK%{JlC44e_nEdU4V z-A2iZmNQA%LBug{o;!VRC-cYTpYQ==5Bf{+roY+*zIrYq zOE<1jmE}k6O$AisNsWMDl~-vI7E)TnrExT?`&Z?r+xzUct}jGP2DgcP4opj<=d&7$ z48m4w`u6cAE{I|`Ay#R^%7T+j zw+?i(gP;!_JZJKtKOWko;iGKe@qJW9!WSEQ1n>$zss$+ADnc2-=$mGnwzyW;o2u*iObW9WFxAql zSTFub-JP;VK3}0>DdFs@o)#2N*{QIKTf@)=HxocyAaV%fR5f5mMmb0| zDeSwRR?1{?&Zpais-xTOdwDCorfXNO-n@MN%8m1v&fUD0zgl!NZ!aD^>}8joeV_T{ zH_rUPhrjpUFv*OOzewYUM#`<2j0*K4%l_Z;TitBEGrO$ln_=WSAa_SI=*Cx;e z2OR~Ii$h!8sxvDn=^+>gUl3@Q@Nt2`5yaK!z~ta$$ORmjpcFs`$^eqdR_G;oaOf%U zBzQ9!po2d_iWiz$mDRP;WoS799^1|_GU%@j54sK?^^r+Obxt;Rq93?Aw@Kd|I`~=H z>L=Nt_)jt}zyTF7bQ!n4-Q|vDpS7U6<#~+Q)fBU0Y&0tTZGEzC@~0kz z2$U*YNS)<2J*)I;j*RU3^sDVrH1P7b0W+JdvjnR-Bs+p3JeY6v9Xfb8xb*2mssjhz zmv>O&v~&I1?#{IvH!hvKaN}xLmdls({!fkL34 zOCRM4ZaEtLBL^Sl(Lo>7UHG#F{;uIehPrn6Grk7ZSQr6=F%7f{zW^6z+-+cc5cp9P zT~Jei)dl6|i4L13p?3p>CFylMAWbD6B4{q#&zdW`3bJ9>Xhl&3C180dIa-=iu}C@4 zz+RQ2IvI^R_zS0c^=kZYi>VWX&98TFJa_!q*B*N4GryL%`yTnlU;5S4e!|~4Q_R>& z0)PAn%(xq4@97`D<(5Mk+ZB~G?+&3~))rTZG`qM~a$}qYV1q2)2M*;IgqA^r2)TK! zeE-3>z4^5wr&j!GgOUk=Bq#e(ay{1z@z4jqmARSM7O(A|f9d?r>2v39UfH?1d-Za@ z0+4r+>>%(ZC{G*fdjvOcT+4R^Ub^~*H@+s11-pOAv!IkwaD`q}A&kS`a^S%S@4xM} z_Z``N@uiD7N62cs0+xIR6cC)7Q!^wOV+sP!E=a&!a0Ef~?qC;e6I2EO9;@P^Ea8FH zpuwHNf;aeNX`A5I27mNWAK7$wsiVO|eVjv`JQJBT0Zp!nWLqy2)9``6jXUsd-rC7| z!-EeTe&B)E-Wp!zRml(hrgy*lH{Wr`o%aXdz|pC;?KLg{Ni{-MSSSV6&@@v8nKC}g zXqUelW`M}fKgFcjD9t0gs25#jd+Zjo0W{4xC$^n7kkx_WzD-*Q!PZdlRem*tVKh04 zMbd<&`RUn?nzVNEKsH`KNe@X-5VP>&<7T)c8UTb-NdE?i2;AKJZsEsyBJCx3OOsnV(a*)8Z??ge%a-*Q_8 zyI(EZzdv6S3}1VWJbqM+w2~KWUcfKwetrKN-}vBN|H=LL-1g8H9y|Tyu`4$Po1hm6 zj3=oxCRqYciWSS)a0G+8c4YyEezx&edu6x=Nt?l&-G$&HSKII&{&>O{STh;X0lpjz zFZ?-z#0gwz;R$Ryf#C~}Y;@BfFo#BTfjja>AN?l_9e#DMAD!q-4qk&Bg9qdQw^!se z=P6B{<_2Cf@(g?oS;NV5AX_$3*C+udRrIbBBNqfb7k>Iww1op$js#(Gi?enGF@$!3 zDlU-)UvtR9Vk*c>jYS%1B;a13C9J7ey)`RPH5QxFb8&0F#d(SgKmQwF{NfiM`PrZU#go3!!|oI`al4G0eA%OX&Da{t@z3yFJ<1@6%NA1pRc+OQ zIy+iA2f7kj!+R`Zl8A4HO`D`UQw9oEqPFf0cC$?{Q2}i+;nX?^rw#>!lOwR*E0?a` zxOnc|jVrmwzml*1=c~Wr+xPl6>yMVETIz*5KIOgt!?)gQhA&mW{G}()z307eyN9f- z&*AML(qAc)+#2NeAqrLJLqmQX`p}1e;N7oz)6>V!fBq}aU%3=#KX|C$lW#ryq+2iv z1kR4XfMQ5#f=K-RXc94H#X)$U(;j`Y~;I>c5E%FKrSUiGfKCzP|u#eEqB6hz*$mEUcv(k{Z(t zV$or~8PFzZ9CEwF$m0i52Rtp^I4HPF8G&Yja+?DMmg0MSt4F)}z5bV1C>X*O%%(>@IUCx@7ZFKIj7*h}m5M^}Z?1DhjK7pbQjscJap1R zU6P|CAB{-@Z_Wm;9Ss}!GElr~c}z|8F}K#N{sk?&XDn8na~N(=j#JLTB{c6%1m#vm zZQKXFu=0U-aKl$4#XFH&Wgr^hn5KMS0zdBR16F`*6M&i`u#`(3pQ#lCpqA22jkC(K zB11Z<+oD3HjfPbtN1;E@=Sw_a|Jql7%_I6OPnGeO$u6jc+ z+vcpwHxuj!4`($kz6r88@or5txgDq%fo|;k@)w^t|K9h1_uc#VANDIHk?VI250(N^ z!{$^M%OBh*gn5r@oa3&$?>_RO@BiKhPQUcxrH8(F^uqb8x9y(4(A#B(pB0#K^+iw$ z1aPv{Cm9TbG=WH<3$7qTKZAx2t^frSoaEsl(D7E5%=q{W4>Y60ObXg1@F@%0aSF8C zjzkwSCiv-yFFnBNq%O^E0-d$fTcQ`|BTr8ak!T6MtUBLr(zF|S$?2wY~1p( z$&A}f%zVTc&jkHP{^0L$m;u-n>RfcOEAR0Zlv5h4Gz1r@AIE|?Ckq~;GOrj!+SMUJ@F(Y(Z!IU3O==1+&sF%f2G0;t&;ywq$1G4%%SyrB`^R zf$I3Ghz)biAqZZ5Duhd?KuTPB{NpZ^501BZ-&lx~!C9t=KgeBniU%hhe#`$dbFI>Hr+xonak^uItKLH=* ziUzmc-JP8Ct-sNi`+q+VR(}zA?UsHsF5hPGgMtj>R-m3jF_OE4 z+$7L6ig}cHGslHdIsj7Fpr7Rg7?X!IcgKNa;B8Uu_fkiWerVbCU2~MOBEX6h&qErJpUD=&!-RR>)& zFb+vQLjB1-p{*dyXd}*)QmpLaEA_Wn#NgI@WGMHRL zmll2)EWI1gXQ#lsAS-dJp|WmUY(aJt_*Y*zb?WFZ|H{Am*~^zMU;XSupLzBRU;O$N zW9Kqn#$yS1)xIu-91m42ILEg6jRr`%_P7e-R~mlEq>ysIIMG2 z=$q91@#^?Twk%L%p5FtgfGHS(_mI;;}tht?MV z(BaH-J9Yrsx@HI99Kcfm2Y*)iIuBrszyyD`6rFS4MEe&Wdi31;Kk%*`2(|;8T%v0F z?;VCXMn)`6`Vrpg;+o~`3V>n_IC1I&2fpWf-hS_Qz3nYGzV?+TPJiR*3)l1er2DSv zaQbKvbYAdI5**;#t=`H8PHy%V#DkA^+O-*QbwNFYJv4$(c>-P#j}9DQ!oyfiZ#3`U+iNfnKm0)f(60fh?(bAZ?bbKu9>`qyHDX4SuPxI3ZK-Ii+jc z*bQ%g+6W(_MJtQ_&prFh(_j6>CqDjb?zzAD&2OFf)nEVkS^60>W5)!>$ykpMpf$#D zv>9t-CgAy)MPbG=-}ZYKyG+{C7OW-#TfsQ}v;?Zy&CBzf8cysJn2*viSdD0T-Q7KO zAn)R2nqLWi=7pM;ia5K6{GR`=*LTldzI5|yw*EIcl3N2Dqo|;^12}l7oiMioB&4%m zI7uK?@b|&r!JH8o#oRVTP`?P|Wgxc+ax0LD!vWw!pZ?a_@Bh%d?jgr3j_q6781#!w z{T(xZ6QKx@d=I(&1G2y0&R& z0-+l{1ipj@46gp5!%x{nrc5T9nnYqnt^(h6s3%qtS}kGOHZ8OYX6BXZ6HRy<3mENo zjnG&SG*Ljt_>qLkBC1&janjZl(^!D0LR4c7+H@K?bhB@DOkX87;sV#y`;JAjGNdi9 z09y<<4G#B?KK|(EAAb1ZFUO|WzxAzeJ^$&?e*SC@+hWtcm77U=#))4TXP3nGY;0Wl zm)pxp>U96_{^XDR)@#{jZ+f>7suxwx1fJbleyDdyJKrFr3+Z!Y?Z)L;Ha%nH3YXHM zO>dYG1z~6*_gLlOJ#_-Oa`Ezwi{~%iIG^C(xpJ-U^@En)bb$1|eon&O<0okIkz0j! zX!Lm&xF&!EcsJ!>p^%*7t>-_*LcNDpirvxUA%m}Fq#+@92E4v}6!$6&&d#yyF zA*BXB6G5g$ZQY}4SZ-3xbH8#|zG3*j_uq5m``&Z&<`YjmbM7mToXUjk<(|IPnU%GI zA>EwdoPiWf0$&}j;E@czzz3Td9t^#Kmu3av7~7KpJ8iEV$|Dz^b`HXEq*-0Gfy?PN zlK_0dO_!lTM<2GqTRR$wKH%s>T0W7zQ3~xeC)vZd4>1+hd%$6OL}J<*q%Mr$9Kl&be~-of0{8h zzI=kem@N2{i5)zQ;^sLvtXtsGe(B3B3>0Bym$qC0I@F!%=2Qdfjq$o=Xgdb3rBm^s z_@pYf^?ey=x8B{)L0@j3gX=L}6wHZcBDhw2&-Sg@_U5+wl3T~(88N-(&tXTl`2AQh z4x0ea_CKc0>bQ0hG%_jJN!Uf0D6+-KI9q1G7XXYvbH7wD<-ZZBq?XZ0 z*@9aIaB@~^XzGnr4e%foX;`dU=))wb#<}pjm`}_ ze8vcML=eRAkKZr4g?H%m3#WH37GrdTPgC6t;N!w9bNmsJUGlg1NQHN3~)1m5W0NE?pXyn_9Z+`Qe?|Ji^ z-*V4OFTZ^0%U^x`+_TSJxgoHw<_k+#GN5MaULAWvD3+0c+cGa%D;sOtJhGk~)fFK5ZfBRVUQz&>Dw zH%Vtgpn*vMofSFP^_?7W9L&ldXX+h%R{Ns01F(8#_|l2$QqdvvSS{Q#i5$!s!i^ib zjmWORljnTVX!mkv&7FK@`0x?0xL&()>lCH>W}>>e|AE)sf5-3q!4KSVDQ|8ZJ^IYqFMaLVEBD@YM|L;fSMX9( zKRTQlpB~#mZ9w&Z5 zvz=xl&}K4`Mh|t9M(9~7X6muZfMzrR#5516;X#^etvMZ;8|O*`0mY%r4L4-*fUaWP zNVo=dI|XTpDI85zr%w%PO)X2gQnCc`-)5sg0<9`tOLNnOaOVBQ11o^-9y|DLH?+af%cH#Z+d-Gi} zV$_R49|MG=I1@FcAkrEV&fuS<-ygCN{Oi80r08ciwsAJ>U0R z9(?b6|GoVuPo6yY$hV$4d-T~G*KN!4V`&*khh`nzSQ%8;_6i+Qwe15J$nxzS0jJ;q zf|4_E5cC3aR&UOMKb@5&_^z28@W5*>bqLf@ zG;VA^_wp0SWD97y?fr~11!tl~uYJY{jx3=PUa+JuPe29Y0xs`@Rzq=OM=T_roFo zMNJ$w_x%Fbt8c_Ywseb4)MO$s$Z*j~n;G9)n%5v3R*&Ik_O zlKa%$hv#WSb|6_5-5NyBCqMbf`Hy_$UAYzTi$#YL@Yl0dtpk-ft9ySz9XqCn^lO{e zQ-cyw2ZY?9-K{2xcy_*jR9oIq_AW&|jI)#2-T&Z&ufOLFZ+P&YAB?R}o;r2zn_oYA z_OYj5*g2FRC^{0oaz2u8BK9*~0c2puVa7o^u=-$b0+S;c3{D{DB%A@gAmv2kR2)o@ zf=!_75WY}qaC!g$AOJ~3K~%13pZiQaS09T9J@qU z2ZXKRVnsRxMLt)1XSXPqS2snwoTe3{z*$-Y=#N6M11OYcU*%>BS^;17DzX9zj{JvT zjA^~*ffRxAFMna@(&=ZOe(I|^(EHNaGpEl7Xa9*4C(eBN;jf;4?!*f>*lTuX#>N=3 zn=-pdY(Hlx>{s?mFwZ!TP4RN6%hBPZt}ItKPJi_;{ka4`wC+&?*cqUgcn-$rYcQsZ>w%tin3_KB!LaD(#o=)9mtJSugYU4cFe!+6gu(HMhtDffzzvUBlSJMZ8}@K z*Ow-*Xa8X;=&oPSYM&j0ulVMUCRYb~zN%Nd0NeenvoT(N2k%;5(_M#$CI{yRb^uoV z%t=Lyr*u6NNsO}ZQ=jVdfV{(0d#3Pnzsi_Q7u8uS|I(SV1)B(nSfb#XLdiAwbiid> zlZk`JgSJf}$!$+8;!v;*CENcUZ+OFfZ+hdK?*9+2UA=zt{?(Z1XUi*z$Y3p=WvBDGr+@L-v1cARdi3by z`Qw^rsdOrn_?I63>dVKDpY+_VCPsE+ld;bPD7&HoH-Vaj$6jMc?dBynV8B@w#{mUvXjnZLvfK5S@|wNwv`D6(yg+9lbqC7tzcGdTh)xb0Cu|&xZLVp zhk@a9Am;!#uH~^wjFZmwnE}2bw1aSqAduZU?9c9DCvOMJZ^^DBFJ09+0{VFFzK?(G zo990A?|<*zu~cn=(vced7@fV!c`Y zm&{_h^vc&J-5BUr{5%12=Uz|i6hmlM231n(<8h9>voYEz6LXIVYaa>Nyxzx2waL{V! zeCp)j=>*!!r%skJAeWmlL;i|ug**e(kUYPJW7ZU4gCsTYa=QA6 zuoxQSREMc&ADeEB+aW-sbYfd!ljEBP9Hn=?6;nH;)%yko_zl0=%2CMzyF07 zUO4~NuYdFOqmMo5e7)?VuY8=HjE%{V?bw9M*ST4!HYRCXl?hf5j~=usdnvHyGE>|)FZ<+P zc_pr|ZRmhA*xJRDO5Ov=xI5UZILV7Ww(j*tUm88GgH&e(QBqL!W4+uW&@V>Ki9z7h z>Dz*O-M4NT9Q5VBKWz!%1pf-|Oagi4ABQ_sKlSA{Amf)^LV_O8ln-VSA=|*^rv4<@)un$J$d}aom*qqOy~QKr0@AY z!tTZF5;C~epQur}l|ugnseA&I*fjv7@0NgfRXi?!$i5S~3kIfiL))e8?!W7RNna?=62e3~&B9FE%! zz_v+PQUmICA{}$zM~Mk8o;mjH)8Bk5Kd^Tq`}nA7!1td%efnY^?OyoWHy*is{`{p~ zb``+vrN8XAZBurbpjBooHeqACIQVR*4IO^q?8^Rfa3BM8M?xxeMrFYMd$;K3<*J zFQTiO7lE>R-I{yva=yrj<6m=nU0>{pL9EQV|2>#5`{a%xxV{VES-w+$TcF%FWI{RM zxqix-h3d**9^bcf`O2=X{|$fDI1YAgC$|FiU4X1^-mD5oUmH$m_8*B3V*qL%+;6qq zmv0R|d+|N*eaju0+jPv*TrSlsyVX151Ik}4N^`C5wd#-Kr9W+h6hf2f;D*Vv!H>zs0xza$c&+OtyO|FMaLo^nu`Z0B`r1({L=?Ope6qByov` zlW}e|7{JAooZroYSCbi=j1Bai4cW5BFrw96CI>6FoNd^JJ!WF0qdHn` z=-F&0fstVsU=o#PvS42@{7n+z|Knfyu@7Z;Si2GW7eSe$43(;Zp{QwAlahPQnaq!)2X!GXXZXHCHr$<?Tjp`@^rvbj(Ru8wKM3!+NkHJccMz~X)pX?D)wAA0@kUw{9D zZ+OE4@BjYqKX5gtg>lvk$B!R7{p3^6o`3$-*_~Sw%dfrv4)V)Eu3Ygm>HBu`)N|kY z3%xbvnEJ>8%Lk$Whnygm!@)y<%OyDDutUoU;R+6Pa5*RInMi6Z^(h6iGCkHL7f>f- z7!$`9{ApuE%`FusYgZsEm+?!X{z$!mjR1x)b4C6d)s?GPu3WIPC&-^pu)mPMmUAL@ z=vNe@EPc}kC&&e(0M!m|0yN38 z6&TyG3mkS;N6UubV_WTLMjrUswrm)Ez>LRF{KY@}k+??R!=>ls=u=rK`n3&BR(TW` z|H+$2epS~hL}o2?`jK{rRlv5|4BkAF85?{DX5X4u@ar%AuzbnGWTmhr)($M;R<8_dij%A9ervkS6CZrM`9cu+GO`R3wU@*5L zR(pzgV&K%@ZlWid$c(WfG@Xf}nJn_H!r=9H3jBp4lT7h8k))%a`~1@v-v8dW-0A3n zU&d`qewu|Z)9G9?N|o>8y{wR?*s2VMDU{eD!7Y?m@{WSPm6~|ipYIf}$BzD}X@^I~ z(Ax($vlYpMgX%%LW}2}Bs^!nTlyvK@M~>Wn#~W^Y;~U@f;DUATDR z^2t*#oO$8osf*7(`~0PI7tfo6a_D$p`oL0of^gwden#DIEk;!ID(8nI#{+EwDWA2=CD%_~8u5R<+x0jNI$bOM`7Y@iJexD}Zl^qGzDk=O{mHg+&c!kx(yd~9Sw zVNZO~$<@gio03bO-1S#}{Lj>Ve~=)yAD85OEMoy{3$Iv!=~lzS+pBBCB8>C8PBq8b z0xf@Oel=FrWOa`cA#WWgPvZuLS?Cfq*)`TIn!3q~3}as}>8yKjTy?fy^UW$>c=}X9 zD}Z9mtmZo7U{4SqIGEMjxm0)1$i!HJ-!pyhQ+x0hSm>_h-2sP#zI0?4;87sob0A3h z{fBPRyJ~yrb5CA)-}}Dv&OD#b5o*uqk&&*%Ny`#(ko3JYj;+{Mc^Ru_;h^=FH@=## zrje3ng9LM8U(a$?Ag3YGo{3?;Y!_~J|FPM&<>;uB9FyKHnq zqWe)Widlza!#pkBy^^;tJu1DD+p80dL{M9pO&Rsp0Ku><-;-$-Z8*cBwQ&7{7&MtZiUVQDGO3^wNH?vAHHz4Ni(4ijR`?wJISPLLK?nk?G*6G58aRdxj$XOpL&M4|B^4y z;53^gehOB%D=~iv^D5k?y(iz|iMIfVj(HJo?a(vnN=olCSTjhTaj1KojZ5_(#4C} z0$;jv{`}c1FTV8hl{2T$=G$7HQg{-PEo4m=#TV=9qsi8zBfr`lfiWxB$i$jkzZB!R zcO1O+*4q*tWeT_lavO73b}xrL@vtfuzH5sT2R`>C9JD{Chxi-N)6U(gjCJHzvOe_BO&VdeeCzp)5<#0>! z*Z=BY{OuWD_6d2dOX8{?&UF}<>6mSk(pNunyOUi~{(Rn=-8QXaVGnzL3cQ+Y+}1>3 z6aak$?v`TpvBA-0)r-_e`fnk*k-rPzR5PnWPTmAWD$)sOo!i`Qd4L2apB6HD^`nsEkN|5mD91VGtO)`Mh6lkfA?8xD3I zI{5kA4!ke71DTrz4P6smaq#f+RKn^SFS2{r^?>ok64u%+)W*Q_ui4s9c>PYHN8$`u zj}>nOLXNM4b>bQd(Gf(Xa(tA_Gy2qoJ zq3EG!?o1em?z-!)d&~+1z4^@oJB8AsqA$M#mnl0hOyssvkmh?OSFdEAIG?YM=8Q7? zf#iK?bTeP;zM23|9w&>#<`>+q-U$Bn^A|7e&?{X@UzzLX?y=*?^R?IO>7&2lm|Fw0 zQT)LqVyl$4D4cEf)t%i-moH}ZzM7xNx>_sv1d1HX2@pXfShu&;kyWlFDB06WD@b)& zFbYaM1gI;*>jKBuH4_M4vvr?9=2B(8SQ za605tAAaGj(ThOw_N>VDHQ#K{`t?rjccpUs_}mu)=5S zMButju(ek%`v}5pS#y}aZ+~t9#Iy;dekf$U3!vj(Afkhx8k1`G;PK&+>>5J^CMT2$CXaA32WC1d{cvo>^3bM6EkBT+9`_{V z?ZgaJAp|olR6X8t(-hKlF#C%5^r6GI-;r%gl4E4OcQjJnQBF!$9Z7D&DGPzK&BI^* z;-`M~*M9x0xR{y3&m;oZR$Y!izH}Yl=uH^l@WHL{_~?s1YC})Q zk%>P(+R^9>JpKA>Kk?(gJ#5p=?CpBwNWrrr^e(JHHHvs~D0wbJwLkN8AfQRwSFx*h zb{3+naMfI{qnH%L%+O-mie&QUb9lUhNh6m`#prh6P=4V%g$$BIuR8IMD|$Iro#R@{ zlIL%H=5^hEFW{g@^10KvncqIwX^-?O*t1&X-KPEd$>4&UI1a)S7oPJI8UtptyBsQ= zOq-7GIwsHCgWmbE9EyAI5lR;b3kRgylEC_SB_!z56YX9KHVW_k9C8Efk`yzwE>z)PgV8~jS9N0N2+CM5 zK-?ipL}}-s`QN4rHSg-<4Ng#UjRsFC!CbC)J^Ghf%R+!Prypl$B>~`47HFJa5?q2) zuuiZ~aDb&B)s9wOf`=X-0ldvmP|nFbJn|&@Oc)~zUAkSoMqjwv;k(F}lSfZ|8hJBW zputBFqoo6V1^D19<1=-W27S=6!5{zO-~aaG$DTP69FoiIay5e$zi|s#orzABR~z9y z9N`s|{J;0U`|d>qiT+`tP<)yY+)XKdZus4{wB#ZO-Fj@h4M1o7mE;JOrCOZ z=pij~&Y?4KYs%W7Bg7@}j7bI;2F!+OQ(bjHErXSoa!Fn3k&HCwK%19J#-nDcgQ^0D4ECLiN?%Ob)RFEz{mxayw1$?B`E+ z<$eDA4Av1dZ%;~WU_ueFhiV0Pa+|G`!#_Jx6G9js$Yfzfo1`uGzZKkmT}U~Iq1}mn z`qkCy5ILbIFME>kJd{b`;Ib?`FhiEYl_YzuiHCw)m5fsQmx@fAVRPb$CS}KNvTvUnYCSEkMjqK8)nb0H>2&t56 z(N(vWm_aG}#w~6qPo1m@U?U=J&pvZJHvoI5?tDlR0Ft1Ipb8-URu(kMa0C;a2|{H& zwkHIE)4tia5OC4Ll}|7VQv9`pNu!4VoL~jVUtqe1H+pzz!Q`VOT4j@nHuaICFUtC& z&83W<964R{7kt0Rb}`~J#EiXsBU#lA^s-UtD>yboQbbj&g^B_BNp{B0w7Ro!a&0Gd z1C8I3Hd0@K3r~9uOl-)G4ZuJ{C-8%J-|G87z52^5*kXVR*sS{X#h^SN&(qvGfd|ih zZ35K5NF^ zOB*BgM1Cz4w?tVyG;Bt4;U_~^6M*uo6P={`G~fat{cXU))>r~kNZY}C@4h3q@7c=d zUrj!OB0;LrfuIi9Bp%Ly)T*C=6yPNcqu_a#UlT#z5>$5{U=c%Ghj*DY0#0I#c9fi3 zg-80F1_4vDBG)Z|U_V?>CGyr`y^jzFtQ~^3>?GWd;FcYLNy9GI*@8*np8N9-u0BV# z(y_ciubH89eN{F9WaFJmwO2g>NcX_tq(M{g`#_H5W(Ue%om9-|9n_FQrm1Cd@EoiZ z$UXr)IMqyB%vcSVeE9#WR1}4`)wa+pYg&^9&Phv8L$Olh?c2@o9~{pF;1(cMCc=IB z1FUEB+G^ih3nZ!wM5`&^n4lBPWOz(hvcg*c&P9}<)8-O1?z821$tT#f!xgkM(FiuY z;0jbam;fB^!Bd6{=JkeXix z7rl>lDaTf5TnF#F^R_^wb`}-);{EGBCa&c@Arhn*2}%cobqkR50r&qkcxhx4K_t~7 zVtBa)sM`TSoB{GelYj*u8`^0c$mHV3M9_QQpUEI6?g{eH!L5m^ZU?eGGZCark9zzV zor1LQ^vjoa?z;c>JkYNJDm~mP=-0NPRLL&qUqRa@5X2o6h(nkE`V{+ApmZ#S7nYqE zboIU2HejfUDGrYKGK)B~!!lX^Da*PISCYc6q!y2WT3#ukDI{sJQE1$hR6?Uu1|dwd?6FS1djlUMiofLYyx9o*v=#&&;$rP!8$>Tmp1hY zKEXH%OdZ{~E5pMBy}rOB-zBMQ8~$K|ln(TFp$8M(a)~T;6PToo7krb!OhDS`N1h4f zzxiW-uvUKIr_InAB!jT5KI4&m**=;7;lG9>HGRM!smC>WZtWxgz>)lEaIj5#BNgtj zbh9vnOUmFD>Z%jgcG?owTuNxDf|2F(o;z;MtDD*0yZ=rw^@?rA&ng=fp2=S^^wN*O zC9;3K!>O>7(**7HYdI%$5EylW?;ud>mAelT(?u*Zs-7nFHXcsx9;mar(q{!Gf_%Xz zyA3>RGFf`mZxx1@M~?n3fsUfCzeJn~HAah1+bH%vLeLhD<;6WYP)tW;)*CJasz1 z1>dLl9DV`}e*rGne}OMwax1WAmDPryz!!XQ)CHwFK5zt?z@3#9J)Usn6NnR-w8jhF zT2KB!Bv@jDJr1zo+~+*#0jEaE?_&%l5{) zm=#lu6_V8u^`y~|{+#CK*OR=L$IJ!GZ+eV_USo}nc%Re30u@Z_p7>&3{@9K?g9Wu6 zr|=Ku2QJt#-`vZes7f#knw!~H=Owfl!b=+2Ay|C_D>u$+nlNy`pLUPlaxxoXIXvEt z_aspJl+;;)mD&Bj@BD+8%h+AyF`_pK^}(MDONWUKzy1m^U(W4S=7~Jd%%2{ZHxbL3 za*LqN82B9lrZFMbtpZrT=(qpbCtkji$l3Q@?|j{Dxvwf2zJ~1f#cvoEz1>vKH%j>G z9lIr3W2Sm^9`509b&Vh|$YgTLW5s}cPbg!S$DHYgpHR+sfD@q6F|;P|Jj=^hEn=Be z^{C%MVBHV|;+CUk4o&^t+ZDICE7W#;^=qv$V9owEMM02iK5#P{QGO62$eE!l z=qdu1=+dDzYj2Fh#|-&9kFgPfxjXR{(HaA}fDCN~o4|l)#S~27f?`(C2{1t;31Uu# zM!?y+3raM2X@l$1t}Xxt_IBXmg@+5Rc8}o%F1pcU_|ZeVAT}{**B7witBo%DhlfNq zJUH}|yG<}*{Gs3bpT8|A`vcEFrhsWiHJ=9Iz~RHaV#kQkuq%5OLf7;!-|g@d)BzNV zDD1?)u*C7O-9|cl=-`nyB$S0;*s;^_^#)j}0w#qARJIs+)Qfw^XnTSSb-RA>_FK~N z1XUl>^#PF8(Mr#4YdWeecm_3aK`q&O7fmJv6UTmkEVRxHGHAiEVn=)_Rx92m6C?lt zAOJ~3K~y}&vZCkrHyAs*3WP*!0wK7m*Df~;{^5G(Ij^_Wq*1}2t-hUvKPn>WV2Bwj zWY@FsA4zjRa^pP%;`KZ4$?tlVUHVocL9&9r*cHbbh^{V6GE;(d8QtP5 z6zzr>S&AMtJSn9XsO7WaK0y{rO&|*w#wOK{W5Y+kD&A)_ONZhazmO;1_1UpZRZD8* z5F}9aOUgDOmHey!0HP9o66wdEJAUl3#~yjndmd?xogMCLP8v$E~b1??K zw(?+%lOd>sI00Sv;n~^?#!@yg1Eg0zO(cviIDPw%F(SKE!q=Pj`Gzz8L223v!7i06|p1-KZ;gc z>U2tQS6)!O(kg?Ug3lyTU+j5w2$PkgM8u|n*yr+F*iSt1)Jt|#ai$#b-q<~N;qpxj zodB@93kb5+1*<@j1V7&Z7hsZhDhsX&rde6xNlT?Fqt`zC%Wsw}ZTO(GN~_a_+~J|! zC8)`kk6z$-!yTRRpLYDz;moB@9(~~b$shRx?_fyvTp9K0Q!sf@m>mz_ zn%6FK=1{Qk&L%DNoF-Rx5dF6Xy_n>7*N&sNjEC~;LUgKKMe#!%Bh+q1H+&5_FBN6d z=*hvZq0dU3Q9Sk7smu7klxWdS2N1jekQa0H%h@=OleBc*WgngE7_4_Ywz+O5I@P+fpeaGO+?$|W0Iaw|aw zTmg#*Ts%!!WJ~mQ;V+SGB7l#V2?C8WK5*%w{ZIVJA9!cjAtlFs_vxatyQIOF{K5y&zkq1rftJ1QdLd6$HL7 z|KKA~Ygds81CBQTkKB@5g?(P^p^tmSIV9>GMdO*7GZAD0sTAJ**f02QEkbJou^aJ= zM7I2xcd~P^GcY0aD1|+dtP&=8~>ne(Pa`MU*DuMd@anyp{$t! zPGxh}wul1_jlnOLO_?@RNGy{PsJ7y|$GXuPSnZ=qK#BI$_5j5o)v|N5VDOU3u5jrt zEnziD4FVm~o(aS(1}RSg^2Pke9zFW9V2}jT@UYoKAw1OhGJx4?P}m(aK%=LpFT4f?7f|XA$Jm2Mqt| zPX+%nydl6>PJWavKJ~F|&6H^qi#6dE9^>Y}IO^1NaQOq6A)^D{HM!KFgq4;sOFz;z zTWwTJp(>R;?4|OpDt$Zs=v(w|p}b?zsdQX?_37ZNUvrIpjy>HqMw!0iBoP3 z5`6vVzIt};*Mobt<(PPQc0XqaR$brv>#cn{mWjw$2-s6V>#W33HA%S7&p!cd2{X~) zsS|aun4ovo;E9DlAhI#GSKybPo?Ot?2$%%mlpb|E!x6Kc%#)0lPo24b_x*R;B2-M6 zux2tqQ?~%sr?6TnyA-3v>>#z$_9UWOur@-~D)=M6?QXDhCB+3|-Vh_xvM|Ja#%I2?{V}s)7q*xw;Fj0HgNs8a~>=1u9-chlc>3)p#bRwgI#EWHGBb z8E{-^hUd_$<1djtdd);Zuc6caNB{7D_1zW7tQlmPaazX3Cg6-`00mReKeo*dy8f8u z;O+%~H-{OtYO780w)6ZHA24R5*Ere1$ zy|VGNZpPqHz3;!a_P`G8bQBfdehS?7*ed6doJqkdUxAi(!I_80g(KM9vkSD1vBJkn z@3-~y_lN6IT?KbJP>dX!`b)y$@3CI!vs2DYzT4k0q{H=V`7OKrc&LdYN|i2n=F9f! zT2>OeMGpD(_%gr9F|P^l&rX3OVx#Dk9}3H3+#1Bg`*(KpXw>fqL;=CSyKCzj zxAGmHgL&3+(9f_rw9Ixtui(HnFG$HE&k^j6h$^_7#F~^NF;-3=OS*$wy82n)nqa9~ zjsZV=!19gj^|uxBXd#Ai!@`hhr`5i!`}$A;FDNE31f@WUI-3<%;7juafZa_LOaO0I zQ)O@gH)(DW;NpW8o;rRrkqnK=Vf2A7*d6YTK2GLY8)bjAxlUg~7vH4_mU<=^+a z|Fbt`$KcmjGLkVUn~KlauJi`3X;(FaKb-+v7C`I=KItXF&lL~Mx; zv&2&k?O@{HinS`O$ts8cw9^O8w0BXw#ECh~Rw{kj>HDuNOzFf|hC-akS(KU$%p|SSkw3zC^A#eEsI@?Tgpf{T#9MAR%4% zCM2e!RB#%OLJTwzIoL3Ui9}R0PZma{6I6Gtr(pbzaycNUBg{Z(nHDJse~AG@=-QAv zT1LJOC4n>K71GdSqLLuVOeM;2#-dW9FM0DWzBfPn-#`CGBcZd$`F;HjFWN*$Fif2_ zI`Cpd8l%Rfp$cP}qp;I$)5bMAM`)eEG+vEQ!<=VnNMG2w_E%tO2;s4513B{^xZ_$f-=gYB-YDBy*a{B*{L61p8CZRs7UgB zK7a<&LU0JK+xxJ{DQA}q2*;zlZUD0JLV0Q12yWQ*u0nBbpuSUpDG3i2=`^J8I^Wp= z72?-D2Wi^Tx%9`np7kANp}{Q1y@52Gah!}!K(k{;!G(68EAKkrd~`y`>XP8|Uw(7% z*NJ}c&%bw}19Nl68H0~4Bc442Ho$AtoN-AyLpuyJ0a(P=oFR<5sz>i55SlUAw&I2c z##`R>KhItJu0hS9!$Oo9?VEaQ9Ka1MErMEXiR zgHd}#vfPjbL;YbKkYei(KF-MOS{kZBgM&^CNCSjKM$2ii8rC#&^K=5@DzBrexZ>yp zgwwF4=~)2kJJHKlYhnJn^1$Br1@3{2F|_bt$G>iFeE zN75hUkAwXwO{rXxDh>J;i5a9PE^nG%KW7;bF6PNkFiv`QGD3vUQ)G%2yvS5Alo68R z3I4!)CS@x6zztLO02uWFn(ONzU?4h+DjWJB`j*}pd5kL^CI+7oKk{^Xt`WFbK!-|$ zRC^db#*7cnG~CTNM|(S-bx1X|{0(TeXpskeqY(U}cSZo3gG#)&Bpa@FO-hBSm_T{Tf4N0p_9il~5n6xb_ zS5DAg0{Za}pBmoQT`20osSS_}4=_c?$rmJa%}-vI>w*|0FTZd$(O5?3B3MSCoyx?x ze`X|~R?nHySrUKzQ5^4n+B<2`g1f^77&-2fCjHY zPXpH>2s1};Wi`M$PQ;|2{bQ}|B&N75C zJ{^TT{`RLo{!G<6n9<*Kp^oy*ei?BMy4q0Ip3jwUr{Ro&Jo7bF+1n5rzj=re zBaJbdrreR+(b=`XH}>cd{F$zkKqlnL?!HDw$le7`$%=~`#gOkuNS!$Z9w7O5991(!T!_bx#sefI6Q>)k(m@y+(tN7pXq;|K#sX_Op(G_b=0d8(Mk5C5L4 z&6Y&#lsltvx-U;%3z!-0r9dhuY+N_|JlF&*MIzy za_$?Uzl@+v^h@8TpXof==zaXFTHp=I;$$!haU)5i>*!Y)^HV-(1U?0pJ-A`0aff8e zBt7UHq64U;eK1jTB0u^*Wpgbr<#5W5 zfoqtnySqoH^N#o#ok4Ik?mPZmyZ4gc85?^}do-SWC=`P|&ZoU;0A>L?ip`3bLF%#L zY_HX*QF#Q=AQjCQk+i?k=s1>iB4l*r7e~V}UkaTqIKne(>*qgv!>z=-XaDSvKfAC~`2aSaIkGv6p7@Lr zRsqM?U2+rwRpr!qxS!(vkIV#+1E-3S`tngX0om;2qfm2Ha1p>82PxyV2H@H$cxfu} zynGC}7f8J}?f3E@Io7!yg)r+@L8v{RSZ!e|@ln8%Mw(qh1*-E7SMb4va7rjly; z&`C1JLDi!AkqWu;8#v+bzzQAokv5$8<{gHn@eo)XO|)}@q7=h&1G=Qiq#t@2Vn{0Q zJ-r3TdfJ?YiX5hdJ%0U?d;N)MSQE@f(+J#A*O2`#fII9y^(S*XjAhh`-p4c>qj6-_ zNL|afqE&GA13<}#w>S$or{6F&Ly8HH@K6X1&o}?*EHW#gH0?y;BSy*;WzkzkV&u>D zf8nXeTr%ij`g{XR3TVc;aGr5_1fTjkK4X2*v4b%)K|yX-e)H8GcM)D7sK)Q+Y@C4l zL=JV>%Yzjt_ZT-{n*7v{K^5zP<2b-e9Ha(PG-RNaFa6PBA~S}fi#ys@*hEFPTh_Cy zI^sbN#}r2zNu&>14l0)czxd5pzx>6o-v^#T*9F`T?1&NrQ{Nh@aCFk_qb2GIcy=0Bpf&YlTx?;J7L3(jfi8vvL@cN8A~+`lR2`(5hBg z{|nplpyWXRRH2}YHv;i}T0A!lU5Pf71F)f8Jn5TOMghfNWRvU@nok|F&Le`|IFOVo&!*;en7kl=oqXEz6n1-xlfobaFY`_njs0TYr z0|_$3pZ7G7;X^*4K@(aa~8ni==m;FY3?rvYq!Y@MbQUj9M7|U zG{UA~KN)2K69F5{sSXuY3O6R5EwByA^u)RgmP?w>2IBG521d(vfC{7o`H@qMuutJ> zR2tbFp*4Ez37Ht3`KF~kN8X9!S!bca8$8<&{Av8^%yMZ=%WNM%Zt#~n5S{JsO9#c8oT@kPSEyo$u#WqMtgdq2wmIHqEBHK zS|z_o5#y#`E#;DhuV53;ECLS@ZMM86Ebq5y&VXw|u}8KeQzqG!A9{xHFoHahkp`q6 zV}NE7$mV_8bUGVWPt2cXAd>AAwIfiT4PZ2MSs?9<;FNK@0-dJbI3t@xt&9ya_6j!l zT*KEe#}j)RI3FYvG6LcW;7U21Q4aLHyyvDQ_YEMMyricgIn@`&eStg}lof=RBz>G& z$IzKTmlTeq{7{W)mk4uaz}OL`z&K6~#MV2bkRyimt|Qcu7}ufw;%9HxI{Y90(PwA+ zT;Ld4N(yD+0bJuzH)IVB3`*VhL!;KS0SC`IbWNdZ8TSov36{pm5`b#a7j#U1>PZLC z%_FS8jzY#bRoaLMe=udQ<2h6M9ZQ&4d8FGS6OA9NI2qkXQ}Ck6)j2xDm>@t+dcVKM zq){2Hha<1+>p4nWu3=7N7tVT1%T7EU$23sOHCW3n6W`I=ARl>1ZG`S>)xil421hz5?(ztxu_%@^x1(&Sq1_av)pixL2 zLKj*ym|gbGO}5jabi&L1Q$Ik#v_h0>1BtfW0|J*OBMS zp>wH1+S~8v3TPU*WG!eQ0DD++^qc(%8|#{gG-;T#+1zUCwp^ zE*zl&^FyON_ZqeKR$wrHBKFa zXUqMGr*YeXHC$meOw;xY4cE(arsqf=MjR#|)6&;LO#XA`VArrrzS4Cj;Tpd*(q251 z!p9Z~I$m1D%POVpld%HLSxcUHR5ifQI>T+*Vb_Zxz@>MmHPx5hlYTd zG;)nKqc+ClRGDU>Gej_y*9{?gD8K_oXf3=mPd>SI7&_fYaAc?)(p4UTrEz+GVbcXi zC(`;L7xKv4v-Qg*LkzpK13OvUCou4{lT61UjX6_r+2f2TdmGfx{OH4}8-JNCiHl6! zR=oT6o7MKk2N%u>9JSNg1!a~XUUcV+My$KD#nE8a&*2!oCeu0sE-#`w)WU|I zX)^rN!4=H5B`SzE8|Jyr0#v8}B;uY^c2{?_;^E5=y z8k+_lJ)v_AT^JpJL4($4O$#fW8*=993_R-uq$TaW1z1(v);>;d8l<~HK)OS^bCc2% z($XCwf`o{439<K+a9Ug*E!v^z_A{B81c5OvXt2! zv02otugJ1mI3pPo@k-=}9lk>F&u8xHJ zc?0$=vWO%^@KM?~JyoCb_{o_srlhl@xo$-ac#!s~kKObmEdaZ)w*e`MJeH|4a7UI+ z{d^;1WsPk3LY>wk3@oYlb96W=zf$+WJNtT)!=@@F3DGuDhfcHw-hSRVXsvHA6c^WyPXtMJ&?Xp{( z=pmvGJR|wZPdA7)x8IXG$4g9uTJoq{^bEwEZnKH(Se{f1GgJfeUIWQ6KIHCyP9SXI z8t4~9k6iD6vL_T=g25Btnj9qYIsN3ZSm(hw9|u(wTufJ9(_JQv53wZ{LgSv{U-&Gq zMWz)Ya*Bkch3W~>CC9sgUViA8Vw-VAKIPePL(mkXo_{JzyQ4l%EZJ78o@mZoYzk`s zxRFuJ%8t5-#D!Kw#>}NaGZ=KIVRh&hZ^xbro*5j9)k_8Hur<{@G_QbO_wizk;L{neugUmy_FmrPXxJj|8{7Q_x>BL!rT*gXxTULN-V<|qYp?MS zVf8{NkY?!whRs%}LF!c7)+xmLvY$kG5bl@mnlMtL$?7GA`=-!+HA;Cmg9D=g{`KN0 zzjocAev}TncrnwJDsG_mK~O@NFw!qt4(Y^KQN7q3O z$E#zzqn^eaUZ8J+JCcMpVaL-(5qhK#UfaKQ{WIT=lM6BlKXr)nN?09i=jO0 zhW&2R4_?6Yl3*)5y?4lg(}v+^2iCvyCbbLf>4B*2)3)v}S{U zV#x1=wfBnvzTe48vDh9SLmF08~X2C95D5|4dgZ@2eEpNaj_=dbU<2;W5FnD8PW4&mEg?E)Tu-Fp&e zpBVr&`{+*|!Rs~4{lx{N|NWRpsiDBYlm16}qJ%L|5kql7eM9NID(WcM~VITjeA?CJ*ZgGg?=QRSFs2v5eq z1(&+0tW4*^w&Q(NM@bx4cS4WH40@vq1lw-rp!wAU9m>1D?b%}=J^9NX)RwTn$KF7L9j-Xn8N&Crlw;QpABKE6x{wv{+gp+=(<`r$5HL)x1_$VHEW^y)CZ*S z>U>|wKJel$U#gC{?vS9Cw8PMlk@TcLM9vQnDUfThn^L7W=le z5~F>l>Xt#J*b5_i)j6XA2}c3q$@li*lvXt&X2{swpI?&N=E$S?JXrC2F;44Rk75qo zsGtuSf0tNA-ni_@I;C+_L^=MQPX{^jE>%U${EVVi(Z03kxA&`0RJ9x(#%o5a?|2qh z)d*Nb8_X{k?O78Idhxh;J{}Wn^~%=^Z&nH+(L)dQlJzW{o#(Xqj0nIpwHJ8TKe66} zZAhEP`OMne6g2gKf@6#@qd3~p39szrMRtP_+M6j( zUOOuSj-bTU+Tx%tU9G&?J{O<0CixyOFQI!dyXbdg~Q7FPYmvc0{Ew?a1Uu=~U4bT|DDpo;dCxh7q;a2D+x z`ctV|E~`Wdvf~5Mx?6+-%Jq{g6g}^D4cUxzSn?A`3TXyR=5WHv3m4sKf> z-liU-M|~T2aJ{ZvsG_=Ze7vr5n!eGKv{tvS>h7Il3;jK()`Wm3g_jKKVNra9p(Bxoghz7ApA*vvs5U+O0`B%8E` zNFq`Pa?8u|J@8@+-DYiwHB9=()WS88?pmS7i;wXkJWw~J?Zr@-3Bhz(Aj(SUeYS7S z#U)g=@Bt}RhyRM6UMq@jL6=a-Xa1)S4X3N@rvavjBhCbrel9&Xy19Kr2E6&c+ASHj z7ra(#DlLm7$q;HVH7Oq%d+a+N1tav8ZhgZ;xA-BlnU`R&2OYyGQr$x*oy|;IwuDWw zki7RjF*k(|{Q=8uYz=~qw$dbVvn2a&fVoG7xSXolRFOSWM*aM~N?v07TlY?njrNHi z%h1?ZJlxmUTVQA{$KU3eQ6X?H-hHrZjD)$>|A3q&i@SfwjPg?}E4uPT_*ZI6Wnt5P zy2dSr=h@pGnjj~g#@YwoX>Te?77~R`p?R_k>TC(!~tbmIggoJvyw9sk|(eskEwxM0;pg0RG@=q4e5j zJ;q8cVPC3`M<6-M`^wCx^D1eY3#qpvUy@{!_bPB}?V)ZwImAs0Ff`)M5n5fLZ^5k- zRaRTA6`I~&5lWEuVvt^mxRcOeg{3AGBF0a&IJqBQ0U*o{QQn2Cyq8_H?&0eW7-SUz zk+h)lY*yA>n!<7(Z61or3`{TQ~JmYE(DS z{oRoK&9ADNyLMMvlKnHw-7th;w=5~&+jNzCMQ#FDgHy>L+ptE4v3}G{C!{1FZfr6^ z^;?QKWWU8i*Va#rsYc53zTauLsUElYizrL2#hu3P-fo4+d>=dbY6SS`dsfLBr4${D z%XQ!INSMd^(=8V67p%o6g5cA#R<7hm6_v8`vvS_xR;s6w#)O5@Ca{_-K_cBI>PAO$ zi{Q*n|rpm_RG z=YwKG%IX$}wTcqAD3$zDe*Q1FQF@1%$9by!Dh!;PCn9IzZrs}KkuTrDHnh3^q=>>Z z$nsOchFhh*oNRSo!(vYOcF)x}5}}+!oZGkSPZXrH7xQf249&mR=t-uga(b}^N-a2~ zQr~6dQ2a(*z1Vip+{P*Tjg=%CHqbNc8+oXAd=eb_<3qq2zb?uSt;5n3fQDamKRUu| zh`N^+y*&Jr5N>$(9nu=~CDN$PAle>@*4^2{+Hqj^q<1%co9exFCg4-R>UZPxe?{2jOq~@C%0qp zUnDVB$>ugNXScMoZVRA$R*c=93!zV>a7JF++{$jyNUwjyo(5P&wp-B>n1`622Zudv&N^fwX>&F+H$1Gi zSt5{+_35-X6=;ruF@39*Z?WH61xs4M5bOJBj&bBOK@%;m`@K>LeCOX6ds9FkJKI7Bk2h zB}~&#Ar3T4t&=hHkko`cH-7s`hb;14S~_k^QbZ#cOBDP?Dj|!U6{etgPlFi^%xVHT z7!qAHk5HGSr|!`O+pbqU7Csc0(HWG~BRE9Ud(K(mL`(F806SNP0xeA*(w@G5$W8_F zp9P{KGxJMbQ?w*4x7e6tR2fnwLZ_3BMep`9JLpCk+XS`3vh|92?UJP2Qns|Lzl&&B zTj(MDu!XN-b#88sRq4opZ?Ft&`NJ{%Ax@NU5ybi^UZbU}OInbNdC*sU}YBfuyerKkPmE>j^_NYiumwx@DflMQz zE94Yq0NCl{-PE`8!1PVfs{q24K;5;(iRMSl+7hjDIy&qX5{m~jQwK}io14uegz2Yq zW6iUOo$tBDY%(?)DQQSV8L))lBpMaO|x2Hfd+dvsjg`-at!j==EIB(C2z=u`$)Tim1o5X2+a6{_>*1UrqHuRn%>PU*l04vbzxv(M!6!N7`z; zdOju_!boN@@)|mmykm-bdN{ev{2(><`AZiVw!%i>xT&auh@cL^gmfq<*j-kN__l`` z;A*Yuc*LE$p zan)3)hBy1 zV`JTOYsYtdVRguzU-w z$F+|s0SC^gd&x1CJ14ND;(-s+A^{p5Lh<3{C5Szet(lsAd*rWcYNwm@ZumwtV2_UY zZwINTb&>V$W7F0h3~pHCiMn!p+)obqNWtjp`kq&)SH;MvLRRe7NBS?0)#a4}qE*88 z{QP`2z`tbBS={-GIc>aFNJPxlZQh&TK}Pw(w-ZdCY8928jhH2?5?cI}R5Rc`TZhuF zE6;8^1}NS0zc2cZ6=&h~0$he`{yORIz@n zwa6q_Y}YjDKa=R&5_RMqiWSP&pZz@9iE%mhZ5y{YV7|zRBS|R(nSVypkG@lnnx@rn zQ$zrdMxdjRB{b3d*mdo2*sgb;xhyFDYX-^D5UYT;Ux%fh_cvjSvN<-qz~zc}2>8*i znbcXYWvPm}rI7m?%{>sDgCkz3EQny?ntq&pXm;xO*_nTIQ^+;` z^YUWpJyF|`05(tjHxHA@@AWK(W_k)9FxXp6z+#i4Ntxuc0}CX#Yxiq48|dY-H`%1B zZ+LZX((1t5A$jf!roV0viLCh0Fpplo-LZ3|3CN9`*69frJWvJJY9dDp|gWjz2Ed0#34WEWtkI3i#l&C?OI`02(DVd;KE_M15E znK*wfma=?*s*W1V`#6Jj_I97XC>w-0)2Lk^tmjF&!X+qZ#hf1_r)Pqs+>sZTyvsj& z&u(=@)WzXu7IO*rHGbtAZ>pIO8C5Ju*wYw21lZJD(SRb15yDoVvLq@yDMANv3En&! zd{i5X*Oj>q2xFMa<+Unkw6h;g4ru6F!lQ?YeOpxQPg#8~YaNC&ReT$`C$nrD5Um5pY4IN_5%MJwK8q*rsNn0 z{rreaU0@>im|)`i2f~-{V9B;pr4o+TCn7Wi=#1Y2*4nW{dPI&L4!i|Fdfu^K(cRg4 zRQzfhO?Ibq*;d>M#c+8J{N-RlF}9#LGc=LUqmn=MkuJTCtZ5B=XUD%|DHmL-376_f zGCmNEPdsWTvNa@E*qnXb8Y*NWSBF-Ogy_<4O8y+be@3;^MX?pA)Q@D%fX0fI=eCS1 z%bK<5$-L?1D-?4qnN0)UY?sj=eT2s?0eD!1vTYPukJ6B*-|E`@ZOIV)2SlOtoUw-) zak1ArRVr2M)-p}{#n9n9=@H+&89g8uYJ3qXO9LN?8lZQdtH#bh5p~;j9%mRK ztkguuVN2TR_g`udNTb_PGmDuitT>cAd-ZZgfSE>Vxsf)Hh27?61P;7LH)zM`3yI;6 zkr`S;*YLk+hUsNG%LK;=e={_^X>7VfQccb7;cww?W+e-gkXvjiC1JB7a>PxbdK_!h zj4x}I{{CZitb%9;=xu=-DN>@=^Kru))?%E6OK!zQ9GaND{g~`D38rc&QdW1VsnN}? z2}liv;2q&|Ji~A2NkwDTz7*|Ob01hM%k>zQP6K$$a`&;h%{n%=U{A#=pz$Y`(HBv_ z=88?2Cj8nKtH|qpbDn{@8e3R3FT40tEn*VhNI!%`=DY91m_D^BSv|$&?d<_!qvTh< z&!WqX8_bW$o{i3W054@XuGNR9K_dj86I`ZsbxbO0M82&xwB6^i!PRFnuTbDd3OWf3 ziC*7&m>W$Cz!E4(RWN@USlKX8F2dF6bh}~9wtp%cH|N$BJ2wG<=k>71qen2DsKie( z2(7O9XToDn&*;iccgc*Y%dLLOy_?rjPW-aRhvRLboVcY0N3RLD_G=LC>$fChh0{t> z!csyG&-zEo;&=iiVwZG>*O!=zaIkDEG4!oR5qfc8?KNsr0oT3+u)GfHupi`e#sYut zxKy4Y@+G0=(RRk637bn2HXu-LhLL=FR4e(Z!I~zOA&DPz*g0VgxB9Ef&X6e{+4y=p0=M>X)F+7k3zWr!jNy=_-c&!jM^rGNbC*HL$0f)_*58M!~}Z1LR|YXDNI!J z@Gac;knxA4df;=g5xx3Um&^F#13n00BqZ}D!Qd86u;LknPJUpGI?@FhVd7CB3yD|_ z1(}Wp-Y7HGa5_j?Ua^!V9IDuWgJpJ{AFv`!ei_VE&srF{-O>ejAPHEQ7@pJ-)i+uq z9%)t_&_c+MovPV*{H32jvyaiL^Z_0C**OM&wpJen1ND=Jn>q~d}V>D>q^FUMz=BkRr+}R2;=Jmr*S}|g-MJ1?hWz0aPo^V zf;R3WKtw-|ly`6vH+_HO9stiqTNoClU8xJMWBEq zC;|IBlo{Z7$=^wMQc`kyW9R3!qya2m+jUqkhWBpWf4wfv(8OUioA9x=emi@@lzz3e z&ezgRS?{W2FM%A^X1X*k_|NHJ=*epqc--I`?8#XYv?IdGNYrclO4W{oy@KF@vJq(f z#DVGbthC+~psCwA_Ngt2;Y2Y@YJD@Bjdh&{hPz#pcF`vSH&*Dl6zk=m5b$d`Oy@E$ zy)HnPPSuk(K(iiI+I%`{;m@sAYl$|xWZD1CS663hNVvM`-eCLZg=^1C${xBQD{4fO z+>mU!+evoHj9-K{ayLKLN+W&gKulTw!2^vesB5neLUdYQ)Kef6PB;@;5bxu?;=)oC zkr90M^`7Q%gRZ`tNyK&ahwE`3W5pG1cn1wn<>?WHt%UI2#D2`HcR`NO<91G*lBOHT zb<&k_Un z2Ek{Y1^J;rQgC3WjGY*Ti5fOtgXWU4gzR07;efkva13kccXaaXP83WcmBnwMzzbt= z3p_#0ThAveDxnYS78K!cMzdUbK7 zQ~-w)NvoKC%tRBce6DYtsJkwKsoN_mOaAD7&!c6j$6a@rX0rlt%8w$5{kxqt_^c)j zoN@;Ju@oYrG90XYA11;2@tE_J0Pr@Lj9uT|J{-ZP`9l3v#)`%g4>nz8%BH;jnyY)2 z+~=}}EXwC0wUPDD&EXFo6mqT3@{ap-S2Ko5y`j}ywB(a?o9eBc4F{2{F;XD#T+>wY zA5zxCYMRlriX&6|%-kl;H5@?f%K*DL!w^K)nJr8F>55v$+~XAFzL@bi-(s~lo&K=T zsL;Y2rS*GeKd|CRFa~NR`3o_8v6FYbS-gDMz=3DMjx8B1E@~)48mzoPXIy!t@KMO* z(BTB1lTMZ=$p6Oe``Pl`%r_?ih5d=+THwDf=%6ixf60B_4aq(z#wo?Kv6Fin^p>dC zvCn=o3r+XFla}`gy!wp94IoA)Zi2}hnmTKh2zOZ_3xQtWUK7uRXaU0;_EXv`91g_m zAR(bApxNeE<20EM)^Cp{p^C-(IKUmi%igTOGbRr%+U9BNg0pA8=b;mu6960ob5D zX`EgdIfZ}H;cArjn0yKboD^h$(gl(x_hG@uDB!GO>Sp0$V`>M340&TLDW_>+1%p8e z0|V*s$GZQ~831m?1ZR0uS4}eu2MZ}jJ4Y87NUf}?ovQ^57WfD%S=!Ow)W!h@4N@g- ztm*DzX=-Kxg9?5tX=mYJuHtBJ0fPZ~rwmrjSk=kY+1&z$;Ew_<%uMYxEL@!&9l)ZA zzsu1u{(ecIql-Pb&C%V;+QGur^}8HRYg2O@2P=qNyWbSiR56yeurzhIb5pi)gSi40 zAmQq2;ih2kz{>Nop%=eS;M~)4(=vKb=H^ntVB2~VJ5(qWH@_+epdRPm3q)l6yO8MP#{-? z9Fu`FDLCVTGafjTgEN>E-|Ygyf(V=;!XUswj7I{_5R*bE05Lwq+7QM-z(xXRY;eW_ zXNdLSz!{<)gkAXHYy!@Z1XV5xLOpPT!u0(jCf}?6QE7J830i;F{Eve3?9lG4glO|U z{cdZnvx*-OgVaMI|F4+uDE-c+KVqZ#z3Cr@>;ALhAZI~4L9Ge3uEyEPKNPlSHP90v z6oMq~--;h!ed;V@iTub!TsLhX9#tEh#?8N^znNvD6* zPv8$E=|1-=YyZww{>Ed0+5vJK|1rVBTpCN@^;B-<1rL?rSB{*Lsa{KFXY!yP;Ktc| zCE$`nSdX7 zLJe-K@vV4T|`bJp^ML-apBJ(WGLu@9`2+*#vKqqQ8y;x|Dy zC6`Vvdk41?-9+q6zz?>7j2Malq|doJW`KL1tD_qD%uDMSbKrAykRC1jY?c49aI;V9 zzpvwkI6{njX&o{3ZwH`=v?v#oI3&I3{9^X+>zHwJfvxNRKgAKsZYJE zP{?8*k}eW@E}Bjk-Fih}sh6fTaNwq6VV|aA7Tw{>kvpsTe-2GZ#0g0k4gAt*LW7Qr zgr1A$#6{eMEQv0S=3HMV-OD~V*;IzF1sE30S^qgSe}+bvMiUx@UxX$k2!*7dCOlM& zi-bbW_|rlWe^cT@GC@LQNcu~K{u-HnX?YZBf~T5%EmJW(-NH}co}A_XGBOeUhW>>n zx-^-fE0n*KOn{%z^wMPd8KLKr>B3nv1FY_)Jrhdrd;UJhb>+9Hrn+xba6kR$$OMfs zFEY`k?GD-Af~1RtUfPNLjL=Kl9kMwGNf&7f*`$M{%dNX1@yogE#dWZ_OOxUXe|tF* zyrjbG&QD)w0D<8@O$znz>chbN5KTgMfLPBOp+v|B&!mt9^~2x83}`24rPo;}=HL4M z_zGREK~I1#QP15kNF)boEF)1!r_AQUms;HmyY&75^a`#&D)V~{)XJCEj`VKLTSgmI zg{R#tuK1B6Ex)84m=G{-zw7ej!7po9PKbqA;)E|(#^Ub-`|NqgFKGv{sQZsf{a*9S z+J&{iNgY-Tsenw!c|xh~RgX{%`=*j_s@t%4Qn~=->q9;rA^gXeVeT z&sisy-}?UediAUddIFSd=dw9re+Wa=7oeO`HF~ojBW6hdPXa2>-qZhht>0=4&Kh*i z%HPLsepVrLR{pR#1*sRksPTIQ2=4Gt&lJAs%w% z5JEdaD?w+S{yKNk7}sX2eRL!j-{a*R%uNma>)gq$v(f+U-N~h0Fhv{H99^! z^-SYq|Gy41=(B|Xdzi5}^bnE;IRVSwZ^^^IWEA-8FvIxY!n1RyE%A%?sDEkN%CXe0 zD%lN`3m5ga#NcNPyl_1aospoP$n4L{bcoY|c7l2$wzE!`UuOL6{ld8mq`&>$d9LRF zYwi)qy?pLc;r~)h34M7Ubii@^WJln|t# zd%NFJ`&-A9Cg7Xo(wlAnjVb^62EnEF03h5rccS>e6jMTwP8Q~=0gnphFV@263*Ie!3D5~gR3KRkohK5L*kE1{VF%g5q2o(s8?vy$S8 zZ%{*9DHaRQC63NTH?uhSvX>@KiDYPxJa3eAY#Ko85%!HIKMfJt*&zR^jeiY4tuv9A z#!uz$OF^a1Bb8@25$qeA$8FEWPwgW7AXDVu06&N~KbK;VnH`cY4bgc1Fi+q7iA1Et zX3mSGhhyhLRCLh{p8>w~r6DSku^yViGy+*wZi^1#V$QHLze@8bZ`)~{+KT9 z>50zHzDVe~Xs%yGILI_`X*A7Sn#~Ce`y~q(C|o}INKXDVn&;|Bb#TE7q3BoEbb#LR z2v>buxhG!_#~W<0e_qFPc@OzwF(h4@_eA;`ideRMidlv43`bmYj2wTH^W$g!X21ir zIBSIR2ueWevw9fIvx9T7gaKoDX_Mv$)+T>MGM0HfZEKROkiYWNCOsD}=)T*f;VPfr zjT%B85)bHACt4RGC^;9dSuk7|qHyl|=9k>;)&0GZUhiPVGJLH;gpzxOKMfJ-nZ=-U z@xP3npeI~(yE|W2D0H&CNa(*$zM@|tAM(7Ywg|d}as^lKm=nt9ga2j7LLI|J$eznn z2w;CLPf3{70oA;ZWU4(x7DLNI$A22lKkE+*rkK$g%^>cFLz-WPN0yg|M^Ki7LsmvW cP=<@2k4I2SMn;-bkV}U1f2_wF0_U*1z7{Yjs!E*4k24J>An5#FTmS^z>v32LQms0{#Gm=lkKi(v98M3Fl~YoH>#W zvTXRzI7s+4_Pv68DEcfokFiNefbbb7(q_zm_htj}_#>do&zXr1szTiDe&mC6snjxV zY`iN4DL&;hZqa>{kzO`;#bf+M#@+%8^^0d5g%u0{YD>k@0r=bi00PgK6ASd{wefFw4)GJzU(#n3yNrXijRWwn zM%l~_=wf4L@5(OcVq*y~h|+|?gfhvQy$7-@n@Bm@JGua(UwQ=NLa`baE;deX>{5;{ zKrK~sTcCv-;98zl4C^1XKeYosNd(Kk{0Cag!3Ah$FJlQ{flo$;T99;cG4oP$adZN@ zxOoBOOV@3nk$e5@_n$VWyJq@{o-yW9W)8|`u697n*FZ^ESNHcoOI0T`XLlfgsXfaK z11jU_X#X!oFW^f*|AF*!1O5xSrNY|!oGXBoy_u^kz|9jB`^V@H-+sgbt)Zd+!|LDB zkauu$cLNZt2yjC4D&^?tVrk>>94S|TTt=eAbGiXCmNssVF1mnN!ACf#xQvF`dnbFK zi-x1Siv>{G(GmzSI!YpjMn(qYh9s z{W+;pYPav8n&lmy8U70Rw+TK4Xq=R6tlzoWI9SU;8T|`$WT4Ldop-w0fLs*l_^%=X z9G0GP68{77@3~4jI=H%-Ik*8rYhE@&^Y*vQzghkcSg8ohzz$GN^8{_}P`)3)enYla%^m!=&ZuAZ|DE=pbKNAh; zEIZixBQ`)cGift7Gr-1&%6Mo*p_%ztm;+Cd6`*%xE*#9t==PKD%r#U3>3 zYGxL8X4XJ}t6bQvQ1u87yCc z(0crrLw{7u9}_I=q11$~ynm7Ys39eqDhz0>)qz$(7odX$(DJV!LPPBe;MU9pLWTaf z@&+(E9sY^e_JaI%7#s(Dn4! zm`fV)_#iO`b@ngJUpt(S7B&4J*nj#0C|BaH`0K<1{I%x;uAaA9s%Lp9{3q@5nFg(T zDEv1XbXh^+ztPD5B>h(!#s5Hqo@7w?Pn{Rfb7A|F^e-CSU*mr^f6M)o_BZbD_Mf!p zQ~VG3Z#4M7Xn*tY{x!aSo(r^Kq441PkdW`-50Vo&rdRF4eHY`~wH&fyN%H9$Fn=pD!p}zx%hHzjggd`S17tX6ODt>_GDf)%8z1={EoGcJBVe z4#hw0ApWIZ!uH>Gp2>gA1KR$d;J^8E`yX~FpM{}Xq5kOqrC!$V-*%wAe~+FA{{{Y= zo&Ur!{3Qp?k>p?ftbaV>{NLJvK6?H=C8!SQnt--Yf1sNR6juLX=TFRkzeDAq@Sk&s z;-Du0^n%VGx(=Xg0Q%tg_q_jZq4e`-1<)~+2YNyI|JME7{S*EY=+=V)gsG{>VW1L0 zw;&ApH`3~VYej}W;uyLVSOEYO0C{OiO%P1_!|cSNfhYdup*6oXq+&#{gvd3%*2PT6 zCAEcu{{{{gFFTBxryJvCH(S2C{0j;*6iauCpg`6DqL>#9QSTLy8Hz19Gz}BeG}Tem zS#$(9iz?g4?lP|`8wReha$|dh}s8 zY4&z^JzHtppT;7ye>h$p>ev-|j>7^rh77ml$ADkDTgtGZeifR-wqKp0z>ekbxKTLIc`c%Gr1K7u6{B&KIXjt z;vnOj7?90S`zCjw7ks`m))5Nwy>5<@@6YvI^4gYXP^t5JG0EU_SkNmXyNHTud_Csn z)N$2@L0)1^fUVYz`<>W)`@2p_w3%seIRMgy8X3D5`Hi2Sr3VY))nq?Cx&OVq{)AxZ zjP}d!n<;-6q@fp8&Nh?{9HBwUQ!p4MX3@z>*#qFkSg+$3`E`x5s70qk3}W0zDWZO- z8yRxZWa9cpNbDy*{h&N96Rm*u=pTa}RYu+GX^QClhJnj<66(Czc_(u21=#`lo+tCA zY{e;*4mYD^8o?uL-)>I$#cv6g7)eo$p?m zq*vl}P~s_w<`uNrZ~{lUqqA6RUCKx8enx=M2LdSuYXD5^Cw% zT)y(Q1#09{=7~J5ov|B>Jl)@%+fD|RenyBU!#GG<4#yuc`Q*_SOXl_V2=+~o?Q=d; z5cUM<=tQ_EHEmF$DP-!BllwNuXfCPiztOCiYlEYvR}NWZs&w>VhN(U*cOXR@i+bIj zXTUF8bmxvRdy)DPimR{3mvfP)Ok;!2*Grw9^lzR{yTX$vFB)Ib=X|oYY;F6&^(#eB zS*WdRmx`z?qeP*VJuWETD-sedEcLk8HSK>^N62lY5D|fN>Jbx>qSt2L_!SiUMLmec zBpVA-dwpG##lk1Kipz&yLYISLA)NGcZ($WrWhGKD?>9Q$h4Z%J59#%{-Ka4!pnHN` zm`VCb!57u?(ys?L8c#BU*FCCrZOH;XHL2+l;g9(EVta;@Ps#)%Nx^Pm-$L>Y7?F-% zJ%zZNy-oD5Xsg~oym-#dtz1|`ayT4haBHMA8lx{`+oX|$Z?o!VPvi%CcE7j_l6ESI z3(m4A2?p5$Ns}@Cjm3<7zRLLbWZ1G<+?uYQ1zb6qT{%7Cs0}1`5F@8YI#D7vE{}@5 zOV-+uodG%0kfUgsZStL@b$1B zYezgro6j-!wi%t~Y`+0*zZ$4>YTI3iBXfxM-JlvQS_mC|e&ms(1DUwj^+twgrdSty z^<^au%v$}7#H@GLQuq;eIvk~xgP3YIDY-<+QD8DzGVv^hk1>+hfZMU76%_%_O!(Cv z&`4bqPZ4*CI-1T+@oq9)hh1qO5EMc_{~ghakd(O64)Hcbb#Ph>C472hy@6RRe$g;S z?ql4omer3lRI7-N!Tn2=NDpvaC-MAPd$?jCzXL2c63Ws11V*|gmE8nO87h$>j{yr; z4HCYZA4-mNGt;_hK80zuv|x5-EtCFrJaAa)DelzyGpJuax6n1xvz!Ix3)Sb{KBWGN zD{=5sg=+II&lGH?4&KtXwYi*~KZcwJzai=D0C5aE-*(cU?EWu}!6~uk}uFfBKU$;n}-`f!^R7D@x zFMedOK{ud5P zHJ_}h&b4gvZ`+k>eU{is<&WZYW8sP^<6Mad8w{U$f-XPqT=nB7k_I+Xm59;R++sYI z?%u6}(Cv7$R*rIBNPupvA6mED+4aBqGgx7cfOIrvO%UyRE^Y0$FGBquj{D;2A>ZON z!dKADCHe(S4+Op|`f3=V^NB?6laLA*?oMqJw!Y)Czh1o)5bj~ITeZ%gJ2b_piqEs0 zM}`0fI_s!IGmv0Akd4i08UuG(gY**DxqC7U!o?nM9sPW@tq>_xC=f=H!ntZ?uv9en zV+pk5_Ad72>&d#|X*H%b&WcC{GHSL4)4S31_XKx)@swXC$Lb9S^3 zTO=^fC~H75D!kPX>Wd4OiNH5r8T|PI?>ZbU&n;b3!%}0AJbY}^+5E6BHD4HNgabWJ z=ml}hPXU2C52%E~JdUbZPHiUQ*K0Rt_}5dc`F`}t8sRXi>cZA+n8w+CZ>P#0s(V?J z6YEHPxaysQF}!t3V+qCX!PO_(JtLJF#>^U4OAfRVhGp#w1wO}@1&a={UwaJMehk~1 zueW5%DUzfFKTsuWXe{|2&H5}~KgTL4e3WrqDgBfXl7dT|%G|bzz&_Zo-T-Q=aT7v{ zWW$8Rdp{lETHnQqvpCw;QZW`I&ybfa7GRdV3B1&4m}mIpH7EDo9D$ul85Kexzt$bU zCJ6v6WQyZgeo5Y_frFmxLq* zR_+J)nY)|C05aKB2cHus04e@ngG7|sY=eNBFK8N6Yh)Q`ICntNLAQANqrq0Tiv(ME z{w052YZ3s+^#i0SZYJyT^-Q#tOOUILEog$}-AOHxjY*iWB|&5g+ZIlLY_(9lR&a3J zEv+Pn?81_3gb5qk5vfR#EWj@sM+1qSdtgL^OFWt2gG!FBF)1uETs{-=Ib}P~`}^)Y z8|xUwnQ**7*81;|L{9JUTtbv$;g64SFBN(X^@ge@2~vsS*!YNA%A8N^ql+J|EAm%# zu*Brc&{lI}Wa!2a(rXChj>vLX#0C>N(>2%%Wcqh0zwpiu$)F>5q}yUs_w@eA!hDky zM|Wwb&&9KM*w@yHxIL!#J{p;>hn9t~_nOjfXMN#*Bx8Gi0$IwIz2p-MJIjazFG_&i zd(4(G3`@N9f|@IoLAArst_p7{MKfvOFuL>m__p1BQ_b4y#h4%UYhW=-`)2=P!(`xRhUg#J+EJ3{??36rZ-*DzL=BPiLy)Hwns4t6?_z z)9UChs))bOlstdo-i~Crz>Iy8Q|lab=5c6eE`z|*Cj;urfOH#j2_pA5LoGU3#=787 zdZX7Gwc`LAFlOFHIsF6l?c}JeY+2la%M1 zZZ@*v2)B?A8>18eI>j`%cCDU-e!a}v;!mt$(YAY-t< zJzmf6TvvU}?|6ZlK%pqV^W1RP3N*yPlicA-U)3b^vLw_GJFSq%&-bJYzfQ0am$Rs` z*JvmGJQo-_kd{?4-1b@2r+eUSy>J^%CqrB`rt#cQrVr?QoLf}cx7vFAdhczzBCkPA zEXvpuNMsp7R>lmqkE!oI>X}4u6+aBS5^te6C}=0tcUN+qZcPS-#7;bQ@6Tr)I$%}H zm^0t0!cN0T zjQwKb^0ay*tePn%sdcy4f}Y9c5;x;BzpvoTiONdjMeZNWubqXTf>U+__xo3;^ni<+ z4Phgr=g~4e9$uNCAniN#K*b(-Db*Lu^xC4{N3(ZFzV}0pmM(p^B z{ZDk-XaYqv6%X0nBx}t1smFq58d{pB?dXz3$Cb1_ z_gcd1t5|gcs{ip~*XkJO6ld8gjuBcHcTLWzyA{@VYTPqnEV#ru-eS9P6alVliUW0T3c&|?Tkr|J zpK>4ypG0|u1LhKq+>0PCwBUCHSl3|D{J=)ig^p}R=~OL=!Dxdsc{A(nUS~1ah>}e7 zpRgAeVhCoQz|tb)C4`zD>e8K=4;%CPTwdwM9t$7#j*)X&4ATW*t0Q{`M}dgmO2a)# zuBUeWgN%U@4kNuIZi(ciyPW)r@yHo_1VW&WhBW;gR`pugW38GLR~s#05gtA~?VHZ8 zT2lRI9>$TP;PD$~s)@0$%_3-PZfaPa?HT*0m8C#`OqBJ2ybTKcAXz6~`vcKRIabeWWmp28m5<$TCWAy8J^I=Jj)54;2@+(HT@G$oxZ3#+32l}bXh{e431`7-q zI|1{Uu|k)fIFSWTM2R!QKswmB7wSmwb=DFSomDk(9q+gDKBwh)1h}qa%uCbwac9Fq zYT*ImuT@&k@7FC~Aqb&Rw^$9FN(P4k*N*J*Fs|1jrEU?8Gs)H4d=4Yiw2=M%w;0^0 z%B7`@GW?DQB`pmC-z+Hj{VOJXJQ!V8u<3VReKcT6U9DeK#K1rLO48qsFo!^i@#DAE zX2ev|ScyQ^)fR1nE2H+J>_-{q2_8|k$(0fR%a80A94WxmcL1m|scPZ#1h8xHlzK3B9?*>hUs93=1})sU7QV3f&<{yR^t?t;M9~10W9Dm__EBg!Gtt{nhAB{o$;4N@^ zUz7y~FaE?8J^Ho&fv6Cqh)yJ0(tWT9*DVy~hJXsOXC%kXw;VlJ((xreW-1o{X< zvxrka%1vTghYR1Q^_x*o4Ra;Zj#SChlFW9NZ{AyF2)f4!)bsc0Ha|1@RhPZ4Y*a=d z#%73uvh&gkzM$^u)FZOx9=QwO%RBlpXUm9=|xMKaG|;qEStI(|I%-oo{t z*P_7UmJ%;cHWX~N@#A;3AX-*5&qwjTlV$E+54usHPM!NmL`XS?hI(||s=_1`#_gE77qn~4WL+ZyH!htSl zF(V(UROABJpy`$LCb7{vX|6l$!Z#RUlui?FwLcN#)2Xi_KFV-2)Fx^aKMabg<}9cb zmZcnStZ7o%V%B$VL3#^DtXh8y46pY%)A&@*OqE4gdSegE?Z$0cwBioR?Z*=1-x3VG zy{8xvGHei}8YSftS1|j9non~FR;W~RR$a~Iv1(Rt7{+jL>>QV9>*-095q2Ps|Ix)Q zE)((i(x(nDL^YjduXZWa_9~D#B}HrP3-_{$6dc+B+6dLFlKkDuy_-O52M4dNp7pz0 zpPk<;mlj2_$180T_C=TL=)CkRnatsw9Tb+v2264P z6Pb*j)I`EAb%SpcLiKSEuTPN@UO)fbtd3&)s*_Si{jp6SudvTZp~vRbg&7Esds2!X zckNg*7Go7r$X5EEEKyuu6pRFWPz{I0%3m=<&EA;+cT_wmCj&2wT_?D4&e%)+F>|YU zpceP@IM70jmPr_wZNT{H)TiYshz#1C|?zF%hK#?hrMvM z>@O~PcHCC-Fjw+Ot`JIU;XrDHqV-rHgo@?i26`aBzi2rXk0+Vr{AikjoQ)#XhHsD( z|As@|PmTh@yo1>*-*LrS^u`pUWHkk+kFq%3EhCgghZ|>|hCE)xl4Grd7gM!y%wkPB zBa_2+5CiM_yh&K}y3-oJswdF+_4)W$xF7Ar=2R#cA}-^o1Fm%hDK@-#tJWt$K_Bt! zzDw`cEHs`CH>iTIfYPJOYl?@XiM|^f&WltF&fhYSC;H?|7U19IXPRL#M zlNju$XlJRYLS8d(X6D5mYZcF^@gI@`nA!|Gc#X@~kx$c(DKA8(*yMJ4>pGIBf7;4v z4}DoF{SqyOMrfQ39+67u`DsXW?2r5p zR3BUYUngL2@u1{{cx+8!8>JaR{2y<=VIVmiidGWz$Lb!hwA`~lIX?Bg#H9$<*EgaI zJNTkz!62%ubMzf3=eJw(aL}^(M!)Cu{X(nqaUIZBG1=yd6P6!iW^GkMcA0g5pj3hT zI9G49J`kPk@{A{AfBTzOI6oMv8f^U=;ny0ON5(*KVe|qmd>pf+rzH~EEGaUenGc?K zcW=KP_kpkuJ^4tqQRj)qOM19`Y#2_5K3e-xkPw*xe8xp3P{DRG5fHK1EcQ|&6JE(C zFC|szDv&<)R9QsGW4MF;O4D@>J#VCYjqvr_IgM;gIjKx9vPX{w)GKDC(lI$=-kE+U-lfRXI197)GzoZXOjPGvvkLSc}nBcc`nYHhDrC<>A0}403 zsLbU=;*-3^F}yH(p;1BqR&7l`WlC1S=w#c@K4@!g6`4t-xvE&i`)?xgH2uAtCx zWtVjs1g>-TLj(EKqxkuvxZeHxMa#*V_?e>`33UL3O0FDXzTag(UlE@E*ISw-axx&< z! za)lqR*~`yL41>Ph!8er!z%-uy7*cL7G02m<*-2&Bk@dUT#7O5(+Lo}@`7Mf0b~j7V z%s-MT;-xLas4`n1qs0#yC-Ifg$SFGWa>ufY50=W1-6hzrFdNPex?73%J%T*m#p%Y* z)QLRrwLV8iaUw-xpvwcj=<9Bhi>7Op$RlG^U6Nw2)vMinNRkPH^!x$r`V5mvF1pNi zk?$fwD=A3lu2-a0$_?oR{UN}Av*BsH_s6{PQ>4jtsy}u8CABcQVA^5oiI=K53kBI8 ze52p#b;c6uM#X8ru>WNlFs2ByQq2#%xqQpoNEIS|kcesj;X()Rvn#u)peIbr!q~21 zFojs=oo*~QlYF~DCQuj7BW@7ll}Msjx1kk zxK*6^!fMEov@}s)4>)CICmIZjv&+|F4spjRRYBaZ7sq)?uEZDON1yFYhN%@neJj&7 z3aiGtuD4;I<(h!@!$7)wAFf@aRI;Pc=E9$~c1IXT6s`?R@_uio3OvwGgWmVk=cmna z;Ap3{9ce#|*#>#q<1fhLm_Gws)4^~z&5bq0cj{{%y+}hn)s2OenNLOu``FkAJpx=2 zR>W?f1uT;)MFfHCE$R5%Q$gd5n8!g!?;6_ChE0J8Kkim>)aGedF;g{r3s1zS))uhd z3v-tv+Is`4-`BlIFKaW7_LF>4il(isF`1)sBva-jD%pc4)(_iZvb!(sMSG9GN7(r$V!h4%8A#zViQiS0^&Dy$0lPj|r;pB&+gBADQJt9kHn8YXxy-eX3t~|^j zl1%CwX-2dcAMKm_@Y=cQNqb>O`-*l!7Voo#2rFv|1MnBW{B#28>LP$|?)|;)=t#9G z?GjG5^C5nhHrKM#1u;*tRtj~$T_V0;cW&Ku<(!zr_@7$)?@sSj^Y3|hCXL3$3!oHE z)l75*BheKuuH0R(N3+*r8^7+D5?~1V$(a^tFA1boSg`U)SPQT7vy9gdPA^r%a2?BhEyzY zaX8v2|K0U)&k#W+LGu;HU>0*&O|it``B0Edb0#so4(q77g$fbM`8ay^SCtP|I?{>! zu3d55yd(=Z13S}V*HI-1p5n_*wG;xsZ}oqD&k6qfzW}?h7jI7Y1(SWSbmQ?VYc~wV zOn-cA?Vs_ulM}P7kV~Zu5n{fkn&ADW!nRx8kVuzMr`J?n|2CUXBET_ zTrO+U1rHVf znv`~Z!s=JwICj>+)fSj2=BZN|a|8drd>DwmhlOd?yDsN9`B6{KE-|7yG>ryM5}0uA zDbEoB#IkJZb!DmT-S+HGSv~C%r}Z#-D*jSNqtar;tAMFr(!vZef7#L2KSV8VJoBo` z*YTLjiq8Mm$TCGfjIx-N@RfH{$=k`&hd#*NHxmn6C7aXdkIyMI-R)pK^ptf52ytGM zAiXn=z_-OT|J!5!U3{b#JN?F0eU{!&a)|mMpV`)K7OO5h%oCv%Z6dgW_YO@01I<0Gt!klp)u+uOkHJr?M-MNLTdr#SZT-4*4%MU(xutd=!W|E4NP^n9U?xPE%o2=>|)o)b~n=0I72yQ-=pN=J+w+-{ zVzMSl++jf_ABas~b$R&5O8_9XG!Re3(8~^;lQk1y%&1z_t zP@-Eb0|!ogaD&NDQXR79t_*TXM&qUCUZYw=SlX5Lv=GmnK;p>k#rsaxhkJ34Mn3*H zzv!*ewjl4>VA_0GRRbk2d2^rz`cLORN6DB@R6-|1x`I{tOJ%=n4=`_CYJC4(v*L$^ zvEH5!XQgVo#)eujhr?RK=j=z}o-l?CaDrql?)R)yHTFi_m_fU2PWvFS{6K&DLF1+^jm4$k&)^1EZC-2Vp`(mhaX?9vF3W@f3%9GO8X_v*KDpO zNRlY>?VY^^=g?A21?1#{@J$s8`g&51m#c7FayGvFrTDIB`e>g4pY;??&h3J}RS5G-5fI~dl^D!uGu*Fpe&tHjJ zl>cd*FSjt!c!K;4$vhoz>WYoXY=mBrX&dfqz0HdOt}sIWYp>I{-VCyLGm(D-;&kt4aN2vjT~1ECTn?(iwYJ1b`e^W#*2m((K$`hbC3mKYF({TaPR_5C@Al~f){|i(-<|1F}${nvHKQ zCvA999kAAxwm3~Bj){XaF0h^dWrq+=s*l1Aee3j#OHeSIEq!xmS6IALtR*A0_pyVB zkud+PBYD#2)3pL|LzCGy1nRNitI9~gReAYr6cA!xh}c#`YYk=yQm##WuZgAYg=_F4 zER(4x6Km;duHsisrjUj5#f)ZNTOK}7k`}SZ4Q(>sR4`R*acT3UjbvGzR_56C#YM*% z4`y;C704Q6jQAI-+w;F`WkIFUvFi&d0%-BHsE!q%$gRt``<@zc+5`!&!yxy;Cd%Rj zH$j+noJgwevjKxVtpv22UWg%1jLhAZ}U_eB1Y-}}W^Zo^W1!Q9GH**eFZ6rBk9g=S3QO@sfPqaUP)<-Ri#fuh-)zItonXro(nG2IFxuoe)e zgnboH4xT06_$`q1>HIu*?!H2Xb`aITm-|UAaTskvjjl6LKsK`19#K-Ecxc$Lb5@hL z2d3uo^BJQxj}%_@m6BDNvMP{kqKvhyz_Idpz}r=aAH4X~i}3=b9l+zl(HF-lTrRil z;%oVG?Gu|-@y_;dTiOlQwo4AVUsu0&J-kgV2HbC0Z-4Yp7Ie(UK9H!YA`m*5r!j*iJe?rcLLR2@K4Ruf!(Egij8&MZj{i zby=xDu{I=U%d|axh4w)aiQTDk&N5b>PtOM>fV|mD{jAN?ug4LGWI^+8Kfuxc%R+9yi?p7J?1fR_@yb?>|MbxfWpB&rz|$%O zbg`GAg9j7t3HCVM(aPjZQIvPqyD@XrbK-BziB_@v+$WE-SK6or-gngh5tqBW;t{|& zPk88Cwl8;QD>*w}V9Z{Ccy)z4(ImhYxkLO)h2kZ-9Qby(2O>7$Zn))rddPs2QL$|8 z&K~_X#zTHR-7*TxjvOKzKvT{RH~Et9j#4B)(~agUllW##8Hm6L5G7K`M0vZ=c(sId z^lf?nNQL5vv8`r0U+De7{;{&J6PJ(+{L#`5aex=UyBagP;*YbU6B`v%bbg#BZ8fum z!G?7iYb+t^=TB-fT{In{-vk73a4VC=8kQGR{b>^|I|fMJg~;@I=1o)?m`|(#$I&c^Hg$_T?tVm>`|9a_4skoZW#3RYY14#nbTe1^eT>`R-~dH@gFjVkZw%(Tv;xo)f=0zYH*RHW=DyPs+9TVD zO}x54lKD^|UE>&FZH)4{vyD4NFjCKB!+tRBi13N0h2Z>P_HJb7vz6l6np*+$&skI+ zk18$nWa^>Ix)c6O7Iu^A$n;{&moHE-E_a+98WRzk`LQyauYNbUGOa*X@EQtgAi`vF z*N;0u_HI6Xb)lK5EF+x#042@wW#ukZ;%`CmuZ9K%a$=X?1@5bu*+*SFhhBvh@1ngQULVkA7msBz`K=1KVJetM1B0jqF_wB=g` z8;h!=^V>4E5B&UW=xiNG=Ec3KzX#7QSB#ZUg3s%nA^I*^!U_wDrB&kY8lb#$GeF$>=QY-qe8aV&1$62u!LE zXkBvz>h!$H;h9^A58kH1y zIX#HlzL$86d)zySa_eX6z){lxirK*xJBkZd*Pky9cuG!G8(MC2GT!qrd2%=11U;R4 zK2@sV1s)B*GDe#^fxFjCLU?fCsz*sYf4FTKb7FYn#mYLR`}OEyMDTPIqyOTV#U^#zMS4i(wiv<0cAI}shoz&+w;^UV{s z)!c&;sfq+6+9G(dF&ES!ketD4anye$IE3Yaq9&KP%}N9u`q*n5H-E1Pi9!aKEz4VsRZ5rS0)6vy|OZSQwK_~D~L zE^pybyzDRc$-##m{?*M4T_5+nAUE7&j_frSBwkwRgO!Wp%Ty+m&2=}b0dtIv$S7ty zBz!$)9-%Do{u|aC-Ruulkh@&L#VxDbd+jc;M@*;kM=ub=<9l$4!b!&R+!1xJnU+sG ze+&91^G?O<56l}tm0^_u!ipuqMbtWMeAlJ)FNp}*Shh~83&dIekDIu$KlkvaTfc*8 zu8n^qe)>v>MXtT|D>h_$l=pWuKrqp;u=)Ug$!?tq(ww*j=F@^Jay{=?uTyZ9I;_mE=4TJ3BBW+O)-0}SMd|9(dIgbH;5E;ym*WOtEPc7#mPvbWq zDJIfM>AGNqIS(nAD>d@kX%0PPX)d?i%ysWM1T{vzQaHsjKodGN#a@9&?u^qJ6PR;? zw9za_5|+k0D%8#={R(`Gd2hZ9l5WK6zIkiePWg>J(fjO-WS<-N!>Hd14krP$2 z$tiPVP7|VZJkyy&HTm>n3K5|vzBmm|)++)sl*ZpZQmI$Dq|z$L0oimH^DT}P0k}I5j z%(0VhM#5wBk+fCi??sNgRL8wYalT|NAZ^99%Y7c0hg}{2K+@Qj%wJm#&mTn&F5jW< z)8Q{anKbb;44(pjd83h;vZ}Kf-XVmK(0KCR$&=xJU_U0LdVW~~fA{BwsBuUiZ+-0y zb`v{rb-J|5B4*37u^ayA>Y>g5kR9a$%zD${T5!>)>Tkj9y2>X}!+hd}y1W_o;f5GH zQKVcXBgt}6jc;5LOMY^tWxV_Zvhe(G>LSe%d>8gI6L+}5`?spK8R|=0g0+oDz!tE-mu0nYBg6WWPKtdC*};%9s+_%J9Y}BLQ+iF%c6a9!X#4wpKuE_=yzK46dE`%QwhuuPGF5z!0 z-u?7so|_goMSd;y6b~7ub<4yD-SYT3a1wM74~NB0;SA>polM2q(lHWJXUU`^pYxFu zvizn+re-fftxt;kDuYe(<4(aK3d1-ahzuK=p5BZUP1+{~!92&xMJ!ZE`6#u*X|Aim zi<9pgd|Kp>PeI`F(^V1;^U7Fl4u#1;#-Rb|4vYRcohjM?{!PAy?y0^e%B(Ar4?le{ z-Uz<1w%BpvrLL`nE~hg&VCo6-hG#jWGh zO7sJ@vds7!OqAL%W=`7g=1A2R7RdFDe( z-lImWW=D(9oFdWtUzm{YmU5K$YO^3KM&pY`Lz=EuAa~o3H;&|3xQD|Ah6#nB`5j5p zt2}OyWeD5RP`0DYgVmO`%34;cqVM4y@2gfSH$q9~)7RC_-&!P+4)%DCi&Ymj0ZDrgN%ZX)fWu`(>Hu>U(P)Omf?TlWTMq zKNDtH;%)yFKC=FH^0J zz*=8pj#H^Vypr;KIgfTUtR+lOpi(tM&EMqG91fQdQI|#XB^-0VBpvbblzl567VgBt zAquT_cJWYHNIMu_vx4DKd$4Dr0558dg`H6Oi)|_$ z0?fCjYQlsfRxiDuEM)kRAu^`wm0xo$-ph>13z*Gex?N@3wf1hI)xu zy>YRO6eVVu$o;NYk%Sp7ls^zg_*jit_S?MS7L zt(`TpIZ+mpd{O~;(2|Uqy}<%Y*)$$1EnGdOlHZ1a4isO@tM8nc#G{vQAYH|QJ%&U- z<;K2y7m+(5XJH@CCzu9y3t%@JTeAuA7?FgK^hIGt=9H|I#8ibNdA&QHpFklA`}sq~ zG7cD9I4n1O!0x5HJE8j6vK&U?u)1@?*(y-{lfTK??l^d!F%rUj8*DNyEHhnNQzN{b z__luH6~~yXC3^?6Xg}6Hs`mILDzR8?ym(N5Vp0emfV;$&eEh z&v*{B=th3r!}j+zAzEri+*8Tawv{M1`v+RIA^cQC_>W9)J=3(58)tfRw2z}%19pj| z<^ya*udma{ea|wE!1)?p@4eg#mpZ!M@HY)?23VWi24`)Lh>s{&-dc3g*4|^LStB48 z_a9N*Qnhu!7nQ6TBO87(MdU&Kq^uAzO#VIrW14ANUd*XhH=tXASnfbBkb+ku^C}>d zh%7I0&*%Kc1?YFXseqM?;&(YiNfo`#*|*?K#b($tjPs6OGX14} z>2sZSythZ}&ABS`zC^iuKexql(V~GbwVO7N%I1UuM^v<}H>USoSI}uRC^y9CC-)+* zz)oZx62KA7n7r}H%oK~hK3285O04@zRlEp)E|xHJ=HWpQ$NYFoasX`|g|bn`;Z4`?)q(!ZY_F!Q@DB&r(m*AtmFy0r*j{b`uV!l=_cTHoop` zG+RfVPi8Q>*JVR?zO=)1315S2h08i)ozmQ}r&2y9fOkf7$CkS!UjH6oJ50gU2?!Zk zQ&hMg)i-QyTFG7fDx(QcwqRf0DtE;6|7`wwefM|qHsb~+Umi1 z@yGX4PjloCf>?F5WJ@O-S&DK*L!!LO){}L`EmTtay!IkCCL7T%KqDko2pzrJW?#l@ zZ5i#M$rk28lpoj;ziqZ26Z)DgjI{b_lKIb@V`$j)>-9T(2aHxQN_&sxKP-Z3zs7z& zO!h0E~88 zngYQO;o1hita7Jq8pm9p$PJym-%aSHEoJgms>R49A@mX~fj|L4g-tsONw6j`6|IHb zHSVNCq@|x@RJMP6^rJnpHo9}RWCXLnT_EM+9^?FsMU^pO%YOK)%S2cBN_QzFakH&X z{E|*A_?0ufEO{O?kA`S3ZQID>IQ!#5OJ*b&aalAPP8H(`1P*58tSLHeTm77aLBP?$ zX%(Iu56^_$?>+sl!pSj&6mFam#TBTDsstyFsMUrnm6mod zsfiYoJ^QkQVK=6UEhK}p5cZJ@G`1B3DW<)2!ld%x8F@kyKR&vzTiPVwp=mSjQ6%Zh z>sAdMHH%kK|6Qi%!%hs6oDZak9W_8+iyL2usczr|pRyt!AG>^^@YyVkJRF!=Q}hdF z>rPZQZN!sB6l$D(r({NKwBxCav}BX)Y3;BIiP}o*M~4U+e2h8z#kS-3uz4~AX0+K) z{8{5xLN4$r3Fk|&kL z_rCyEK&ihHVee8mn)F&epx|0N@|U3UTtI#`EMM;)dSl92vbw++69Y>AM$qlGgfICK z6s=$8X2qNes$@h*nLKasB*8V&RdU!3w6pu`QIfI^>?_<1giQoXQHwwwQUXI+fq@$i zYiZyK^7HlJbn>iE$QmK99_Aim*5YwVH=sH!6ZG;2e(2BrXAIn(ThgvWB&fDs7Hi2y zm(>TIgfZr2cee9xVsGNZhYM#H0z8fHk$uM{r^Q7g(`gp~_3DY=E-vI7Q@ESH3OIT) z@Is^DO%DY=96G_@7hE`M{Mg0UhehWGeLRuTk*9yBjJUx~dwJc#`K@#=LI-*6px8>@ zdPOeVg>U~2^=|>CcRWgZ2RWVCUJ&zwP=#`~di4AM&>#NGISu^L==%E6i%0vRK;k%V zNK9wb&Chn*K|>BH1Nnm<4}BHB2{CUY)6Rvn%{F*zb+&~ka^Ort#>TpgyWY5?Z=#rb zgK&9&ogWPO?2DH#Klsw=8cJeqvOeumGYi1CfBScSTlrKP^CK#^JV*FwARxZ}^{;>9 zH~!!M&wmoyqgFR+ff_SbyBc4E+?*pPuS+HKvzUeZ?V`g2jLxzBtWLv!{F3Y5`IzM* zlje>D`Q=@=+3QD!(Odb8fBCQdszg*IcR+319Tf?&PS@s>T?F7t5^%Nt9`oVZT@~%+ zu{$f6q?1_6u9IN&!E<$xpbCBxeHQ}q@LTz6wD8c9vAFcpR_L;_;jzby?z@2PB~YH; ze2_=s1J7kjj!_}!ApSka_%mezT$MXO@gPdgg;L@xTjxeBYsv!@A1~ z8@s{;m~nUg6MNEh{xRp%PrmtS0#M09m%|F%y)0OA*g81=sBemwK3IH}?n&^-()J1k zZio6HAO0R0KAy(#OZ;4J7Op;U@rQ#C8utJsGCd?V zy46G53!Zv)MvE7H=(ac>9fxaS`QXD3@^NleYrJjqK)zfZ1pJi6-}=i0UjZQ)AFnja zBe3CIb-qLlr+9Zq-T=CbFugZXm$UU8WZbaCg+&3FB-|Iv?S4&I3meUBhN zK$8pl{%_udOG~TR)(d}`B%?9{we_I&(vi_abaV(tu$Auo!9Tq-S*NLvpGWl-#YiP^J-khTip{K6K z(+?0BdW8Du?%<#=KBX^u6tb~VWsASK>iFCpul&d;yDYmm5B?S3f9L=JAOJ~3K~(*p z`Rl(*-X_l`ia>{_Z(QO?05EMZ_W+DbFnuq{3(w6rJS3>a!^`;E050j&@OCl5TYJmG zCF1VNU}U0QnagVvm=4OyM{g?h)#&iMKKkn$Q`mv0!bW8-mOGw-{Ou6*5F9uEBRZSBSTl z2t#-x_*nhh^LvDU`U`poGWW};{Z{IAwIicPTz|Fihtw*7|iUt3T zNBB(98&3x|Q#`NA>-X~qQu8a~pC$^b+e(m8iT#Tgx@_zcGrKa3B6V+fBeQvLx;4YxZR^Yig`spVh1>XBCcT>ZB-4E;{|BPL1S-cg{fdUWa3AO>{{U$$C{-fEMUU5mG1uP67eDT@mU(9;IseL5@y8}TecHhGYjWbRg+>JqMGVs432MWf`zFwpk zP@$_sl6^pVH@*SL35)T|5Ih(}bXjhkAP!=F%A3O9gh&k8SvPX~VS$>^Pj& zlN|QJg=1mZ6HG3oW)kAv1VZmVch0%{O~r&MozmO7)6;>kc-zUoj}l(@>96}M@;=$! z{xufr?JuY8tG8_|ueIgEaL2z4I3qJrnXL40e&_H07k@1GsNPAU;kGA-8C%)iw6;SL?K=e5gJ-xqml*J(9hr%*+>jb2#-dOL!AelqXUH?p zo&4C4U+T=z(VGza^G6?j{bLu{7+}S6jr^J3EHdxNEKFx0ymNyoKf;(J&lMkZ*vD7r zqNgNL#pmG9U%bj+5)aDoZ|w=ar#|GjXc>wKC^x?O)K3-=|An9W`Cm8AP6;d-H^~IL zA_)b*+HNW-;3yIZjifPdOhVCXci!a#rbr@5s_ZcxAM}!K^-<#oM=_2US&A`wZClL_ za59uVQJ`BJwzfEclj8+WuU$a!u@I1}roS34+a5p4GXgbf{JYLSy~;mtcR=V%=GY#D zJA>C$*XD&|e zyT6jZTJ++PKWLhJ(+TEo#_>3(!%CI>nxI*g_-C@?%b?y`#x^r(sfz@fJU+g)>$f6QiUvd z;N-!P>}2lZuw#plW|PvG*V2&frlYcp5nbqtj;`SF^~q3M7|>Z9b}$JOq;9!t7QB7BX`g;8u%*LY*;+e; z?WRWiWt~x97CfEc7cp-Sf5&(Io*&MwG&cnO+O^X_gOA_QRd(Wj8l?paTg z#-vJdw=@3|1+sWb?*SfmFd*jyd-jnV`=>q59C51G{J2hT|4fY zUqP95sCO|r_s{?Pf92PAL6v};w86TQAd)~bz>zR$BD{%aEXwg;lic_&5E2W|`0tXS zXwi5{Hi<@_vI~RuE++8EdXrqIjO7i79{79F6<;`;>=rtGg$;6l_!P>NL)on|!9gBy!L<|ykxK3tub+XKBtAj#mw?^Db`%a|=u zQ-ba_D*~pArA|!b#c|{oEpIL@Zv>!CwVoKVyBS*=5NP zq|va+Qn#fGzLbtHofSr4Mx5`UM?5FRT`;uQS-Hz{*Flk$s#E>kt86z9fNO&lr-SW zOQI=~PI8gGyDu1?cqr&4Bi_dFGA_Bb6}-(HIGx~w>06i-HQ375Cxcvk@k0ylMJM>i zwb`xB20H62XkBvZf5&%xdyljoFvrnJJifJLO3cd64BTzMf#%Ia%RaLB;LS+4GTuB6 zx+54~m|nrp_=(R!2@LoS`tk|9MIWBmG^b&33AGK*TcIcLQMo6OIdK-4<8KVL`<9@I z7VhVQyF4al!=@+|y=@0>bk~L7kWg_;&BVdr7OkUl9{$?PfXld{#H4Q(dJZ7ngN!~w z^m(2pnr+TVBxJbkeahhnPVW$;mjKN73me=$>fl46a|+T`R?78n^UXkH5D=aEyXFNB zMWz3_|JBd@n%z&pOEk3vu?TqS?;@ZrLGXj?<30%jCir(;qDmBSyp`SE(HU18lUR~e zBC92rwq(@a#Kgn+^3zuE!h;@)#K)UH>;T74k?h-sr%f;PY^1NmCKF%dUdDIfg1=uN zS{>2l%virXd-l{5pC`Z)7qKA&m4Eei3&?PjJ~)&7Gh{+Cj!&UoL)v@!LrVd%@s+u=D}7s|12s^p%)@BWcIG5E(Nes+Iz z;-a@JX8!i%JiihsHKU$kanPNSP)e+bOMX_pd1F%WXH~y~YbM_&pYOmE@yYWqp63(2 z(AE?U`02O?KUW{A)A`0Xe)FSVf4c_HsbY^YmagmK+QKWrn=(%a+VR`YL4hUZcp*xd zwxG%9ke;5*F@&t~k(-DR`jZ3kPkb7YdC2G2C@bJ4uYh)KAE8YoV-mp_zeog$EqUNd zG`LEbw=a>D8KOh%Ib>``|6|U4W6Hqe)Qq{ALj1?Ou<_~epP|fGO^Pb{Z=%^ zUpgHG=^qxYwYLxD4dt%j3&Np{?YA86bGp*d5HtO|PW~mig;mRnDR~eo17wG`o|}Vb zq}cJ(!|%#-0*QUk1h77@IdC<+Pr5aqPUfM{9Hz({!kTs#g%ID*yY>%$iLT!IXY9&V zE}hp+ruu`-d-+d2{N3TJNmU@y{APMSYV+art*w-!Nch21!niQ-F!Zq>P3zbO6Y_|! zEhOMq3PGgEL7R-?Rg`fPZJ@yM;MN&#|eTj#}4l3Cskl?rTZGym& zR9?FiO1|BF;h`Hn=lG2m8|>n0<6h|CgGsjCk?BP)o?c{1IC{a=#((w2OB+Aq+Fta- zhfQiaFF!IY2H?9W@IhQ(IdlQ17aF|C!2^z>o!^X@MMR8c68z5s?E0`c_ulRR;S>-e zczwG^@W$>Xc`~{jX9K*$V~5_zMJ%aC>Xmn&;nDk6hkH!1Sejvb-lr<|r3rD6 z`4G6hX@d9@Wq&ruc$WgMv72ir&}IcZxcEv{b!`Zv#Ea2vlr<(}hIirYqHwu9SaVTl zu1Bf7<9N8}(;}d-sng_4LKi{Rzzk9{P6ESmUG8W4uoFW+=d-c5pw*=T)8(gqU28pss z0WLXq%zQ``9#*5J_wLx_!1dZf{w6q@O<46Nq&A-TE9C0qgEtpAv!!-qeCZlycS@_iZSwH0kzXU^WXWiXZ(g=15A{o?Ra2JkVA{h7DT~-?$9^n#2 zQj$fEaXTrV@V4l~CkLLF#YO=~r(U^uSXAhQ5BSoO1$TAAM_<`RjDB>}H@4$yywG^T z!_SKyq=@-A#)Hvu41@+p+q0Ps9qv^U?ow!Vydk~m|%~qA3 zPHz0?j#brfzzpLCdWM707Zo#dT%nzjivnm2C(syEeQ`tz3H~61I?~L5{D*!%zI4a` z*9EM=7RVCEOS0Md?2_7&V#g$=z!&s(N-y+k34|XSIFeCK&E;Diqm?l)mm8943mEm6 z4nEo@RrDakT*9z!f##yR+Awf#bs;>|&?>+Q&A1a?zoo zD;aRWOffsQ1XYpKXSR0a4R!RUdvLQI4&fWHz6=ru=)AUEw-86Pa;?&vs+m4K*0#j$+2zmP6drwFCF(NtR*G6*fknR8D zZ+`s~Naa_VqsNnX@^=&bJ?V8D){&V&&t*Zs_a7HX?zx1I@P`SyZZj}T7pd&>J^uV& z_k4peJXYS5r%$s?_VLHpzSbKSmmn6@*hvZjEs((^nxq%#n-K8y@r4hUJ!%VwaY-t< zj7z#EMruj2$&3G93ZTc&ID9gV;RjAvFg(Fl-on)Q8iz|iINIR!*cZ3M_cBf%o#`X- z;YncQU|ZIY7MV@(wFe*mAv16Od~9`C+RgsX;m+|6Zhhvwx30rQNbQg)xpW427u4PX z(E+J@0Efjr+GYEO8YVucYNZ1r#XWKyW@8_ zPXD+6&foLHe=E-j46wiNm>>U`3CVl@b)unoq;4(V(3es z2w;~O$wM}y74Dkh^W>W!ee|)*3M2jfJp&(o^wBqq8%lLvY2;%K(R064*X;7{-W!XQ z)lEOgosjp0F=mOE44mtda;vP+)dwJD^x*ZM{fVFcRY5K(CA)D6pq2~*T`&uDs!6I% z>P;p%+Fr)d+0E^kU=jpe0!but@RGcWHXXKX!m1@c9%Oha@bO2ZO&>DwM?;p{OMyog zJIIFXwd43M4qk9JvB|#1gNqlr%L}f>g8a1^%|+j%ca<3vx(2lWwm0(=y8gSOFZgXV zci<5u8m?#!kN7)?Clv0&rnk}#)rqbt-Dfte zO3q>V@69s;Jqh^uHItFccOK;t6`6&`gpRBs`kB8;%p%?zco5OvDcJ30b=?$_)`5TU z;fL>!yevdXEME(Jl^^{0>?HegAC8h1Eiq!BtdB)vC z>%K*Bid4!&lNHH=_}Z=|Sob42yd;N&*rXTOSb$4lMG{CBv=Sa4c#?0E2fhUILchm# zW}w?*N;YXXsmIitCc5MzZ~5Yd24DF4>Xl;*jIO)j7~ei#5|s>c(XquMNasDVz-Qa) zt43$>S()hZW;;GBLtoib1pH1y-ev~Z`nS}O(8QKD(^bEP_ATJy(U=LJMn$T(BM1LW zrCMJ>4|R0AEsPreVLk|kSJ0c<2d4U`Ea7Uy-*VMFS~%+vo;N?8@5>zKCTZ6jYnh79 zMyte1rZsctE-hKS&n;*;3 z$5G-%0_f8OjT;B2Xb|qV!*d5x!W7auYq0l{Ac1ygAQZvx-T%dBEb}PaM}MZ19(=4)XH0N-!_B}(fGIq9I@rMJTINE zY@jSNiXDlk2ESEqa%Iug*Jb-#Uyr4Y&4pJwE9!zaeCJ)1FP{@f@ODt`apAxFD}VD( zrujwY&f~(;team1Rb1BqpBhdHtl-25%mhVB=iwlzF5ezZx?5_DPYk_qxvd=K=kvvE z9MAG)zfb!YNj&v;rEdvoO|PTVMHH>FGIZ~Vx@du1BiU6veU zUJ8C_B&9YvYIwT~!^6u9-Xeh?!BKDq;dtIn^%Oa#6mKoN#f=};^cFbTAuHLH3O@2}6hcYj@s?R3_*B1iOuv203 zZ_7Degf@9M<2$$tBsOy|fPD)YTjfQ9Aw|5MvC4Soop;~qr-%v4&k{VoL?Cy&9Qm-) z19}LHl+!`1R!deiWYR++n=Vct#>ho? zJ+_O($|i#>eD;)p)`GD~s@BJA@$r=G;A{Vm!KW)du3==rU0b$I7kG-r2c6fu&))l> zKyQL4^j}rT+yc|<7P2G1g*tpz7J9FheBFLKr^QBmMRCoHE!PTW%-%(H zauvjDAf_e0eY=93)JT%#UpkUTyZLgQ5zBbo_u)Mk=PKNDH%Lo<>hzQl6*(lC_vWHw z1-(07G=#)i`fvJ!A&)=#_#64ofB%x{V0#a{BumukL;tgM5TAePcv|pLi|;05+B7) z40sAWMK7IGu37k19MaP|^Dt!I61ChV? z0j`I?Wjk~&XI@TkKzY|EV#Rdet#3V%^xQ%lY3%3ue z0FNSF0IV(g_-uJMeYB;CDxr6q~?HBk2V`IrxzS zh89oBV_r6K$X=cB+r&n9&08BS9$t7zR(!N~F`x&y0^hi@6~7G@G#%OE#w~7S9gaHab88e zq)3Opn))rHcpX*lGXYM_SK({wz@Z);u1D^)57#@e6;XO4Uq&KPa1UMUwl5?G(z*Gr z{G{0I=2-)B%fIzJQcHiNH4ayTeN~JS77jyIV>u$)t~;1XRO^M>bw))#x|L zR>$RyZfUg1SJ1JEe(1HyLBES09q^%#nlIR4Ty0#9hk^%LaE*~+Y;D;^fF5x3*Q0_P zzw`{2N1(s?@o#jBL-&Sa(qH-_X@Xm9Ne!WL3c%VYyZNpiErD7dC3{sQNOXz%T59F z-IyvGP?L`~b8^mH&yJEI8k$?v=cJEX+37S!#`qiuqw}$_zdDpJDE60(qRTw3=n5jw z1trE(@(6Q+JawN(e(kA7uOO>K;#S7vM-&QG(DTSM+?-*wBllGhob-zqfic-Vg~t#7 z;!ppz|2#xZ0QDw}WQk;2UXpaj1+c;%$%keW08H?2vgu1&I2Hp5r>KodI&cYszj_k~ z4}6!Wg#`|o#>m;EU7lc@wCLcXg9q-E;-%~&1COnAM2|+T@1>wwec>)|eCedHQ`s@J zWa0u11v9zx@6WoJFb`0z*@0S&&F?of${jHCf zgR#)m_|ZV!_7xM&Gkk#_{V)B4vi&PJB2XoT7j>d_ z16Es*t2aSoLX%V9%W-)VN+Jk+MWTaC07V-wvLu88$GDoz`#2H_Z0|8>(|Kj9SAYDB z`P|;_tDuL2Klm6I*GYFuE)rhOmN{C+l6NJRO4d-AwwIE#P(6!+F?PEbo5g21EU*T@X@C` znUa*g@bF+e+SO%c8b`lyG-#JMzQ(+iwE><&Z@e;R#fd&UXERyRZ|7}hqh#Lhc0(Uy z=$eyk8ec*Hc~iON&Q3g(RbodMHlszkdRy!(P&q9171gbb1lW}gSRAx%zKQEf*s+!H zR+?)>#AMnpuT&cFTnY@vTnfY=-Nf^CJby5w&j(~YKeOF$>(*V(l*-6k_-5Z-iKL88 zsdJ!sUeOo(2Q9GvEr8Ksta<#w2OmDe-8`Di1kG$Wu#}^Gg2!>b*CvavPSD-{RUZOR zp^>AE%ZVx%IQon+Uo;tvhb+;6QKYAAOJ~3K~&4YgNN^0Y)aCJnU-0* z7p({7wwhR>Yj}Pu^D#SG3jgcmLks_vin{FZ|3O@w?)Aoxg{d2kZKW$)ES`etdpA zJ(1_aASZ_2kBc%L#y|1xQ@0m0o41m{`-w0n`zI)UV7K--sEZ_XvI8`JE4 zi{eDSOL`2QTcBND8a$*nV%(igD1ulLZc+$lwy6cKKoz*k2Dl_rcDIuhc!)tb@RtTI zxV|xRBuQi!E}4wMsZUeGK?lc68-FiF;=q^GVCdlCFA*&O+I06~2OKX&AHD(xe_!l2 z2EOu^mfrZ1Pba+Lut9AcpVgUP;90oHgog&d^<8$Dj!o3k=x&tW?HRu+F$b?xE{z3z zWsPoM5cxll$~&B{8NOW)Sc`d|aH+Pwpvs3^vNW#?>??{6-S1!HYp({yyN|qs*lNet zk8&kRZAlmuFF`<5of4z z2Dw1qWDvZ{^%%Ov*%N?Zv{OpL>*SC$WZ;h`IyN!jOA7d8#EvEyesGL|SrE{}mweir zh{o}yE8cMQ@!Q=S3_ct@;VIyYzvJk<$bruuFXLW#qaha`2@VgO&fxq+X9W&^Xy~); z^$*+}&cs>gk497zBKPCC3{UW!cB3^y%l`sR9?S2dv!R=JINQ$spyrsk*LsK@>o4&Rm{&PN{MJPg+w zqXWDq;Ynb-_VUIH&g#1Tl|v?8^fKlp;aA^<>C;)ww+gvv{W5Sq!3pHnA4Ry=E$mHi zu{jEM}I}9$24=2_Ag7LMWd*eI2r1$GZU%39# z?AU$xuFo>r2m3Aw`bk)=#(TmoCD-~nX!qknaIugG$$MkJiHzs64RzH@j6J^OGQwkU z=r7OnbQPgk?M=nAtg#MVeKlcuTW5P(|VepQ;aD|EWLyqyK;!f>I#b zouDa#Q_@R*!Ea2FJOW&jNG8U6NdPrIXwl${pIWjh`nwB)!IeaKs*S7B;|IQN2}CB? z7RjWaX}K&ebie~|{B{vo-Bu?wXu;`19$D@?u!sF<_eB=@_+Bqo*E$+wuLVWHS07*P z)g4bTb+&`(Irx_eUjtL0>AZqmHA5RlK^ooLIKvYtSGd!B3%fhm4Up@ELG%{FH%PnU z6}?&tx`G2P!v$|W6mNaMk9NPmgv);WcjU=g2p1%c;nerZ)SG|lU-|Bz&1dFMlJ7kU zWX@8|*tGD5ABPQDz{^u}#$W|!yn2RLUgxc7!OyQk6;UGZgd)7v)agAa{?voJ^`iGT*a*XUZ* zjx7$}*GUG$7(QFj!&At_caxZWNePAyFSuaZ^oJ|KBrv_UzjmR+7w#5gbe6Dq>yxFA zo=)1EylTAR{r@PtpP1XWE-mQy+TG|M=(~U5||h?`pI8yWn#v z&-1zT*Xzc(8mY-m;*Ey-HZgtQa*LheEB+aG$Oi7|r`E%h#mC+sn; zv$CEsov=sRQ*(?@ka6d(*S=o#{_#iqbA_cGVhFxPlY zXUPe^%N9kR&#x=RcC|I~mVokYzFFtX{EV_ju(p*ThtR{tyfN^Gk<2!>h>~pi-6Ht| zgKcxh=0(EiYZ+hKRJ1XaLJq4L!LcQsW=z=QVyX*UE$Ro8-g%NpE$Pyqhz2owH2caP#ea`%!&jz9{qUcUHylfRVMC($J% zh~zewymS&-;_Fe2WFCZUpAAIM^yE4HqA5VA<=< z@zOhi;#2V2Uh;6!E7)=yH!fKI__hW-<-o^AEcFfRd^pHq*l7H;pv~E^KQWEjdaR)v z7TfEcU9QvTpMAa-k0|qA=b3)f%fteI*U5_Rn~b(@l4FnY>~+0nd1v5j+Gmf@jmUT( z<$s2E-hR6{r{}ngXC!1=aqV9SDIS!|GNOm*Kz`3p{=uL16p-t5{r={9mi*EE~PWJI*r(}aYR zoSH(DxMUV1DIF5Lcd`~9D#Zn_DI{Yu2fQSAr^lzL$Q6vHfZ*X;M0}ole$8R{Q?QDX zuNE6leooAsk>IThp58iO#UUoe$cEmSFL8E*>Bdl77>9Z9`p!i+0&D3xA%~&kSI^EN z20qVqiN~C8KMeHQXP&aM0M|GFVzVAs_Iys@%a_M%9&`4ZuFCeKxL;n1*?*vYSo3V~ zj674*cprt$g?r+tZi`v8o#PM5o-q$}CJ%zL=yz-PNTY;IF54)mV6ko7^-hLu6ceVkiW*Wes_OJ7D#9wE8^byn(acoX-FcQpA{H+ z9gbog=5`y`c|Hj4>wo2s{TqKlQc7Nl+5+xf38$pD7`_xq8(HsMlG+$o3*y{3*qJLZ zJPuzA=cmQNj{{a=;xcydb;j3XA?Mp1&KR%aHTL!ezq!IU7AL%M@5->&u4vhicN4VU zarBUHVu6I>G6oS>k}g` zco@yO;TsPexpg|om+ksYBgSJBj`coqF6+vH$16WDFAQ$gw!gIBX0Ti?WbG3pQfujF z0W&Ad(QzGDwn#qo8gvZ|I$p*vDI%GIhdZ>L@^Xl0T$x^@zuE~VT*^f^vE=1882L<{ zi}|M8Tsa>Crq$eNKh_iHbj{hCJGZamJB#WO^Kfnc{N&#HGu&5jYcTcgq_5MTbHus# z4be|TaFLnMFatsN?q)ak$Y3&Y2Q1J`v@|L z^GCy@;<^HUNiLDy(Il#brIYO3 z7_-qg;rUj4<}i*XI+!6PL!34R7#kIv#ttt&F*yh1c**$?2iq0@P&ONS(;eZ; z9{IB!FX_wIfkYf$ZN1LjXOBnx%`c}5;~e5_6QG%+&Ij(;R+9SJEOsk(=g8T+6jJ_MTt}0`cKNj~V5B ze!M`dqQ@q7nz#A)b8mLvt<2NJ`ojS#8_-1_wiuj2j@PJ@$oUngeujBv4Vxxoi$l^% zNOYPc_o1L7?A@CjzJ&$Pj!hHan2a3`hax;>d@HUd6CQZdWzF6o%`s#2f56$!ZQdPlkeNQM+bnRO+Y8Q)5CjORY zu4%uA-*4*n(}JslowZ!=z@0Yv;~R*EneU;YNK0t*Z7EUobYz&IEG41m=afyA_7+=OP-I&Jd_RAMu>(D#O z?K2Uv!8pW@$2wu~@zGdq7UC0gH;wAqH6Hd3_WG{Z`6LsI4={1%f7@K*PR<@qyP>D{ z7~`AiN}<-&f%x!{55`&V1f@5f*Y)!3-~35-!k?_88m*Tcr}0TLnC0(7uP3~iXW2<# z%=8~rM7!5q{2fY4Gs5d<1X9{Cxwh#q&$&$Yie;6r`>(I&Y%;mgwyJm8xnfTJdIJnG z@+sikVn%|P$ME?yqUVtHBuFrEvfMPL^ood7;)}P1A}Q(gicFD9a58*~Q=%HT*c6Ne zX0!LF!Naux_+X=$a48hN@fj;D1yx-)4BQHYFIaLu;5uf9-+J)S-n_UHFYZPC2vSAzNvqX?E!lRd5(d`u-0|h`LJA(d9wD?clkcs zTzGFwS8}ea7^=CD^F1B;&D~$-55JU;n{ej8{liY;>iFkTf<1kfKJNwY*aM;h_J#w) zP_7G>Ijh`tva^iQf_(iae&*l)9=N2G&@KKZB%K7+E0E4xAY=;ET$992dSeM}BT=k+ z&65C5y#q!s(OYzE9pz@rm$|M7ZOrA>YjD(aM=8Pi9bH)93pci8UW0cPY zB3uFQT_Kk2;%zIEW6K>*iLXgk1tqDCCBLLs6n$?ix!ICyEjsfoc9LBYOKb-&O+oPE zklg&VFmUpR7l)p%K8n>_9^P4IcwrPf9b0lfak`U=#nVS^VDW3PUAvfY*{ERIlNmd@ zPPX{1hn!DiwtD{B;Mn1U!`FFz(BX8jw+_wvZ7d@F`+xkm?r-uM)e3%w`(>_m6Xk>T zFsQ|FQ;0*ml{5WzFZ(=R;Pn}m52>bMK6#g?tz6xy-inIa7oYihB7U}%$cy^f!81jv zo_jd0_U*~4yH;`uXm9EGilN8$oYQ<>pUa(}3;61*d?mma1AO>DWoX;VeDO^1xd;UA z^5$)>4f))(qx6O%d9;duez-r``TpGK=a$1Fk@Qah`y&SVRc85Z zz%l(JKlLZSrvNxo7?N1A>&YdggjE#AiDj?~O2JBSho;!*wcfQ`;P`R28N<`#*K3N0 zoZh&63bmVnIAPdniptRq1lMUVK0G+sS{LpXK6&k}(Fbphi(NMsg-XxQzA#sOXB<6G z_;KUHQ(L~+I~uzfVaeb$>!WurfBeUP+jm_2A(~UXPxK)7%ZMnK?oOi*j3PVQ2A?foX>hV z@;UM{ORIo#sjk6c|C9g1AO5*q`}HNk{KAb~TYok9eQI@nW-miENVL9JU{!Y>`TZi{ zJUsY?UXkI>U+|3GyRZDdZokqyZ!eOKM@xDqxM1TXhVyight63K25}K0$t25&BrlTL zok?;_SaS*AVp1rIMz5&iJI3n{SiI!*s4ZC~J9{{CGL4K6vbn2;qXkGtFY#?GZ1ITe ze6$u59Ud`sqkz%q*pv%K-0axUwebVzsGPmI!oyt~9LC*r6sdXF%D(5u*nvmkmJ?R% zXBN&Ep2k-^TkC}nr}^kG#_s4 z1=qIb>rSy{&wNkwBc_t*q1pnei;9QjFg;0&sk;4%L0#P0Kl)j-%Eq8%E4E9u_~sVA z>E8H~VDfM--TeA}V~_RD*gj_+q*i8=SgiN!)Tgv1n|WH*OpqlgumLXh0- z^@@SK#RA*J$DOk>2YZJCO6EO@$>$`yX? z`4qRgb@Yj+AL8+CjW}SP8~z&~TWb(MIXxS`8gDn!o=bRG2VMso$GXt2=4`NQ7nw75 zyzD%f9GEM=M+f9#NG&DOip;dbd$1ti?llo6@S!~DSLPiI5SODRf0~})9V8Kc$F$1H zwx~Pb>7cL;nXdTiIzKTdN9AN=Q^UR5>Kj`wUcM*bXY)+%Le9;xZmMn(Qhm@Gp|tXKX_dU1E6S?Z~800{q%v7)$HjOOiGz zTX6IeUvdk~0k0X;;U`lhib}yX(Is&=2R2P)1>lhUFnG+3JsRV3xFd?G#omnqUV{-w z3zbYEIoQziS#EKWi<3_5u=o^rH!w1oId|d5;hb2DCQh6h3>{mXc-X_>@MLtJBQ`KN z>6`=WJb9c0apI)Q?|6*fTQB*N_j$mMmu)4&$k*^rrx)NGdog7&QdUd-t?WzPkaEtZ znP=!OEY(l%whS3 zCF{BCSUk>!g6ES>$Kt`Iw^>+U3m%p&Ebblm(`A<)F7cCiqV%%j9Y|k@zp0^0jEiwU zNJjJ_4-ZuP{JbJdh_6T4G(By$ucJFr9q(S}(4NN_daNaF&OzV0Vzzi}7X89|tq+*2 z;MjF@gC)ZU>#*+nvaWKAM*x99e!pCF zid9V3C?4ZJofxxe{9-ZJ@Uv%w%c02W>AE?Tn~V=X2e6+2hi1LdPHUd6*`0TtU;Q&M zidRI1-$gq)Q}JVe+c%m={hGPqywV79>kBx1ZE-cv1VQrYsL@!wg1<%kgO1HrJN?28 z!_2CCc59w%{M;DcG#N&a`TYOAzyA;aoZq^w2GicGxA4;DCd$DTWA*aGTxnd}bl-`hRL=ZzyM|)$I~Tacffo;(>hyfV==rc#eDIE*cX2q6WP=SRKkP-E zd5#&Gtn<|AW4};4Nw(M4*uzSvaGr!DdsbJ6B^A~yEe&u^P-hcA-Co#*w zM|rOBkX+qZr<7C9bGdKs0N>_I33)>v45RiL`rh6(9k!+1%t_97l9nr4o?C>OUP&(j zo3Ij9!n1JDNm@LLP;wee^4`sGYKlR@^{xnO?!B$TXyLF|;EE47KMIH)8UNi-hBz9#cK|W!@Bfv;uO0L#@g^YA8pp>aPIKv9ek0uS(l9r zhCMEuKx1H|iMi)a48xHaR=aa{3%*6yWO)_(sJz@n9G}jKUV8*yT#sV-vu*oy0w1C$ z#D%WBAy91cqr2dHuvIh5c%~=Ah7r+eYy7wske^h~_y^?;&KWX!Y>nYQ7x{AFr=R+b zz4Q5f(DS(de*UCbCUcfaub6yZ=d{zvKMn2rYrmVgX8B}b-ro-@FZ(?A0?zmO(;-4N z{U+@lk-mi}=_Msx3sV7TEg-%nCyZk0A#od*LecPcEa4SE3y>U7i&Q*haCj7oSm5Cr zj~-U<;J3Q2k1bgr+4)dpc*U#7tKfP!HrE=Du|kDcylnU);~$P6_H6a$@ph2 zgK9x?oqY^9Z^IK`5OX314zUJtvL)Wok31sFnMnpd1Po@wcki=70RqvVZEZO#N#=wQKx1r%)2u2)&E|03ZNKL_t&&j5!S7Vq|L!Pp^qvQ;gM{E5e?O z79$%nK44p@dcHK9joA3>lZo@i&S68~-x}$~({<|UHDefljD25Mu46PDZD)Y@rCtG$ zX}v9t{s!$dTA2SIuaj57>mMCmB#+{Tn6+lX0p)1u4d<}vP+#@Md=CoSk`ukHrhAf? z@DvXNMT8UMK{>H5)pe>jbfMT7A=H)wvmS?dhJ579f&W3SWiJ0Td64f3nBVd(hT}t$ zHTIpo@@l+{|Mesgi~NCr9Y8mN0E3(i@n~^5HK5^mjWdZ}fwhSA4he^bPO?kpCZs}v zq4OjlDHVcNJX?vcv6bBHaAkc{})K~89u#Mj>bsm zm~)bE4IR+D>}z~o>O)1p<*Ul*Pd?{`Q00ynF^JX(gM&kc^rnm!RejNeibKT1ezD>?AOqWT)5Y&*aZa2dfy2=~~pV zeDZ-0N4e_P-BTgbDN?pD8rv3@0>P(n__8*(dWTkidQJTNn)4yP`oq=u`02q9jCG3# zCw_D11&*wn2tSR5593^^@jFEwyt%_%!=rUQ&IR5d`LQ4Uj!S;EHQv98=c=bmoxw_i zd6kB%En#O5{jJJ+g$~rdL z1hLmr_L`r4sRq9l*ZDY=OXu~J-ex5o$zYNv6F@3|p74DXmuu_8K41D9gMHdF&dp&7 zXQOaEWXh^msG-{5(#J^&e zlnO{=YmQIC>dna&1p9Kq)3+F4aKkG~4L@!&1y|oI{8hY-5uV(}z#bkyznXZ>^&a(c z!i&k6ojJa4M)2e|2fA)FxbZ4xSO+_P;mFOqQFU{mtF1V?cD=Rg+2LlZvEd)y@uNTd zqig3ItqcxehjXa!q*wu~E!#7*$fKQ; zy4P3U{t#_znj()e`XM6g!DO@RdQ=8>c{C1SWX3OBwP>{I`;y$QC>qV1fP9f}eOqt9 z^CiI}2>7)1jPI@ed5U7Xeik5H1G9tJ7p7&gGmeFZ#S?(x%)MlsU;H^=|8K(UwH8c^ zPys5ECN7Mkun9rlFVEOMl@zRmuH5N+`YakP^PydVI2M2z#uHBq18NHaiRS+vKa(eb`+TdW= zIAFv}4o5fRPd@ejCerm1+1lX{H3d2#TWxDhR;Cm>JR@De<8?v2Cg!V+!Q4!CLM_d} zF3>et9M^OYM2~Y;aVb}}U(+=hcNw1iqB)57ko1Ui%um!Y9-WshYaHz>$5+bfU*o{j z4_k~c)-_>w@n)QPen-H6xPC`~jX-rqxGu}(k!>Y;0nT3cyvF1(403^L8X<-x`r;3cO$=}3O2ykMNl(0=wV>WE*ieuB{C8LAs z`)7qk)~0wHLpLEhHthL;*V|}pP%T>VT8l=`My#+cRPv6+C4SAgo0&1+VuU5fg}?Ei zykds$h6N9+;pfwudJXA278{+lDSSFU@YUv8`#Mj#idQ1$9pCZOfOi&z&F}cR1qo$e zeNkmNs(Dd(7jS`Krfr*z59_orUp?8LFYr=*tJjk!2C;vjxPn@`QQ{>(bxVEjAG9Zx zvGy!q(vcTZ5qt5?n)RoBLFHSk80@WUFKTC9FBx9FM{@u4_3OE-g)fvVK)H>56IIGwinmZ=vqp?Kk= z@!vR2G9?XGfAKAOi&TR3&f7$kfK6P9Nv>!Vqr|5p>sarA(HGwW#G!ELj9WnECWkFA z{|+(s4vLeEjY5Of%>HS2~kuMIptYqbHn!`COAwVAVRoaLhLn)t%)sJ`6hY+>N7 zSE2Ye$~5f{~-sN)YY zZ;I)P#pFC+gcs;WfZVeg-D`70U(f$*sY4jqx>#Bh?&?;QzheN2G=Kl?9!@vlov<0h$b6JPT75tPha(YQPJvDjTz zaA6_!W#CbXjF+fl!;Jz)8D(Bn5|kIwnQ>+P;ozSM1$)1o@iP$gE9UYg%K|9RKw1`e%Ro&;IBC z=^wj=cruxtc7mJn#<@)rcLK%t)b%4ee=sQ%DGxC z>5&{-X}D-NV_9w|&KJA(7sGhJ-lr1ZMy2^cf5kz+J_CF%x5ftYQGVp;O@7=smU|oB-zA(!f=Mh%E$Jkuu>_S|l22i1 zlA2zVfH0lwTO4%8-3TPESiYb9g~ZEJo6>{)q6+w@Fc-nI0q*#v;{3WTG5t2(GL4)r4o zuP?H1)wW-i_ONMN?-D1(QxJ@N~(M=FwODMg(0yVic|tCycVwHC2JD8Q<>vccx;Sor&kn;1gE|QBd!)YTVs6m3ZMl;rWji! zPGO6^zUXi$9=*A@C+zsgEjFAAiJqK28;#Gd57yCw##4;7(}}-*&k;UjI{xY5TkzJ_ z_23pO9lu?-bLMc)yB0l8{CYY~)_5k4D7r~F#Vu*hcI^oU@M(j223|&&V*9)lF9sKK z0-zR*BaKpM#!F)KYP)%;XECQJV+6OH@&t_f^g-Eqft6JrNLwL~q}9ICPdIDQV{3l$ zc6<>xUTZj8r#WZ)+JtD0Tx%`0ItjSuF(77_KDn}5E^YFIGRFI^&%hJGN*r$$*1Y=p z7{Cj@*!JL0(lxOqs3vLMk>YWZThdm}mt?1Fg2Lh=llYQdGpB=Z5%3KQqc>MT^a{6| z13z?ZZ7Q1LHD=elry_^526A?|aBBS1Yjoz~cED?TcsRV)OV4-t;rOs7JQ}RA&4!#` zc5L)G+2AQBoCAhmhcP`K9PoI%c4J@m6(85j`-JfFMQY^VwHpNS3f>N}+d4OUzH%g* zEiFiYiv;1EI*e~6$<@yBB|Ld9;pXdna}NKKJy6YLOL#Xt0V|@Cy&&*@V2&r#gJ#$| zKdB%56!7S2vpx%3^>fa0w%7b&7ti&rFBkA$)Ry|}@NJUENBeW)6}Vpw>FzHlVJ_X2=#F zdt>LNn-Q#YMyBUqBoSY9&7RKxwQz++jtlZdHF`llMx%FS? z?E0#}rN0NqV?tO*-VYEbfo|kE0<<$PS=M(ovNfMk<;!5rj`1<1Gu^E`xaw!A+_~~$ z#o;sZ!*WoxB|mkQ13fZ~*?8LWjxUpIFwom)c}_nAc{Hec^@%^%cUrEKmOFYXH~-mY zqtE|HE!L^F8k)_SEXy@szZWQwd<}X1@{l?A6588?k3Y%R_~$J`k}t{Rq)8%$rAf#Z zj4|Drq5b3x(#@#xh+(yL&i6#u^f*N88gId?`q7%ZsEagML2@*%KLP8`TLhc4*JKC0(y4CX$(YsjJhLy!f&1q~H;*m#VgR z2;ZgeoBXEKlVW*4J&U#*ym|MvySObNmdokv13c#Ihbh)1P_#*0AK>+oKbCnSAOrLp zWacfvuz&Q?|NP6pmTxs!kD>~ti7T-rU+=o^?mjth;=xH)wh~zJNmOHrt0@ErSqllq zf!D!K;`7%#Bp*1$W6V$E!o^-Z>=j~tuz|y6^JsCVuNJ(R>kChPu;r628D0MGHY1|fTasoHDB3G? zUPms5D{0p|gXL*$2Fxz?;&|!x3}lT_49?5*v1qQ>mwZ*_d@kpK7_TPC58DJoS@df_ zy2{&=J=>f-QC~L353N9PS@v;0%D?by=1YOemE6Z?QRBA0;YO8cM*BdJ8@D@ro)dyv zkMTnsYj0|%=wqeu9kZeY)5KC7E0NZtatlFGNLqT2o-kyJLNk`UEf_KhDsd&SF?(}` zCfT)}16M)dfq|9SHX21=UkZ&MekH$n^u@Qh@HaNT`5|*Y#aIs9;=^mLu!^btViX5? zSo?I_hdiGs^{Wyp8Y{aiO?;33eE$prfM++T~ z^T~#+cI9e(*7`%={lVItVDTDh%ki9*CGd)9DQ?ovi!v{+J>3~ZZBBjd zpZd8V6WbWAm)c*!jM05!T+vvsN#3z%?@GW{6hon}F67;;2k(0r&p{qS!Nvw6Oc+W(q zBg2EEw)IC(CN720!mX?YT7G!84Ack9e9)}^>#4}xQO>&KGjl zsw=jA<+bU&`spjQUv`BP*E(BO4>qEPT#ofO0DL=8Zue39^lt(Sa(-&ihkZ{*c@ynS zt~*kb4WVTAZwzAO`vmfmWL{t1l6*}}NhdKSorEKo%nr%dyOJ?pt%=J{lhAZc;wHMJ zRoL!+FvgA3+|k75k4~}aXAR*LUz=FUO=iqaf%EOaSsPsV@wL&B*-R9Zbz2(@Tg{kE z;{&$w&^d5hj|S_>MI7C1aPy<@rf6JS*MM&v)}ZI3=Y)8z)5;MSglD7Zk4pzxii89@eJyGW!Pm}@g>Lt zGJY06SuJ#d58xszoX|F7b#?YUuTAw=PqBy|A+zT5vRoDe?`*&S?{ro-^*fT(y|4Q| zuQ~qaj|L>$C*j=$B#^%|vcA+8K)xinz7nwdx%4^rlC;IchXhv`lN>q064zW(OGHVD zThdEn$;$>0eUrX8JjQge64=~bjXf?hy+dnZ^DWsOVt_9%KKk0=t}P6|?BMXRhiNRu z;DqaXZG5mTwA$nD#)40?R?Xa)T{i-}Y#r=+9?2cfAG{4wf3|L3;&tE_Px*0@e>dkn z$uL=!S1tSdSM$?j#z)dVCSx;b0CSs4O0A5j&69!Y_~B$_c)Bgw^O28y#N~z3+v|Tc`uh3(m?~L^w4C z?7+i^9u^ObvDn--=`_6+&mNz(!gNgTT(BW?p71H;^0FuAvl~qdpIj@S zjYhNn7I=NY);}K2TKFc1w?6&;GBNU)jotjD7n|+UP+I}4@jc(5`!2(53j0PrkJzkJ z8su`l^Y9tj`SQJOM)(w5WDkWgtlN4SmugvGGdvep$L%-D^)K!uTVqSOr5&}eqjP?a ztJe?HR_f-+%N5@Vo^dQTKBzf|xrp;+0Ew~$%Lpv%08bA1fWS8fcy};;-UtTn6aFA< zAYZ)uB7?Unbay7-7?eAS;V97PbixYR{-B=_syyS0E^8sI3v0UMZsz8Gfpj4;GiE?>dWxADv8tTYnvH zPnIefwytq2cEtNd!tTmHhC|8j*c58@1iN^~%j9cB?PzG+AI%)DKMh(U*PH&@Q^jeElQ4h z@BdYD!fywD`}I7`j#W}1eV+B@OTMu$8@-70Kl8kGSdWqGF8?kd1?@dzP&wv%1hz9F zuCE5%-;^Uc6^MdV4DL3P*H{7R@kmT_Noo#bUi%jD3UYl}3|6w@fS15p=S^fXSVhDS zxtMVEpl7G)6$Ra#oXFU)cbrAqJ2xBgS|>X=n?g4Sy!C4>S~sbVtLK{?-|pzv#zu_% z;pfYG;q+|yRNU||V#3LeJvqH|>R`u*qyAuHJn86gj?8-ipzYjdo+9ccq&ddsJMB(jnb8jI@c@Rfy~rQzG&(9{+xM`QxRky z^%2aUjEd2G1wauc$$TfE6O!E`7^rn8lYEMxMI+(eiNqj*>y%!y_AV+>TLk2i6_&mQ zM&F{4$oTlvU|Se^IzHfV(8J=gA(%HNoV684<*=IK=UbuR6(1ZMwzwR8>BWwtHsusg z*F)yuLyz0h818osljp%~CMy@Wd^zySsD|w~XmzLX*~OX&~F?S8y?hO~P=M9}8ZX(E5x(GD}DarRPAhX%bDMOEfq>H5fXF z1a0!td)&ok+(Ij-0_ocMl(D9|m?{17oQ%qzUJYM!4 zlk=h2#M3*sm|BQEFSS*K;x9+n$)+0!T{k=aaf!K&&bjMmV$FEiiwEAgeCGW3yv%v9 z#;oN?V%cJOFWS0t^ZJT5442ekO|DJl1=|LIWu2=niiqX`yV94YW4jzsvcEX?d@aEK zbKwje<-HVjLKqekarN^YOd<^iSSA_$>hW9pSmlCpmuL(|n?zfV|&V_zumRhrEZ# zm0IuPTf`Do;Ycn??vSA74hgIn$Rw*`k&u#|9ec@3W~?AuP%v!HpMQrXD<2y;ep;mb z;^tR@id9_2kl|#R`#Oy;x&7 z7(GrHo0ZtKu7TdsHNaXkEIFJQamtHHnQ+0cY#F-qWmFppztd?$I$LBB?z_-thAL!R z9HM9@2X}!i?1O`g_Aq`J7Ttc>FOSz?#E0QG@IKfaCK(=uc??I+D(CiP+n(rNQ!{w* z2y_W%(An63y_!m)!?xBJYd@U`AuGH7-2pt_{#79^m_rvCXy6(9t&py zU+1&FPvuDvB=!sFJZ6UUozDjHr10gJpZPFx3PSPFGg1_7#&K{ZvpI}Alj4(El2ftZ zYBIBjBXf5nci_U&54h?JR#V`{5}c2Y;mFvx(CNCtkkea3^?ci4;MhC5$~ zb+9Xs9>4gD&y^T|jnk749Xo!+rSS*bCnI?0j2@rOh@AsQ{5YIbF`A1@YaGUO`Tdc3 z?`ONu`}OQa1+aWR_*zcpb@>@B z`^zel&YiHmh24hMv0540AL1v`X}wWb2b!b)^;>j%0y!|X9h+0maN0Gf;Oe`!ORxr6 z(|i%Yi=^-||N5RlopPP$g8As5+j$b0^7cu8?&=9JX6_z&44+e!J8F`5$(+X}_Zx$J zCLlp2oFr|+OFqrqSfNW)N!J2(H*z$&T_1Y*et?C83=f=fHyJvOZ^fX%dW{>8Vrg-( zYr)XN7ia7cBVVxm!MAwCMW;B8TkJ68qT0 zyAKc$->MtFTy(wyUnlCs2h~l0!8u+8^I9LbpDN4We*By)+q5Fn#xfifJxY4@Fa2Gr z3?8-HQRLx2RelrD)NzGz=bEpUVopI5%?|^8`ZizU+6g;}5mWE;KY26BVlUyr17b9q#I24j(?_HiBagE zQuO?gl?%QF0@o%+@~)vaIK(4%I&tzXCUS+<;wQ&XZmh2lbNsN4MPGUSHomSyFE*PM zU*=*kSMcn_SWddeB}Q@6J2$u|lXg->=K|-DlpkuYeRJSd+)5ATS>MoYsQb!~i(DA(mv#{V03ZNKL_t(z-@%wvZE}nawX&>PUuRi+vUn$yeAsZ|%k`nY*1Ny# z>SFrS&#AcNVQ-|%Ag{B=2XrTAEF1ptloi=xzW5jW1Q(e;Ii^tEwFf=AyfASjf4)v0 zyvY~zW3UoCU;9td&-eewD3*epSLjG1jxH~I+)&>>EOCHeyj_o#VTHQjZ5#mb88&cy_vc`ce^fF>Y@WTGIT+|mmd+H@HtK>9#WxNbVv4`Ut)n-{nE5?lP%BW)X z=j%Z_;?CDqxK2vNyYKXocS#%6*j~WrSauB2=l?j{)(vjw0e$k&ukBA6uTT2&L_gmY zlsmPL`;rFxW51a!f!)G$d(0Q{d<$?$KgpfmHwM|3=ZAoT@s!}{z>@&KEpiDgc_pnR zlgtuSvKdR#CZRcb@5T~b0g<`O;bMzRG8;>1n~CH%Cc}f1KU@yBlhZjlVuR7xwDAQa zCOpP^Tv`j6tr#4&H-?853ohfvWUd%tiWRqYkm1x@t60m^^J7j|ZoJmT9tL;ghQm#- zIse_*&g)_0YCP77OPpfK+rCd+^-#@AIOqM*$^@+1F&o^%H($2(f5Onepy1 zT#;O$%{$6tJi`lpE&JNUB0({Xa)T>(6B7c}-5d`FOspmuo-Y`kSKn!Qak> z>HVyLJHF2d_>o8`B&cL-QE@2YnrPxt2$HlL1iYe!ahOX`Z3RBV!7GT$VI@3YEw~n! zWX4a28>eEy2dk0cbHLHDp%_U>gdNy3k$Gi$_|7w&)_HrF@&Z)eevFowC?_lEM`hotUD6D$@e#u%%buPmyY2Oo zE>BML+x1O8>%G3DnL^*ei(}MEh{(MK;I-NIzIOZY119>vT<3Q>^%gxli-v@xc zGQh-_0{Qgc1G40llzK@fxg>UrL^4V`y(alvxa{EI=_PA*=J;S*tgvEoXyumpuy`C= zlbl?#i$TNX(H$3^<^N0hPQtNkPd*noYvA9e$CvX)PKFmJxp+1DX;*2@MO}57%e<7%O|E~lw8FDrH9WXU zilvKL3|}_Id}sYOfRt7GS6!WC1qsSAR=4L@?O(>RB;_!hg>K-CADH5G_Q4gZaF5nW z`$P5mdIBhW3AfFfmZ<&ZF5jdR;3Ync_IZ#?tEFlcaRkbFCNZ4ToLunTKyw&6rV{2? ze&wWu!M6~OA726Rxq!>#2ZdnfNr3ahUG(I zlPh3YV}~(pdGSeRa#&*rZhjn!Y}OKcG4#%hLsMLegZ)as6~D2&DsBxg9>r|);DZhy zdu!CJ33u_vCyqbd{Pnz9uQC2Me)zyc*P^xt{+$mpTsV!{@P$Y0u8AI|>ovy( zs=aB3deN7o%Fc0iT-{5eDW~T^3v1svO4EJtgyTb;IY>TVj9D~^7)phkW z4S;4NbKSQzf ze*9t*A8x)Cp+hVh-*AeTPqE@}+~i~}Y#e0PEp|P>K-gxz1Y~+Vick!SMWHAd z{`nRs&Tc-|0LPw=y#~{D^NABigRxF?82T12J{wBUL)Qc+4)eyRxXr~Sc8yM}FFa!J z`N3^XY;c;3b)DChSd*7YrDoF*_Jush$`y!L?(QqG$0DvLe>U4o$|bp9cM{f}zD6HV ztz;L}wDx;C;apQ0wx_Tt~Z%lG`7&6j}lB;czC`GbMi)%1M;Wb*{Dljq&~m|!rHN^(kk86ZJ5 zb4e%RB&GsVND4q(!QFo@oSsfXD|C&FJ$Vbga!IXqGoV*YT8o)Ktxo{GW3u7@j0cX) zT3YOUH%@Egqp`Kv$l-ADD+X)Vm){sKT=8O2h%gFOPj6#!4&nKRG1i3wwlHKBplDpX7Ii;c(hVm2sX9vMD5q1T@8e zeYc-NUe{>8N8nfh=nR(ubV*MLMT2u ze!2;Wp|RtsUpy^V{>lrFTP%%ReC+gacp6J>&B?oI@oCN0(euPs%;M9^LEiI+4^JBL zvZ ziyAYsjh^Ud{K^Lz3-t;=cNH6}9{p**X$-N#XWR^WZ|?)rouFgfC}P~xwz2CSr6-x2C+oBJ67$)-s*-z8{n+{Bf5 zWaf_EnaJqKH2oyU9^-ewkShW<5_~7>^n6KPI?Y|q+W>NFA~)6)7EVQ~%_#^soN;5V z97eI?WXCU##v~TL*()x32YWheWqazx#-7g8g>^Z~OU~yRi!nYiI8XdpgSoZA+q4|z zqa$w<6K>~2&!4!AHTX4Nc@q3p_!1@NDBAAPlI*!|uEVo_r6wZk3%!}k`q)DaVDMvi z@uPVPX&FB`UK}T{MGQ!vW5OK(>FhD1-ZsWJWD5cBq0!hr^+i1BGFkIEnTA(uWW|r- zVZzqGv+caUMC&RI#x+Dr`dHn<=5ef2JdosHmK5^X;C^WA?S z*%*8d@cvzjYCZ@|a(?_tI9HKMZpkjOB&A+)C>Y7>&Ld&r1*uRZwgi`)Yz|!?JvE%0 z9Xq~zC#LK9BEuuz^7HAKi+QZ2>#!!i*zxBa!;`Tghs8%vXKYQg$>dLiH9;oZR%!&} znq${GxJ#oWHhT<|VKrmObj#D_Ki?5`vv~q<8{M{A5;h&JA*w>!Z;0-tXe4oGQHR&e zUSKOY`-A(zpqTCRggxVCvpE66IP7P9=$)oD9ng+_nZVxq#iRJ=rvMG|S)CvCvm>nM zq9)L$OfKZkb$ff8>+)#PA~m*MGLF2!G7 zKa3yjO5J!_KDlGJ+VunNm$v-7zkruKt6WWA&J5QosV?C&@_7!dF?eDdd3BwXxICTH zS61wZ#A;>jmvW#devR{*HRRe)%W%H>k-U*WW0^CTlfC4Yo9FE}`QZPnUW<=oJr2Fk zSJb}iuV4DZ;ClcVdJ>pN{}3DZbAc9?67}nwIoP8Gk5le%5(f zKPUxP?#kKVaM0oB8$ZAL9%7&)$Hm4vTKu>)eoqWvni%mH$JV&#BcJUcm@CUB=h>eI zi|kIbdvpkgedfoVZIF4B^#XtRmgNrRuQxqBquzqhKH<035QG3=xq#oKH(G#8;{+J#@*M`0bQRGS`2Uw z@#w|Fx6PzQCkFidSC6+Gu;qp6U7bI6jh9>#Hy%A-#+_TU1HTKWw=PZL!{gDHmk;qf z*y!=`&j&uS!qHnNP8`Nd9tY8Rb-eo`zv*@E21L{51`iS%4Q`EQx?ZZ6gHb|*=H&sp z)c_l^^b^4|c+;=6Ms!gbtT4QqoVFKi=|;bYOSRU!L?c;TBiM_~_(C<(?Q45p5wNNC zsUNQWQuzmE*I7Y!pc{*eM>PZ)Z%C2)FFyb5Hv)^UC`Gh>QY!dmL}k4Tv%aJ|MpJ9f zZ|-Kf^Sl0&96sdBzux72Ncd@fNyytzKlSqkZ<3_mFueK4|Iy$6n1m3tUmaX!WU(*(xBtq9C(22fSEt!DtGk1*_-N zy4dT@+40drVv9q=D}FrAg(n|&y%W>p!qfA@4xjbl5+@t}9k|c8Bm8ROpm(m=cSGch zjvYVv_|^1m@WaRk;}K+#7~Yvtz-v)I+)75WRJZ=bFKJ#q;$Jkic;MoD{6~9bZ;_Av zBJwKU$>fd)IMNw?_~i~}osJ#eRK>CymK(OI#%sn6HX*+be0F^@o#TrOPm8iE*w<>- zx%?co0WbZc+j0D@zx}s<#i#o|1en`@UUMz;qdb}Uxu1C;Fq`=ZkQ&6#`?o*z!@ud1 z=sx=HoA3JkAjy$Cx5xfTlK4!5x%+23h-iHM@T1uCB8eaWR|oNPH{>^ zI!UQ$^$I`|N?sTVtY_ciqI2MYGOlC@wV^vCCN#pvKZQI9gt8dgR25UoE#Fw=?7}0Hd>GptK12Qz*ZL3Cq zfKG!OYSe8g=W-TKHldDgy-YY;U!4B2O%ywn7s?H7NO#{;4A618&6nGuMLGlB!tUu7 z=gR!zfAwGf>3r+{7diX^fGO~`6&U-_wHz^B|HnmgXTC#tKG4rs0`dn1KMgjQ;^W-W z>Q&*-X8=jye3{_mk)u?AHih**Sz;+J$*UmGWHgqzieEy*NM14p<7jax7 zCW+n2@fh>jBEYV&YMrSBTbDK=cNIIOLHt<4hv z8-A^)1>3mz5?l3bdmi8$FAj6QoC{<8;&9O8t}im1C_dvBJnn87^w#AZOg_kwd5bvb zc%A5#0WNQFx!M^~faNtW4^Q4O6hLEhf5unq(XN+Wu^TzWlci(4e+9t-KZZvLhqNxk z6u`CX2xJ+Y*ctCwm)A>D1A;+dGuE$V4R%h(meFZ;$9sI($F9ly0<&!wLtp3YG?a}f z_e|Fd*gUm;@x_;)f1bB*U*>vi*P~r>B6sp}KNpyTA>W>o6QB5b;r#Qd|9T`JT|7*3 zDio^7K{S1K{$-pI@aSmI}NrxEnqmYD0Y5eakQC>fzNW51757`$uz!u(6Ld( zEkam&a~l$F2dwyT>e=uOW0N6+acKNmLyI0q*ALTk)cEy$@*iRs8cklOH-5DZ;DQ+R zmiYuuqHA{nGitGd)<@Jusvko$Ow=t9&K>o7-P zo!7V?$tm=Xj(1-?{W%sxlZr0wjy=EwyXB4fqt8D7?AO;*{ygE^ei;l$emw}sGa;*- zD=qmq@0+J$lNhOI!&Nj5LBg!qR#8|KBJy>7^wID7C;zeECfOt+tVETtl23xV+jMha zLuXDd86|D+ROI4P;Kmxx`ojrt4#O`!KkOXV!IrEW0iS%B<4`btykOzo0l>oG*Ta-gZ?j@=OeZ$>4uv^!5%h6K<&pw`A<4QF}}_h@I?5NwuBe9aDzAKfnR~` zMXbOFvk{m5HoWFf1L_`+D%6hW(^B8A-RNRo8HRIgzOOOOK4w652~1}Cu%0Cg9}oWh z`uD&8%Xt!?>Nj^qy?9HnLd~b$y)P3ED0wrV8~FLY$P~7_qe58kGuNGd`^=7yY}TKI z8{$p+zx=O%_4^V^f=OIDiK##(8*X|9MQ;u(u{Fu52T8Y=>FJ~Rb`3lBXVjK}}pWyL9$uBmoxHF|vJ_20GQ60d@s^E4J~LlLiY(zinF zt+VT^zn-_oXnpvd3$gPdR(Kqao)2lo{ zRpi^yopb}LdjEBvCG*HRzYdN+JIC^51DJ~doj_v0n0E>Jy@9EuRj?9}1Fd<}!jp6o z5ynAJClQUsB>5%0!s+{Kg;6~Y2`y>KHFFJyjU>m9+gR~>-%a0QXn~T!Hm(*$H-vJD zOH3_XJmM6yVpBZ);eu_BJ#kczVs6`ROKMjq4JwJnQ955QF!+ukbypsuzDFT$P{~e5}{YrWzv3&3RKF z*ro1!@=`5mW*@S_K&P#!%m!VLqnnovoG#jNvSk-&gxBmEJi@MpjsDTZY@z4X%OhZ& z;TyJm91b4Y%eG*d$&$2mpMUoMem~dVXMcVYc)kb_Wz;~6(L4Nn?S3u}l~Hw07+Jn& za6U}Pt8X35jz3Qh`M$9C@2KXgB-vt`En&8Tj5E*ELcSd64-38j=%4y0e&UBEx#ZPL zTFxY?sXPEm>rKRlT@ zT0HQY9w)rUw*yY=Msdo?s<#eJuSgZ3zA>7&X!(L`47C*(9K8d-cv{eK<~`T^!8wGk}c<;f(tq; zIk=yP%ScXZvn;)d)fnW!LbN2+E(zg2D%jXgU+c#tFUxe%*ZW@cGW%9swOsva66R|< zgTMBF|F!=qr9Z`=9L#0c()&t4{%Jf<{U<@xtG0SIJhM0R(|{uNzQHnFC_f^s=P9tf z>fO;-ahPX|NFgcKk3aeyKk*Yk_R;tL^52x)l3D`xjw@-+6^ceK5ydAFC91{`j6{W3 zq>dǦI=UU6tGylxh7<=5MgU@AA}2S2|pa@;U2EWLR7fj6gjh><_`3Y8yY+<0(z zBZQ^1UL3H_m2q1O6s|fP{Il2S__k@e%WHHF_H=B_#b90KpeJW5Zu8aT);hKzbH1)w z2J@lcEm?^!9J(BnDf2>dwT&|$cY$t_*RTUyRDn$l3k|%LGjuar^NX*5iiNa|5k<^$ zNoKeW_F1@BdqOw-GCe2`j*Iq^)o%G%u8nK2Kbn(&kc_sci%sE?jri*?zWm~E=ZpRG zwchmseH3#MfeTN)WH(5~r_>{lY5V#%mzg;)LiYH&z8%q(TXQ9vL~jBb3xd3xfIuW=i;ABnCv5M4<%Cm2 zCo5?~001BWNklhUa^^+Ts)(_AO_l#k4RP)hxr+@GIbCvV|%f!`T6>6e5|Ne zYaua;V9D}&Egl&}1H90O3`Q%XzU>^>_K;<`{x6TQavki_n= z|Lzz66Z&~_U*g+1inMv9U$^_4X2I2TZh{k7idf?KCZIgrBZ9W@{6E-Y39m^uN7{Vg z^SgidKl2awj-zlStfDbioW_0pWG5N>KDC7*QRybL(kldW1=4~Nr#TGXa`V%|)+hw^N3du=YZ+vM5meOXU0Ckr+K}LZAqwdY{($;vai1BYJKCL*e#L86kJpp|9&xb}2@AB05H6d>)mx zKe3>hpYX)A5y`Wqji53l3%_)0GWN-r&;GrC|KI(ixvuW0`LFp4K)p7%n^|QZ5qMtI z8#DClW!?!S!KUSJ|IHJ_e0VT5J|7Xx4+$-XJZ9z_fc(%9PUEz({msAS@B1x3_;%f) zCANf?q>@!@uW&RN$thVi_^f0KL{WrvY$UC*WNrdW_H&GrFY*?i;#E-mXz&htjj#Gt zXnb@75*JQ!z-a6gTkZJk_>7I5t%D7WgOB=#FRwA*Jr8`slWTA`O15NT>$$NuYwWow z{@j$<*B=fCyw7-Z5#wqF=zZfj9a(G49J9YW=_@{Wn%ML$YMX6Wh z zpmJrT>m}pNEorwI+_OCj^@VvXp4)N=F3W|#wYvZ%`a0_Ho;?r;#zb(NIQ`gOOgFU(d8wXp(#?Ap#S>u8?W(^BF$H#tyCpiu?3sET;Ok?#6}-Cw*nO>qjik4I4hXG4jR6IUCNMP)4lHw{r~Oy_BrQ036ix^?|rALcI~Nl?Oj!0ecw5^5Pc-k zW0c0{M6Xi(XL_EGRousTOii3(#$;%5@W6pbfA(iTc>f>$!6$w*zEJJSYv95;sa~a? z=>TD3BCu&!zErFyU(7NT^QDE8Re$oq(SjtE6T_+3g@cn#LfYzHvSccAbP2(?ee>76 ze#iFl;tglzY@8GSUfmW~VnNn*PHT0t`hmCeYwtv-u5IgK`>oumoNnkD6~@4JTk?hGS$7KD9}BqU#Nfqlc;tjO z1T5lKS@@Z7CR|m%Hl@jTyLt|E-WK$tTOcbC@VMrM^H?o#Y}|Q1mvAnXuAJM!NzwvA z#;I@`G%UiFAPrsAYl1CwVj!X^`KM2vJoupx|GOVLvwYe&H*5PIc4_pPR9HTT6^Eo@ z+Kl%YaF6+eQ1%%#{xsO)*1Oq^9M5L$7BM@AINIRlR$D4&obnwf;yZ>aMhl4kME(u(_zDwxz!DN6x zUCHYH;wjM;P4kt*?-c&!EhBHoA$KOaQNg5{V@%aqeb#Dt1@$>;xJp3h!Do<({oLP> z4>e{@K=VXha++iE0V+2vFsXPT8eXUVU!9=NuOVsFOYVzsI#<;>?Zl`hcf$Z9ns|+3 zRR(YrGoC9CJ@mkD|MXA&+&yPk>~hDAeAA_UY|q26c0>5#l}=9v^4EbFX245u%oktF zLBaeBE)<-CAzQ(PRX=40^y|U16xd|jdK}2P{^PIy?j3<`eEC;?<*k=oINti>l)ZAI z<-D8_OcHebupJqk1B1~)pm1*W#lXN-ZcpcbqdzF^!uOvs0M&5QoM@M`l^0hY(eERB-i3J`RbO0j*y-Ppn z*|sGEJs9~d2fx6@Mj0fTe7ZVRN}Y10*+7>=72YhMW^DsJL*^sNSk|nr>>qx`XeK9C zNSa{7Mw84f4*GH^kOPLbx>O;YlVrbcQF9Ezu25^Hdj{-4}WYP&piJ zax@Y>Ol~a~p42?>Tb#(?yXb;|pmTMLzTSlt(|RwPkl+ zz+gm^g-4hZbRqkbg)Jcdmy12=R1c%a3t1cJnbs)}l=?h<>eQispRNBN{o&{Gotrvr zu3!C(&v=qMPX3Z-%ySgyqfYonCDokyjKkTEJaL&a6I)%8D%Wnh3o;7RK zkoi?$PU%t>{B>xQNhLA`eH|Zzc^8p0yyi7Gzv|C?#j7t3?{Zp!)WOYh@#-z|`EUWj ziLLPR=oy=g;NtKdID!Tm@GK2irHJvyMk1f0~97FqbBhuaArx!UOj zzxzs_w$_Ud@Lb&nW@163k1qVX-|*lI*u}m#UozV+^j3$*X03-DA6MJKBteEdztI=| zCS~jw`o~NGc6a5IV`?aGt;V@U3S}Y~I7K`KriL&;I;C@&H?$iIagH2tNea;)LpN~K zhlz3sEL|tsp?5e9J?ay)=2>M@ke=JG0SkDR7TGIHi}}=Epv7Jf&H)d}6WX93EJi;; zGOlMId-UOt|Kv~nzn@<|Gkqzp#)zk6CC=@5Jp^0VM@gc*@mC@t2gWhOWY%7tsiuuhANiG!e$GT7z5A>F z`!~Jp(y_&j8Wm^)NwDA{34#u!UhOy@7{}GlVL31zzy&Oa*Dk3Glnz3$o@CHjA+@1x z`RJAL?}-LKxOByj+@472+cFyuZ}Xw@zKoI7d4w%4$40qy(HSV?XoWYU=hyq$&@5#fjGhEjIIr zBc*II1p7^aO=#(@Ghp$ynGaSV?6 zvTpI*+^d>hK?i4VV>>{|b#Z0^%JIntgNv84B)GJ5 zbntG6FIeT0fDk<0AHjk*IK3Dde(Qjb)PV&@8=cT}V6~p=k~)3Jk<(Aot}fAuu6XjwCyMhDc&9-zJ_miZglha(D|VHyA31V(*DrtM!$0<)Kk@0q#9sGt^x_HxPC4d>aSI?IrFL5N4p?{sMjPh^cXbeT zpyDYY=%u}bMqre)N0km7dFwAYS{9fK9|otsRhC?Qy1i)y8$7z0&`cg^)s+Q39&(cf zUg~g^(Swr@M(4H-e#(+uT{{}7<&i}ncEX!JY@%OsvbA*|wYNQjABy~wB~>MPMz)7C z`Dg=KfET)tN?c)36sIO0v=jY=Dl0jY7Y;9KimIj3^#!6LtcLR57F3nA)kHQC{xQ^p znMOpl7#3kE)ZHu=t#WBH5ll)Klc~LB55{=05Tb=^GzPVZFq@^pxwILu9*1x^cI?ZOygY6b^WqQQu*PSo+_kaFfJKEk5`;?hS4&;&*=Oo4@9( zZ@Y4RZERuN(K)mLQ&;A=au??YcS-HY0-+sSS?~~}oztTQ6C@np#pzw>T;vF9G|iU` zlMi`t$!{1Md<2^yQYHhfWP+jt*=PlJ2P~Y{r)l*W4BwVRZnvYsL#|!9Cm4E@52hd5 z@qtSRa_Nb`M5opb9ylHWavWVCFpRp+Z2+7@QVO4Q>Oe0*nlN5~2|kb~ zp%daP8x(W8S&7*Cha5B?v&I?utT37eiOHZh0p-D{8?(JyJ>{8N5VT1X@~kbO!B4}C z6U|NT#X?B9If-~0Q&ovnY3Um|9kJq0xcN=N@G9rxoO#{Q>%*&=RJNfa_$%J^uD2XLeE5#v{N&>&IW2rnFX%dO zz$7{6#*5RI!v@~L0uD!;vH%nyQU`z+YV=FHz%n^VV1h+mE_r-tRR%*Zi1Ei$?$U-< zSxzT`+&bZvepX-fi+pV^{IvJvgoglzCpAwp;H%?JPV0$YU7xkz?zpf z^lh67j|VgOW-hdO{NgKA`~xqam~bo_^}p~7X?%kc9EP);S&+(MP;F6#l`PInq?Fy5XHQR55q~_&-YB zURZO~Ldc9T1u5>Mu}X71!siKZ2(vV~Ezlx(w9lcV({=xv&@IGoj5oUM#zpbGsLKWqJ9;gAd;K(VzP1pZdsi&+J{h_~PlMulSH>|E%NG zzGlkmXps%M1}kX@Y5`M>PSsXb9v>Li!gCOg6{S~xoH!ciDcCfJ*z&s-;6#(fXE`}8 z?*dG8{AuhnG^O#Pc;MIn<*$9)tFOCcOTY3eSR@XLP7*jK2#(8{rFLvV1MZ?DN4KIC z|IjE43Oc&b%kc(Zf6M4(bA_Y01UA1ALLMw$`ob)bZ1Y4#<|@eWZg#C&4Jk z--RbVCAJa#-A{cT!8;}cba-m-pzr>I(Sr`?@WH$JWgA$bQUhb;@~{4vWL@T9BbusI zaDzM$Uf8B(5W#>}Tvd{)K1vfF$U>TY7^IY$D5mm6ejd%7ywFPegxTw!Tw}4FsWkv| z^8dC{Yc+|U$x4?dD^4wHL!BatUS;R}tpBOqyPx><&wSwD{MRaJ*Ph5j zP+R<2M>F;ngR@SjmblKij}z~-R=+9H-9d;^e_SiBd^r=;E{c)1s=2I$n z4@ER&R3EC2D`$i=+LX6!`n8Yz)}7%s7!J{!UUvBvm;a4#{`%Wqb?qgaIXF7O$62k6 zoWFyD^LF4Z=45E=V5YBtV=O!b0ltE=`jQDiJ38&)ZCG*zQ3npZ#x+5p??BR7b$kR8 zI9$o*pZdVR{rR8xjbHnnePCJXYh2NP-}k=%t!z;jCy-<%eriYt*A-tYz9{ClLo`qE ziDAg#JI%{2zCaI&L%`5;no43fJ|c!~KiVlrK31WQ?>Z#pPwB897O9j+fl;Uq9im(% zid}o%_1AvOd%y11+g^M5){8G1&*;-wjvegkJcpG8jbIV*bZr|5z@8ukLa&VAa5y?W z1&crv5MaFmy6-0oZS&OLW%5l>^y**|Z1j=vCQ~~aWvM5zZpV`hm(=)lr%MMkzGRZ& zYF&F$Ap?zsH=F1iIy~``@Y5#gU-JP|CW9{J{Bf1gRx&Oog!0nKg^EddOOUFNl1e&_ zWL#6jtQ}5W1Cr0+cO!!0q&#TQq{0O86<-Oc@wMAt2|2ky=)gw9dBMpPoXU*Fxvgqo0s@_+tpl_9wec9(%31vk?+z4r z0t8P%rHl_eZRqgtoGxeuBV4(GgRc#4^K4mk!k;c+jjs>N`q|~4gjyGE%5wBB`bp$< z|L~<3`EYyUq90iBYUDF!1}dM^(oxV_APnPhnfa5WF}8%w-9|AyMlb-^_`|7$VU!sS z0zxY18%3loZ$QrDFlY*?aErn8@uCDXgwcc24Xk=R@fkQlDD|ec0NJet$|;I2;F;>x zPIALqi(*=pb09-j?G%O%8LAT}mi9gH(0#x4E5G(Dzx<&O{)eY?V7}>87OLLOwSUyW zY+Bco(oG(Js(QhEBu!TCN-ex9^q*pU^i5xAm)x1&)>q$nRh|T3na6q#`CjI<#5p$SgCcByP7{-I~DZ$+7p2?7(8-Z=oWQq8}-Dn zsNXbL)gQJ%Cw=id-*(MaS6+S9mi+m6dpiSt{f#&JS+`5|$T-cstSE>s$P2)uIiFKY zvIQK)=_vxlZdu?zK(mG}z&<}!8#Ow@C@M|C`X|wz%L`^R(NaC0P{6zQjkAcqC}orz zYhp06ViPGfVKnRf2zUOV$L`PG@kby2w;%eqzx-SO>0^8PexEP0G2h{T-}An2y|tq) z<0#1L93XM!&w3?PGiW)?6|g>}04lz{jF(AWnC5>b`9W{DU#zIJJp!{-_TWU_sgvPS zw*^l8t^O<(r|ZMLDA|XAMsYY)#ANl)S8J=IgHeRl{R~}7zrxkNn!l5E3UZw zFaA$o`;M1h`tf@|dB>AWODD(4JBRN8>)=2EE|?f8Jt>D4V7ekOL64`iy!`UQno_d1>hl()iUU*4p$kSOSvbtrqK^=23&yB4US8lKHBi= zGMV})p$8`q|6W1xG@;0~!MB^3*{-O|E%K2HgG_E5Hlsmdctr&Sloa9z(=clt)Zk;4 z$3!vQ23|4E$K+>KMOK6*Kns8jcw%2rEeolcO|l9<@@5##y#e!D=B)PUkbPS2EUSs#Wp-Z`va&pmp=IJ)3cW0!1J4mddLTVHq6D|T=YDtBXv z4Py#P0y$-p@;_G@hhq&V3@Hc8ia+0)z%?l(ZGIxVfSX_Us#nmtE_^gh0^-m+UU}0^ zS6{sS?1^WdJ9uX4-T^q~Wn4DxyhfTsya4hO!A3_R$JMlPV0 zwY9z`Cc3rl=-l*j_+R>EZ@=cM%dfgJ`@2Dz8T$HH-uULwWCu_Kz3_>{ln9X~_ZSWa zFu`RDz-sYPW3FN1tu&>goV!~PhKPw#R~mgWA8kI1b@B;&&SQrDC-Ipf{Wlg`i#eNV zV#zqJ?Ay2JzCZl*AAI;ne&nD3`mV>H&SU=({KnW=@fE&oQvcrX{#&=6qj1@Eu+R9_ za1T4rJ3ml{A;YUun9g;XNi!S`~ulS0$UVPC-4}I*D zU)cZLfm7?JPoJrv;N+a0;`D9D7H|>+wyqsGa2S}w3nc9>t127`TtLC`SdttAfG>Fx zd4f}F8RUWW#Di8HFKu$N?Go?-YkGL<;CL&WAn-=#Y8<-us*N99{W6)*Q9HPV2ghNf z)&*_z12-{{3D=9B6|;7P(=SOCqw$e}v7FS(Q4TS4Mm`c=No9@{rzQ=c8Wk%GZPfy- z(VnUc8Ip-I`NVAk6qjlZm;8TWT11>7U{ca1H72rwo61b((J-TXA^R7HOhS_(9ZHio zlZ$M0S5`0hJo?BZAA8`Dd++$sAN}#)+wnC}jSK&4e=}bEuymXocPPS&F~_*w zu0Qlq#+&ph9Q+~_U&soDGpf;X;sGAH>sxbso;_@k3U9C)(#B`}BRhcNRDH_aGYPW8 z7z{!DLQtWlOvv)`nYH7Gj;@|Od3yEqnU(cBKKuD+bKiMGCKk=P1|vnXk>x#ut=CRBzZxfHx$*p-zx{1*499Z?m5dqljf|xLtkj4#PJzJ+ug&>pezxEf z5==a%1Xs(}*WUE`wVlY=BfQ`J_ zxAerW$N%#K58wNVU;4;@`1KF`+`oU+clsgc*LcfMj2*w@N5<0_eeZXF$8Aw1p|&-` zYqiXi`)IYb{gckRaPyT_&0+SKH@q>bsv(1-#@CsVUr;~I6kJj;;JloP`WzU zz7KV2Tki}J8uymjZB7wF^XfU0VtPam<^i*N*rh1S=PA3gT;6Ho5^?7a`(^O=ABuYdXv_U}2E@6Tt9 z_*;CBZ}1mm=wec1W_(ujwLkCkXZ%I!q)9O@1C;s0D}Ea{;25baq^`lk!!LR*GzWX^ zZs6g*^))wMogILn9%y(fV-ObE+K&^*A_ObMlVas7NbogthHyrH-9`B~rF5&IM8!xMc99`>xAG*dv+cMDU6W-dD$yL|C zFL4WS<<)io8G-t@r4Io^JBDKTNa-_uXzI2FI9SGQ$_%9c?PLQnjVN6bvm~q0uIc~| zNFfc(IesG#J~JA0ofhaC^k17JZG{)}{{nqbYlaga`L52X=bm}y&ifwv!tZ_bw?F!y z{?$+X%sr=1E^inU_Gfpw)MKNq{p9`M@z-Bp2Fg5}_=raJe;95Qi*5`7i3zl_;tQ38 zleuUkAvBu+I)*#PK7Sk(kKrtsb=l~tw!*AF4g$xm$6B`fr?Wjjv2=7j+4}0r%7%c? z7jq{i9j@gBJ6{2=7mBh?$$GPC+m1T?SdE z@44d6J3jl+ANp*B6?eMglMC4%j z*+sw;IE{lZm|!GJ9j>|o?EuH8x8iW{6pZ+&_eza78Zb24@u4$(cKAGdRI=99Xph zEg-bPi%9(Eq!EV>LNiKbYM8I{`@R9rP_{pFAsgLb^?8&oif8ykc8WXl$uxE{}u`(vc&(5ve86pBA zrWSbRfHJOr@Q29)sf9DYxtVd(Iy1wpqo|VdK0wBI>txxX^$a^GTW`MU71=`$WR}%P z5m%fnpNhkIDeTKWr%#?*TRO6|di=zR+~Y@uZ21Md9|zfzH<~gVL{e6tycOul0R^|^ zuMg$d2y0Tf`>y+*`=T#?>kZ&TUh7XRiBWzu|@(ues^Qt9BfI{`sR@wyth0 zpUq1X)0ZYXNZZ*v7zB#T?SiB)odk&i&@VWGm~jmTxB$cl9{yn3$>{qxG=dXuuhN1H z&*m#{I`W$@JY~8y4L!&q1Fj1Uo^l7U_U>~}Lgcir`iQP+$?rNovHw+9UU~Hud@8#D z3r-FJUwPY(3of`!d(zxcD(Aw|rkNw2gLWR>)Hbje5UV(#ixdN+8?|(LA+8pfTz9n2 z=!Q2#I5+V%sr~%?@>EZc#xgXqp0PtWgu+Y;;8cFE|M5p3{rJwO9=r1s|M}y;^)G(( zUw!8Ap`-rjPN5h#$#}6pdl_G4<7JXIj_?0lfBly5E^`X%9EjT*S84?^hNXhDI1PbU zQ{xTn0W6rY2}b19E};8gcoWe!fh!eGv5O3xGrLey>RBd^ww43FwbS_p;FY{*w3Y)t zD+s-|Zu3@LRaS*7yj_5K2A(Z$zTBKYNVX$4p_x1~xkW{L3rdbX zRn2xZss$mIaq_wKRj+>SP4E31uej=-FWmjuXFhZP!J{YF)}PsXbYpQA6$HJyTEX?r z3d`7?z*yU*jK&~I?$4D48@_PV;Yen76N7;?0ib6qFgZ9nsRtO0PV`|fJf$wnUGT^u zLn0S{ZQ$gA*;zK)a~Q(=bwM}-sko_`*2qN$A0k_KlF!p-}TUG#))rl+7Vl~ zU-1iY_U8}aVCu%kn3e6yK}f!Ka?zS#dga&FGSI-ogUogyFfs%?xJw-mxP8HM!ISsx zgE|~Ex4-?iE3Ufos_X!^Z1|N2?sUUVuYB``*#T4sD3p}GWEf_t$}a|kQT>+9(5o=2 zb7+;OQ7*E4@S-`{LTO%X)Z)2NITz#n)-f#vTJBW&4CS1{f8&+q-@CqDJ~u4lI{A3S_|{Y-S^_zYzbIKF`6{NQpy1!gdM zRu*{LdLj_O61)y(EBNB-Yyb@=8OjD#xd$0N7{09!e)PbnWoSbWk3LogiB3}Eq0^_% z@#bJn1Ha4Y=z&-BCA;J>D}X|Z5)1w~>CS-)qgvGlQd3RmMcEC^ys&Vz zXGWZ`3q-g>f>}F+V3de~t2~vah9G0z$u=ERNzMZoQh}y=v7L~c60 z=%g&l3VzkW8RN6r?w>qFnggB&YjUdiU`}udd_~+XZ=JNsO927VcQKZO^tw zpvPJBR|(7)p>W`l$-`eF$`&RwL`2#-Bt>>!BMzfFjw=4tDZQdu`ZCUo;-_g051_D& zB@zf*uD$;H>;Ce4{_-_XJ^AD_zw;X(-*t3(b$$Qg+@>TjI~fpxZ7^Jdk9`GFPXq?X z!~h1TgV_qM4IB&~sbR`JX$UxF{N?J(y&4#Nayi7}#L^QII2nETs7#k$F?v@+7YQ$I zWT2&!Nx->+vNnB(Z;a^#E^*UjW$7{UFzwsR`qdN&9LO+-{ilkSIVRw!iS3DIxK&XH zG~#zK9AgNrcp{iHuTq8oY?2rpYtqm<#X!^GQvxO~gVms^mVBf}zbSQF*X0uo?+6M( z`AiPFm-akx|9!uGdgauqyY9a8j(_*T4?lG1(2=qXhPM0cYMj`M27flu&<_vo_@FUC^uz!kY>~IJgtvsQb*8I2zG&rOP5-vHz3K9+a|pO4 zPi8VX*BWx;t8RMB1s7g;Sy;{N+U3rBkVd`G445=NtC%w21euo#(jGk8`QAX7X7#~f zBAz(Rk>X}er)^9r6Eey{Fq)uBbALi`Zhb)J@Sa%mNbhvs;@f%m=kNNJ=l4DL=p&Cm zbpJp5!5{vOKlsFF_MbkT#Vvg7cG=sw7*pdX^|&dscaJ?h3jkd3Z2iaT&sG_uvRP%; zwxPXwRG=eO1`>7M^BaQwQc)|+2X382?YSm6+ z>npCk{+iovd&4y^yL89;@x#YYUUun@E%}4Rn^xAw;R|*Ks|T!uZ*iL@c<^%x@(y@G z1kbj+hl2^aLvQ^qjX+77TW9o zgfYve#tC5t#%`gKqG}X5AABxS)h5hPl=Fi%Rl2PYVN`t@#ENs8joAA5zCC;Hf8c@p ze*5|T&pp2L$;Te~;0HhOyTAAgA9=zvee}>fn0xGvv2yW`AT~CRVC*lc^BuH*?|c9D z?GF0j2f66*ZCwkV`dIQ&OTmDY)O}%=JmxC_ExQ^aj;%Lz6-t$yq94Fb`F2iLjg7U9 z<k(zuF6 zGvWkM4Hp^4Wl;Ag0mWtt)>-rXW^V`?JWJK4E!>Hq_>6L47S60Rbz=estOfRj5#96a zJf{ym|J<|pJiqt3o!RQ2y#K!Y?)`;d`0xWKj-T2%b0&|1v-OVEys1~?)RVgLH0c^o zFyp}wH-UAHN|VrVstKO zHE8;3ZOsBb+fBfbw&jF>{nYW3Yx!dG+H(9VKTw$a`?DoNFpp>Y!|?^P(|nUap9QdF z{)AaRv-;X4B(T@&J%FLGKNYwww*xs%j0Xsiajs$F*)n@FuzAx@{EJ_><9*-tjbBpM zjbi!HgDrWG7_N>5M~6l>l?fh`c{x}}X3iE2`j=B?ceL$wx4i!5*T4Raugd^GclTX) zKk@LRPn}o}_TK%+)=q66Tjj-jYrf5%g2zA#C<7;e45$mN16dsne1V4+E?R9Igrk@! zz|`RjY7<5CK@Z>kzg%6)2v=a^Nv?z*+|}~PmhdFUWI&cOoPH^Zyg1FEcZzIRH!;JK z`NDr@=rU$;?twTb*Rp^z5HSgZ!6WRTB&$*|z$;CWk3I>>#H%WR-CKXL5H;bVsn+;zvDU-;k$esOorkHO53 zW{fe+nAq}5#)dtu=ElgS-1Q!#9tXK`=<5gn?|=BGg1dqTo)Hth%H}l;F@BBj1g^4O z|J3KG->zR6d@fINdJcsc%wh_){A7p-bRk$U+_dfR{zGR^<|cXNOzw$8mtalY=PP)* z_sEOHfejLedOI#~uoY*@Pmkv>j)r@FPsZV1ZV?jAnJlbgCL%&@HS_*|qIZ4GBSTLH zvQpOX6l5;V*54K-6GrB*oXp2Je)NZb=5yckcmL*>qzfbTV-Tzwwnfe#PO#haY(0{+)N<@$i9-Z5x{poH%i%WHR7}RN@_(f z-a1a1^f5Y=w_q8)BDZWd0zHh&^U}yEhm&+U0hzUNJ)59xC$?_7{E92CeAm0b>Z*5s z$(NnpxpUW(pZdh7pS=2#i#Im!*s}THv6HI@4sBb{PZL#82}pr07f1rlWx!pWf^+m> z_e9YH#ep~m2jB>JbP|XX82;6<)X^w+t{twRCbMbakYlnC=yc$m=)l`i@s?UA`PdSM zLwK-cCcohTkqot?t>;nnaHWtZP3THh9D^|$x-Gl|#%}V*ZkW@Tpp2IxOKT0{XpNXj zVCqTpYCl1MKibA;y4BTc8l6zAd;7x&5AE8y^RdtQlDWX&wQJX7zxJyix%<(FpIY|j zo-gaLopBPta&|ZA@&RMW1}1nuz>actW8Ai<1N@#e@M?TNzgL9eBe?Uocq~q(w#8K% zi)adr7aVv!cKX|$3`{W_Yq#XSgA-n5#DS!lzC9JBb7Wf8!Kkr$+u59w$K~pfuLN$% zSAzv_R&+rtm<4qnI9f;(gb8W^l~q4a@2fswlkyQ#yMz(snM`(!fun2qZ4Tenv+jYW zT|{pBSC;WNgRXA+$$$Cp?|$F=|LQw-Y~Qh6XYwzbhTJEm-{~KnCEYAT6k8QZMKbW| zImB|>nk`}+ljwR*0=I0~^ubBf&_QV`1_}F4MR*R< z^2*BbBZm$>@#K@cK7V@U^eHU&?0Np_yY9T}q2K!G$M?Fo4^BOTX48D5wd|$bc49x1 zfVk<{)kpR;A!q~dv7?PT8?e9elpB{H`hkD+?$$X`oj=F7ZL9v3Wy&JmAI4(Kilsc} z8;5*Q+oaXe$pYdOxf{T0PdOZnVAv0&8j~@+0R=W0F;N|b)8Tq@=djLblm$7I&YPDy$3G}y5Bbez^TW9HIdZXLxD^R-j2#aR`MVJ z(GPz9yZ*QLe(|yv)CkW zA5kvz%hlIhbL}-RfBAJ^{_d~ZICSvf{zo5vc-I}Dx$F5GuD(34Tdr=}fB3}NXP!N> zZZHin$1vy|fN@>)SqwPsz4hZT5?U9B;$&#xY3D5X$>DS$D|4XckB{JQc=H0M2fkp+ zO{Wb#c(uiFF^CTnt2Pq=moXKDQ4L+-yk^j94~yU}nihffVR|e^Y6l#&3ox1#R(RF$ zY8%p2lLimlhN|}m+0{Ni0v_lMqkP_9IdSCh;U}Md`l)-CP98rR58c?eZ{PD@_`(++ z{;iMx-g8Hf9M9UH2|G5Hynn*})%D0VzQ%&B*w=XUI2w1C#Vs^$#f)$9 zu5y5^w^1(wIiPcDFNhhn?&-rwkee9lJ^x^jt%gTk?)&o^s>8kMwOGu9zvCY~Sre}4YX@BTY~{Q!(WbHAPVYRiLxOsf&V zE@P@oR>lAs!h<`EH1H;WP3tgVdR{Y5rlIf*I9me0Z5&O*+cZ*YZMo(Zueko@*Is+$ zpZdzLT(L8F^r1(excA=s_T6;tm77;Hpofp1KKtyRgR4i6j(b8YxD}ccNSuQc^yC00 z=;$UO4KUmePOH3jP9t}r3TdY zGk@A_A+rVKVKb8!-DG>g&x|~-*_Hj<^fO@k+KEgKnEGHkSvp{B$`c1W`jwfG23|8w zAx+gmzrZPPfuD}umhzU~?tOdrK7RE0k%O7iHXS;AX#c%mxc8yo{LPO&dpIxcum^jy zTYdy{7O(_S4IGZt_F`*EyFfN(aEve8nh@kBdE;PLhqlL6oBBWb2mkxKCq8A>3fSD* zroH}(XWFt4%V&Bw?_kOm>=pDLrN{PZ4I((hRm{(gI}ASIlvQh-2FsvT;HMw!`LThq z^T6db*Sus9szkj6Z~9vcWXha2Wd@i9`sV!Fi37s~Usi690VRhfg12z{_P{Gj*&Wbv zUGS%!F-;oI3zkox+*r*Vw3_1!hlKT`AR8YN0M=*1-hlk(wL(Z@ifuVD^KUdqAsKlN>SN_qCcfqi=(fAsMu?z{KCJtZe- z%j+xa2M?WC+5ODk9Ak_LPe8U)^sPd;mg8^^j=`BYm2wBQvUc|3klK~;YG;)9?EzeM z-G|$bXF^dYqa6|+=WV=ieDBxaaO*8^c-7X8ZE>yqmFN8U!n?ovtN+?%FMVnKY};@} zz2t~Yr&OZYWYn04fy&25*(WESFse9k=D?KBOC@E36(3wnU^D1E{Wz1rJ9+fTk==PG zf7ijo`}ZKU-^khSfjq!}>|?+4dru!ca5V3-jIDcdN+;MyqCA^+nQa!!>g+Gj*~_>H z_Qf(A_idOl!n4Oz87+A~`2GLjT^cJzh<k7A}u=w zO=ioOMzK=cMV^H=Dsq~coM|```)DS<@q<1T%B#SURF5e!&j0`*07*naQ~{SxZmh4w zj1EIQ>hlI!f;|7~R=@#80$ykB2-2YhY*xGo^D>WRxmNhl+BxJnaju1)K8YflY!SksWQbykrC5TL?B1!AXo3W|l_XP8+uFkTYxM&mv!c!z*9=%2&Pi_5a;h z|LL_8$B!T0yLZoX&+LAB&%+NsvhT*1U&CoOpFDeN{qW(Xm8YLMaQ4{o`JV~rP@OoK zaT1UmtJ}H{90#md_I5DzoDm*pQ^rT$ZR+@U@PnI#(7>?M6q9=pO}1!krO-VPyxzT zCIjQZPA1I7ZGGDdypyqEv&G5Pq>O*>1mWOaf}8NX+;ZbDX!is#%owCLLFHEa1V%oJ z9E`2*HBxHDvh!--o~c) zea|=FZq~|RJT)mWXtHxzSvnqPe16Y!Pd~N$*(Y{Bc`&aYZrPH(=BYEM*OpE!t?b=@^z6QU zhjLWABU{Ds+XS4*BoHYErON#@fkU?Qb+E(XR6SvsDBwh~a%Q}g;WrKERz?FKJ-om2 zp0Bz7)?42AsvJGWf_7@#wtdx~`O|;xr7wF~b^rmjSFzQoP?PP3Bc{y4J|#^>Qdk2v zeFieeTWCQWlIHI#BCE^!MXWRVlUavPo;-0de?VjJ-hF$XavyKHm0m(6Y-j1-^__aej#3hv=CaVAi|>=UNh zF=xf}1R#Oua58=J_{1y0b`N!kxMll>Zwfl;uZhILUrzhSf#GoY&2A0cRs_dRLfiJd zQcUjF?P<&8LH@Q3LY@qK;XB{=p10E_J5{>?0cfBzVpi*PmIpfCOHCik)XbtSfHp?z z92EeJAqq9)Ut{G#0}G{pP=j3b;h9_GJdi+A@xWu^n3RdpcU*qORo7l|)iu|@>8-ba zS?)`hO$fOsefH_yPe1$Y?q?6(aP{?@H@#W-I430NT1GT(##*kSw69J{P^AzOD7HWW}_Oyw87WrVsG%4qt52KCHUcxC+OJ{p1O%!E}_Zu{&!_Ui?0m3l-6Ys^{Ef3 zM^?7?+qdR5d|xM)z|#9+Vz;~-Sv%`7pT%{eg*Q*b$5Z!4;Px8MSg~SJ&bcG2xF>Ei zsd%iO@8G3RA+TVJhOzo5??b!V86+^b?TFLVL1FIU=|&Cr{=t>3=%7}7Oa-%hd|Q6W zq+$|@ZpGUz#Mzb5WR=fbhvAi9yxBH>a@%hS)-6YPQyd zXP@1BEcXbnzWz01Ly;Xr`nsCG4|n$HiQ_qZJiL7D_=&ZpV<+<}>Z&bU=`Nr-BK<1GwbQy2X;TT`{-kj zJbC8Sspb5}L!QY;Z~fAr4p6JR{;*50^u6lKt>8T|v>m7#edt&=YkWM|s3!*#1m0{7 zF7Js&8y(o53_OiT(<=YdfAaU=#SUc;=3$r4OZxN?IHZw`ZvqkC`6;kkkIL1`#)TKU zfjQAk{j)kwE;`1fc$N-B6-V?~AKbz87JSV<7W4Ng537~B6E@JU&4Gq~MO_VzKV7lSfEa3uetuqP9l9TLys6*)io zxYvDtFiMcAv3iZ?*d=HQRxUEu@)UqfDW63Y zM(%uLNB$M&HlQ{O8~OI*#%8ky%&5eh*qU~ACXoi)G#x0E5aq>#7&(6j@nyNPNqG6I z-#~JJ`RVBVi1L|y+w|DseETxf!v6hFKlRMsYp=NO(pz5@>DXp5s#PHGZmq1GU0cpd zk$c9Rgq>MEdTeR=x##yUpUUqwWDdyt>?bxZzWCBO?DD3|F1xgXhHjivf9(RSW+nlB zuawT1{}Z)Aah3K_UMH>hUg@kV2$(F}^#pege-a$W6Wqr#37rhz-0d9CS=^ERw8vK; zA}dp8?3E$N*8W89-H-3tv**z6r=C9a_~W}yKL6aoH9pXROgB2ymzMMuaOwh>ioFw} z4}5iP0#;zE3)ZeLuJ~xAo=_SWUy}j2B+!-7YBLeoQGlC}(9sDE-Qj-!Kl*zKej53- zMa{R}F)K*&@EK)R%M>@MOi^;nSL7#zHm2)tJK zaPj3H6H6MZy~+{lurT-0#XHM?wr}~t%?n3BGyp(MGON;$oq+2e-|c@r0thn}s#-rK zs3!vvpPQ^YCzxMa`ROt1G#d zPo7*lnw>*_Tk_B!CtlFgco@6t&|ArVTBA5`1`g;?Xd8=(M4u zr}X{*Fu@;YlY`;q7lFs4hr$>i)vj1_*YZ>?d%u-4%f^cQ(KN88cr93N1JYi@$M{7b zA=OqNfT?cZaY2+_gr^~RG;98J%doC(e(ftRPOrCxt<`*-@C$OOZv_$_sl`Ae-s-*{ zzGwaNDrb9d#g6mDf&K2j`zB8Y+(L|dC<@eBL3}bZ4vvv%*3F|Ze>^0q4jkhYJj|`c z#%4cUyvC7hhmh&TEVb!xfA@QD=lFGq$LLcCA*=|ztZR6Hku@xxz^ zKRS4L^%kC9=&a}xU7HSnZRiAi%Y$bZ;8ua`ANari&v&ISQ(TUK)4ABQ4qrw~h^Dxd zfkmY(ggFk$6kw7DEGAGj7T$oQAF+RwIfq$eb874@l6htr7pi*k7%c;%Sk_16t>!7f zWm(lj=r$n!B>-1fPNrxZ@AXlE?a?0YcEjXXa0S2_vja$DU4frnKAmU!ZXayF#+F_$ zZPybLA)!oW`qO!D-PuB|^pO!-G=40k-Y1wW#QRp4&*V*E&SGbf0Su4)%J8P|c;EkG zCorNmqiO(xGa@aeh^cx>Omp;r00=~vnR59uoMtYSx*a1k7a) zRGmPQ3u#dE)8|GaOq06vQ@Qkr3W6F44H?-nj5-a6vZZgpr96-Ukk!N!(%F*<{R!OG zz47XHW|(vI8`GRl-u>x6{M7HP=gUz3NuT)rPdsqP=N>r8XH%{FWI3nDPhd!b1H6L@ zTzkW<*wLv1rUOg92p2R0v(F_2p#Vb%4;&3V@D4z*zB(Ya(NW%qe)Lfn)N*w)I@b?+ z!7EkNdg zOw0o^c%?mbm1K2;mYIFrf`(J$%BuoI28YNTkm6u8TGM1v4Djchl))0c zPgfn3B{1@*M|E=gmwMW=b&X7V(7!DwHy~N+3Y*Lf)>=i+=xAuO{H5Jb6jTb0RDm6C z^mCscQ2c>$DUuI%3?$E3K)g^3#zDM)90Fro6OTe|?8ZC!o+ z0^$<|qoEPfo;K$Zfkda!qpmGo>O|#}opP8#zxp~rvERIM_Dt^4$0JG(&$-*_<$?)Z zko2S=2*Bjb4^Qw)RF)i43U;fmT)@G_Lz1J{){}@JLoWd3w)ZB6KG=ibxNzXhTb4Gd z^;6fkmf1n9FZ3sy9C-K`^OoKHP^Y(gPafa;&F{JSx!l{-$Oq28jSptMFd>)SDFi3H z;bbJL9KLa*ty`|R;)<6IAUthN1(Qd|86Z=l5J6s;_?=m2fkDaDr;;lV89rMt+3v}T zg)2tPcHJthOi8P5P-2LzETno307} z^l2CbpIMq2v0x&wnmR9|6l6YdH86n>Q@;sKP479n>S1z-kTop0+<*~T5ca|f~m8E3$j^o@8}j} zJW4e2(5n-=&wu{@eQ&${P1iJR%A?w37KTp1j4e>LraX+V25Vlc_Vm?^GA6Dv;+&wC z@gP)03oI$Tt+Ij68K=)VHX?lR&Ga6-psCX~Y*d z80XVez0fx=9Xqyn_ftIlT4yIno$t6Qzp(m$hfC)4(Z2}rkWqjbNYj?q?4|&?Pby=?7INBw3{Zfb1 zcyRmD)_mbg`8~fk#9wPcffxDtOllja$Tz|-;bc;;Rv2TrSbR{R&F*!aE$6t&&tX-Q z<~iEvC-%X$)0-vo1FnBFAe)5q0)x>67kUyoTQ9rF8C8sC)y|fkAG>NYNN~ZXgkYwQ zmv!7KSdFd3x!b4}->LnMe2?E@9)&tkwHurYS`ssXxX9F;O(x`Qv2)ls zn-CgpW9LAf3~D9=I-5K^k+9pi_nwFLz4@(gxH__>;vMWH0WtNsdp;V@`D~1`{M14} zX;^Up!>eZVQS&({hq3L*J1M4Z0aDlnYOK~Q!04D-6%?mRBjN-muT(jFQl^Qf_)qQU zlm`*!rIP&k@k{`_pM2cAQ%;t^c0RuAz_DZFkFe^yKo*>GfgunC46({q&cz@Upzu1- zdm`un>i};$b-eKGphw?9il2nOc{P5IjR^uD^d_O^h1Miv#{k}Ra{5VdyC39skn6KD zxyodbfe)U7Kjc|a+^)rPW0X=#nISb+&G00+vuU5VaEWP>Mmym~em%p^3$M9{ZfrxI z^2`g0uhE`Xh$0_2B#r6}81*JWiBigx1Mr% z*a5Fv>nPMxR{rD(4pb(hKZP#`XvY z+jpz~S%3LQz@>+EXcYo*-vq43dbM58KxZ=LG1?YFfz#)H2arf zfDy>`Bw?Biw&wAnw3Z(YnKsZhp}?Wf2z-hT+PoD5mU-c9juCcjy6@hH_rK}Qw_K@< z)yd*EnZC?e4N764u}V__r(7^lG>-BLMK;O`MazOo0NXD)qTl#GOy|9r0jtu7p zb>g4$c&sTe20#o8GR9?(i^^cmYatA9-}CWqJs z{DJ!(JMhLg-CUDE@QeKzOo9wa#nGq?>48)-rYTGYFUt-5zzwTPH8)#^8Q5%_W`d|$ zwdOQ*C<*vf7YdKK;1_o}TB$gtnl+(z4YhN?yiu_jBJ@xiyTTN-3=M|1qkhik#-{uj z=H92CeByBvwpqvh>?037cIeQdW4WUm-#HMBk~+Q}_=3gO+G)Rl=OY3}0Cw=p#0otZO==G z3fTNzzvz%}$(8)kxeQ1K!0o|U|4c@C@p0P)8)x%M>p1+=hwyR$7(GlBWNzeZ#5r`# zD+^{g-4@ux1i$#9-+0Ktz2_Ug_O=++3pSa4Js$JuoJI1mF4G08*iFr?R`jC*IHkeS zN|$G_*=>*{rLBHPLpeBwY^3931qt539ZIE-ctu#AES5(ktV{ZMeAsLehtm54wKa2} zDMfeA=IV0!(sy(WminwBg%r!mQx`rCPvl!?;}Flh2NSN=Bkgj3XH24b8w zq{O%EDh6x-t7SCjGkv)1V$b|@3Y$Q-!q>JxfhNF0=!-2`lx>f)66AiLuTj_GTb^;I zoHK$1eU@tiYf|tB5+$oSK6sieOeO{*M@RykwsmE7PblU+`@GMRsFo+jhY`omk|%7l z^Jv4$O-SQBAYW>-`p20S^@NHM4Vy|NfD<#pl*j>RcH$dYBdA_=X_3xRT}lFINEf2 zoH1aYe|2;dklPI?wdD%0ikc%w4n6zi6T5bjp+oI6O(`Gc$#SzG{6e{(jhoU4nhl`GKI-tc*ju$-i$^xDYFnsZ%hY15c{oeO& z?|mJ+m5qZ7zeZ=ksvZ->&D?sX@sCO8HYL)r%m>+>2J4cMu-LjKI$!W7@kBSMF(G=` ztoW6Z^}!QLH@s+HpA<+^#$@Xy7mSyF1Q!Cyzgoxa$4j8&i~rs`nuoewb51NT3E;NE*4+<)7f-*9z=MegY9FbB?{FlVVS z23}f1GB64aQkq6mo&(}y0nf0~U^bTxn-5g@MK;Gw`!qUZu<}@l3h;|2dDsjf;-u6= zGSMZgSAa*r&xsZpAS#JRj~?BV9l);XMWDRjzqcmiJm55cCL-UqA3eBB8C|d9%2M+|McsBGVVn_fPnk0M(y%`Je%p|G(D+g0n*d_O+_8>TSa6ROJw`S;Bmkl3$3OCvAX~tEqtIkx zaxiIxX$5}SG&_g!C@{`t(6f?{-y(Dv8JbKm{lp-R`Oo3QKjkp0KA5BoCVnOZIy-2m zhw_6D?Am|pZMV23s9{L{$EIoQihxvgR{#JY07*naRN3Ijre%x;;z%obVK)(sLMW=i zr_O>F!uXs?9cth^+EYj+Qj+Qucnma_19-0Pg^sR>rnY25>0*p!*wCZ!@*|pivH{p> z0`U0B|3@F&c`RQUs(@<^1fc*FBw!s_0*G3Yc1gQSpn<`a3oQ0#IG6<9D?i>6y?f$lUUc<*zxrV13tnWz?!#civ_)P9 z)N@F#@H!{J3OG>f6Hlpb(8_bzsX#SkgIBPMU-rLV2AB*pp$+77Ke^R30W4w_H%ccN z`W*4tLRZb_Xc{Az9l)g*3AQmPR%-#~F<<^b;N}Z1^y@SNC);?dc9Qlwbx&}@uebeD zE@wy&RB!3Vj`@6hZRks+ypPa`5AHH@0EBTr*dcj|lNM1Oq z7k;7(%bA4egs1JlU5d%1pAh%z!jtdOuLo2apCcAIFfdF_@WWCd<5G(FW7_&>``fT|hkoD?W=K@QUjonS3IYh?~hGfpQ5L1VjJP4-n5^YNho&-zqEB zVPKfmE5JqXzC1yf$9DtYwrmWz6aOtSuvNcq6Y>Ax$?^++1>|UdM0SC z^#0z!?A9av9fD-F-q@aR38E9U{kw#Cd%vJ2AZ3SunFPS`tw}C@8Sf>GKH2%;;Va6u zqw%8(>8DZs&Vm>dZlYe$<4Fgo0sD%FmCk<#R1|*&Y%nM?uUG>4a#Tb1rg^c#r@%aVm#0X1tI7>z5( zvg*l4*>Fr^3SF8144Wm(pl8cEfbC#~>4O$12Gs&2V^}fWETN=ZiRh33ANh1!kwCQ|4j&gaV*<&cV#2C^%OWvc?@O1QGG_35k~R_P zC!Rj=atqu!5S}K5xhKLB6_!o0* z03juxyl|2f+?@99-IaHL!#oTf1Fo$<_Slmr@@L^^K`%f;UY8(})CE!ptChI7{MrR# z(`YkJ9q_sb-kVm$cKX;l28+n*g-`)xYvT zUdwJKRu0RI)9{65>B?_3C-daJ9?>VS$-3es{WI}0BAObVFmd>790CIxZDJyR*YucJ zW=#A(3QmdQFJLD6VlsW;h_`>nw}?guO3y_d@y3^ql%PeWQY#z+h%K^`X0_IRhi{Y@ z?0FYpV_Q!9{U)E4y8d`*kRq_Q??I$${<2Eg2QIY6;a>bUbpe?lj4FQME6aJk^uqjc zQI8BWd2Gqyp4WrN>%_TV3k|t;1|wi|Zy24{@*9Ea1eJrL%i&#nj0BUlH23`UHc|Q8 zg+Z&^hQf;uSxK|b!u3QU`fhUnNQdyxWR@fEO~3q$zxk-0#sB<`U-!lu=KK+obgM)ERM5nyEXhHXf9})T~ zLN6E;KAIHk&L9*?xgY(oI$N!WdgHbMy}BGOz9t7e1Th)PCJDUzHlXz*8@-7`0vGf>G2r)gU-Lh_ zeCU)eU8tDh7%Zj;OCk^6WS3!zjZpitx_vmoZo`SsKcYiKqaIR6}&( zT`i-?2NMjF$i@b}9|ySbf-M)MKJl8`OGuCdja5yUUag4}r5%%`s#l>Q(IiHj@o%JH zZoOnjT*Bd>tz=|nii&$>bx#>AGhaHGS@VLiU9T;F@TGLfeR|PbQFX}{e7ql^>?~m1 z9x#@@wIHWq99D4FBv9u8;U$pW^QRd`KE|X_!oolY$dnS$ELA~0)k}WeCQP>rB|t52p%GSG);lnXE)4dw#s0SoW^ zH%sfuoMz|(3#@ZEg;t0qeWoqyiJlDOgiv9|VYCAdmbKNf3YnMbK^cpE{*P!pbm-u- zk3ah8llglm0j%f8H&3rV_Q>wj@rGH@6DwdOf#(u9f=N(G9asXsS8;UbPY_miX6>%1 z!^aAhd69qNL){kBe48ieXo*Z$NjocD|4_=9%qOVnXu*zZK{dYh3|JQZy zzqVaf9Y2qKUibFgTUvwAkRr&d0?IEY{-z1hKzZ2mYC#m^UuKLZ0tpe(2>zgnKNBMr z8-%LR1d6n`wfEk$&pv1GeU6{ccg(T&zOBx4_FnTbUh^@=9CNO@*1q#E-+k`o5B|mn z9#I)an{f%Bw7p-ZyR2yDJ8*-EcDwY8t3djFDq+vAx zk_0NB0U9h2ZCAhLQ-lQErYFCEs2gPfI1eC1g9UFSjQi26fJcLD69jLQEjS`*^#Y?f z#`Yh+d4d6`4Llpr%ItBZ*8$i&{O$#)Oe(SmdL(Q)Llkn50w?Y}iWwt7Zg1GBkS+mi z$8->#pWAyF9dR^1EvK~bB!+}4sGEI0U<3=|rO+A-+Byz^atv8840;F3r7@`e3B3}j zJF778SYDVEN3W)E@!}mc-YWE(=GobK?w_B3<@?Y52X_nJ^GM}I84{(9O7XlZTmD95 z;Fr#)G~k(qorq&~{5Cu3lq*Z+W(p#n@l+PT1OOsHF@l6mwN$c9TQe?Dt^3Ud51o(- z{a7(2<_9$SnX@1K#M$3sUQD_A(GTlqvZbYBs3OFdNw7Q7&HJ94xTvDd1H`+0>W*Oe1UO>jmaI?vb(#5@} z@_GR7y0`K~Oo)kVPBi0&j_`MI;tYJ4&sthu#YtqsjEGbDl3t?sn>_xTr&!7cJPO|74ewk$yQ5iAgixv@C zROd}xMJAIHC8~e`iB}oXkxC@e2uJ4b?wva?|CHZ3e9_y0-T}}9c=0Dc=f#vYJNKLdzXn%Bs=m4L9>tUO$FbcJZ5rWh$^&;f?EIXlxuS?dFRw?`{v_ z+A24{Iuy7xb{dd%TuvRjG+=aZzHK4bD?fV!R3BUn~TpA^h zB(puX^Yy>@_K(!H&wu&J_t@Cn)nLlNm9!-Yx|KfXCc=;04h(U`vr)5yo^)h2v8C8AhwDBRcEgZwR0ZTbd~qXP z#HDE=xXL9aOgNpnq;3bM2Q^Ek(6VEw>J~9j#bp9Xq;PEuZBID?gUQY;kNBee1}7Pn z#MgSE*ui7gcRM>3))TPeE(zlD=ly@|Qy^i@$hdl02I!K}`Ovbm8X1+!%4tOQ+<^~2 zc6ze}sQefd78WWp4Fwz)9htm$4?!!SRi>AHcRqIzFfQIn$l87kC=%e{4Y(Az@}9p& zMWex><3~~XHE9N#ZY&0b`0Rjt((trSb^{*DJL~OYLnMYkrF77#_z|DJQ7N6JktvGZ_vW3Uh1EMyiB)cuQ)M+Sp22eA z8sBS|H@viZSsdN;Tu|LSZ@2x_GuXA1wXu-R!hb_f}6)( z0F^Oyw{;X`A1^_g#C^{{?~5lh8?$6M)RtE)TrZ;5mQ;IxlDV^#)e_ zI0=V^xD$Z;13i@3U?$diV`LE7(MI~HC8U_~RJyTnWS*4bUz z-5;Qcx?!@oa+qW_4}ITb;2^l>Rw7R=hK~F_h~y2w05el!MRxx3PygzL?yxWY$!9%5 zHUb>@ONi*vb>(zIrs<$#EICqVT}DH*fTT%gcmXxxb1+DC*6`A`T9%M^`7#e4Ta5(>TJahzO9pWE_bx7&+ZVjde}>VgpYES6*1VcJ3Z)X; zhANoKZrp1tnhL2Rny<3@F_^DH8rm>e>&_Qm8Y;bT@-dCf@gOuR=4m9%^D3Q=H>_TX z#z@2R#m|1?G5N^{d425GC(R<8)s-jBLHB9QtN-atWH_J|>??l5_26(HUS#o#>Jg-2 zKz0mezplF#zO<-ego8Ft?;!@+l*5mKMq(t*GHNbkUV2HIt+2?Liy-FNMpynSwi5bg z;bijlrU1Ae0OP#Ywg41`Ey!j?mb9$2l4%t7-}lb9aZ-o%nX@#?dBCh%vo#joILe}X zuL4*p-EYQOc8;NwhR?b>HPy}c&IJ{+5-eXbKz3I=E$r;!4t?%yByPoh7l8_D+*!A1 zIt%C~>Tx)8)KVdxsS;yM^n%l=z~%V?IyYC1$+W?TMR#c-4QRU=X^@BY(bG_D&pFtc z%IAzPT^L8E7%_mvwVs|k5KbB{o4)tm@7;O+`~UgM6Ce83hmnuqQZTc8;HVZ^HgyU^ z(=USkOq7IQSUI#kjT{6@=vbkIw#-Yu9Oy-&P(jZi0JMnl4NL@)rig(b1WEG49(R86 z{PWNMbai#Xe(LJ_?A~(qi~oMjAM%TW+8!#PR~6Wxf~rK4ZY9kLlsj$MiL~xc? z*-c9qIYLjG)!x>w=t{G_0pW%9Dt*h^)o-{jeeRQwedNPWoQf}B=~ZLeM6IZ0c7>_( z#QcKS!I=Kzg~Wf-B2=er!)Mk;(2})fw+h{XUS+CNNThfbKzQ+`aKd=4IK5JU(2eYM zX*sDU6X9&nTY>1%n+!mRNR$XTdZ3w$2PsS56f6TYGgKGu|JHAQZ?Mlh`8-2i&tl01x7%7kxHS|C<4<;XliY3gi^wt-5hDgMRrEFat`*CLCZ#s z!bd^J44s)DxWL=7L(~z;PJRq`Ek}f#j7o5^YAC5jBW^xMEi!5t^hl65@@Z5s4yZ@! zv*rv!jD?29zNwZShJ#tnJmlm@cxVe~F({Sa7nJD5JpbH}Uj4U!ec{ggf9>5E0?A6n zFM_r9LQn@uniJm0W>FP#!MKuxF>qH|rd^n80}HQBfJ6x*X-VcP=*Ul`P-X03Mym*S zUU~WF|Nes?yyW^{Lig{_ulN;n*D-Oig;D8x?X5DZpazv$qoCp$gfp(PY8V`^>1*g3 zSK7{NBjHsV;s{$~yfz9Ow`Y0N@|Ld~dmsMb`%YW`EaT%S;oIH#I&Uw}kstobSzyKp zf!2Yl0Dsg!E2@k*VI^T7*hlhntb%Ax!GutRTc9C8fi*T;sb&w|e)#z2t=q?(^uv3) zT;IL_KbMR9^VQkC`&aYj1rPCY7oD-T%gpFlQ{f!?DjkCpCtgWI7k1bDH7ri_N)#^dD65Tv7-DcwQJ4SYHoZimsL2o_$mScXlYq^-8ukPM^ z_454Q`TFeq?CJt5aCyGC-eoOr2f4YY8@{}lBNmp#HFRcROd5utpz^uAyy8+|N4 zq+x{<#Nkh4Byak|_oAUJcsbCh6NJ=(w0))l&?vZEansQaNa2)CF9KDfE_KI5qo7Ch zt*`z4Puys-jh=eu6YrYkWp8X)NVeJ>wxy8PDP2_&WhKWEgK}Q;BfKk@_4ZTUszR2@ z5FmqeVhs3(-9h@)tOBB=!gJu54Jq25-*AOGdnEJ(E5skDMj+319~w~Qk<&&>yV*as z6_u<_ux`!J@XK;*M#U4)1O~|>P&92|VFt;-nQ9p0kV$#?57=t4N|aFs!$@FoD}q58#48SNLdrXuaWo1_7UXwAQU-2*54xsM zEH>&`9UUCaZk}FU-G20!P8Rd~m*;15jlpt$cfOimoL?<253l)AYX%M*HF;hDH(P~< zF+-3s=`K4pwgRA0pQ$6P#a&?b0ja}J!=_OII{z3ZuC6ULc329 z&l!=*BZ#8!vDCA&^=+Rmg5ppy@ zqQnT1-gF5lyD>^=GoKnHANcI!pzL@AKoDW;Pkr}5%gP6~y{r>zM zA5Qh>DDd3dfVNY%3!=Qb;HF#gRbXgD`E4iRp_~ml;|2|a3M`(=t)Xa|!t@;kVWlNa z%f%7)i=X{?e&EGgI~0VmQ@oH$R9u5)%Hh>=J#(wbH~_wzu;2u6sgp(**OpFE3_(#3 zoeiF}g~a&ffuA9Zc;N}d#QQo@RaPb8QVWK`6Py9JVWc#fXflL?X(8?6(jHH6wW6I$ zsRrF#FMXR)#a;2^KmaGQdz#_ORJV>Ae3Vof?Tn%~HqS61 zGahaB73Wz_(A*k>dKhVE=To2m_^;5fF$SfeR+r%Hlql@;*l%TPInA$j+`}7Bt_F^#Lp?V>wtLvGr|w=ING zxuG3T!L)IMSMjAMj33K;ESUbnQ@{6CYA^ss(X6xH9e~*M?{FU zUvBBmh2i8maUJi#J~m1UQW+fVYBUZj8~WsHR-*OskU}^tnr}#aTMM4dWI65ac}~Md zo^RK&GZTYMw_a}qF={)9hEb)zr~Re2Xh-Arz?UnASLUVb%4EVi@7(xG>XsttJ$YSN z$y8XU`3M;6(xqglHCqf;AyBLBZUbXk&6%0UZP(H1V7l`+{`oKamioGkm2a)ubPN^S zynOXKI`)~{vE8|8ewr@2QZ{=g)5B}{4f_-k7Y@xTSQ#Rqc;LoI`vj?Or4!Xc>_AtT z_+RA2Y)Wf6g^0vSxb05R2B3~f7xZe{cX+a2?_E~f{c*U7%A|KxbL8B#>1rN*t^b201x9SM$3wd))HFxwV|tty~8a z@j&BqeEz*CL3Cx+4nj8PPry>OEV`#mJds!gn(8mYdv7eE)jL#8hHPM62fn3Z1jAkJ zRe>dFEzGG2@%b;~MJ1g~fdH(qf3_=R1F3abY$3#)(_;sRi07^sI8RNE}x zk7-G$b3qy;OQEjpuK`L>qMkHHpx{u%{R*I?!PzoP`LYxn$yH>R{l&*f#L8Nby7j1lZ z%Cf%*itj;eN4hCy6s_eh)e3`xDY&)HLNvF7l`pe0YV4pLm0lB7E_Id$N&HimXxTF>O3FD+K9kJ5F=M) zGqSKY86hMw6`XBLq=uh=!mvs_f-%YHQuFn!2;tDS>=?4g*6&M>hdnW#VL90~{*#my zujcdFxurGb;u6pEz!k!^geA$hB{hZfOTz~x!!wfa#aI#a!opH}9=f|f!N^y*9>&il z!`Bd@UJ($(iMOknZ;Z^k!z9jq=(&JgJgF;13J`B+K6AWa1Gppe-``HgwPMWh`<(<{ zb)*C~Ka8B1CETG17+*#nahEr>sPljzC^ul|Zo)n}!!e&`a$IeMNAXcl!S@V3uEzB8 z>gtEd``bf4?j*I~3@D<%JRx*iN~NPt(ps$-E}5t|DP?7X6S-gK+zs?tzYO}h(v~Vr zDVzWtNZ6)||Ab;_JiqXJd77r55?_q?Eo#V#4I$m(E8oeS)}X%Z35{m>?Hih(tXFMH z9JvYeUEPb@L368_DbsWev0}8z6I3PTc{*3*Ff|qhZGEHGtT!JxGk=L6(|mqoz%scL@neu~vkQ zpGr|*9{3@96hSwtJ;+1*%Wh-jT?iplwzbsEMqh?TTki2mU@k7!Uen%gf2U=ZJ@Gs^ zSn-ZgS|5_+Apx9i#wmO_w}T;j0IF3oNgqhAMtN6Rh!UHPenjFom_(?-S^Tzid!^qC zG>*?C0x7EQW_%5F$yfJHZ&0(xS~#H)5Ey4)s?0}fJP(bwy3$N`^bZ0l~QCEr^w#`Q|Vz3QovD}QeNy^*!x)Sqtp3ItmU;*Dh=hF0R|p!atSbRi}HRQGvkm4 z_rBpksjxY#b)&o78=lxWLkODtHMjNqe(v=5;#P;Jm$z+|p3b4Jes=IA0@-S);B?GT z7_`~LzU`7u9d*9EG2{e>g=+3ty7Q$|tys(=RQYGj8f_>3_PfU?H;zj(uzV)YM`<`; zT-$jDkzMU@dx*IDU1@XLM&)*x5|3mHn0Hle+)fkB(5p}SsrK&Rk3NAsX0RcFOu0)w zC=41NoE`+LTKhtUDb~Jrz!538M47{+S?CXEksmy(EKCFf8fQh8;k{0aR=huX8y8-) zA&R;$);a_?&5yBdEzSHK(QmrlUxy&N-pcuWe|RyNq}Mn|B0_Xigv6iFKUN13${=!Qv$9f9_th_b6`QMH%={yS6z%8o+=fn<|}zOFs%QJXNm6E3G$%rSe}(U%?+ zzIUU9RuSMo+hdulQ$xyu7(Yw=a*cLvwaZQr8G?m0?YBMM z*jooRwU|Q7D`pLVT>B{y(-DiQ`@zn_iC}w&A=PaRrWkr7>y2hMkn<5=Xb6VU!7w>) zH6PA)tPl)%!4hCDD$G>LnOM2GTndys}Rm8IBt| zNAI)B_}U_a(){Xlkv62NgY0;(%iFx)y$eKa!p`21*h{SQ4Kx)TEhtZL>-*+Id^fe! zvO8-7MG6Z7Hgj`u>;1lq-WQ1YE8@DjX~78_Dt~Jrg4^ZM<~3z+A(x@^hU)|Un<&CV zUhXFEE1u=551x+xM7f-6T~}3>$nPd7qk%UwEoKmEgTkgz>vMuETU3gsgBMDU7hR*+ zVc^KQc4*}Srr&{fYY77B!a+jGxH+2(9$5|PpY3&(k<+Fknoby2Nq%yCr%5%ofE-k1 z6(4_}yX;M|;K&=XxbX(+o2No`f+zSy!50Gg2`Yy#Xqc&rARx(T&rqIuyppJW4 z4)M10YJP-OnoC-F<>r7WW^1iqwCzym@zL2VeRlkql`(rs{4FaC-ESL4^SR|;9KKR(?FPqUjpbQ`tkfQa_*zs)4Qe*H;GpjDG` z+d(yk$oCu{QbQ-xK5aD%+?*J38LSUFoq^)B)&3s(N1S<~wUJi;4rZ)H+8iDK*pJE< zUYM>)zu!|H{J7EM$lyUA>SLfd>^mMgJfbAuK+e(86SjumpZ;m&sY5!e?q%A>2lzE_ z+H*&e(APsRPPx@*=v7T8L}+WbjXI$SaI;iAJ$_}cCg3q5gwkswii7Hil7j#J_byax z{ifaFMo!$4f1HS*X%mOMyxAKLn~{&Ui@cnMd(NQiGmqxt^!+MAsQx)7udqYC9DE#v z!t8nTl?7f=9&D%e3}sp@aw#D zg;A+W2y(*tB56*UxkY3n24wcHq}KrJhts^6i%foa6Hn(az{H|^O!=xkAG$<*KTK-0 zU5Q?0vY%ViD|wWk>MwVN+X&)FG^Y7AXQl7w$HXK&Y8+F z=Y?BJH;6Pfh2HD9C|FZDQ$JqE8;+lWdah;?{0l?aKyIYkUq2zPMq zEIz_d$9Kq0TRGkMIQ)HBBr5txIzHc*5B6u=u ztkQ6W<^4sjBnuYD-Bi;Er^&Yn>3D9`pjip5_juiFnDqeis?r4X5?IMsu5};hNK3N!o zgira%^#b45MU0T!3v$5H+ZL?5)h^`ShmJVw-rItLI^-yM&`y-i7!ubUR-oD8any#4 z$Ha_MvL>=E1Si$%oKT)Hbf>9~VzS}tH7e_BqHTrS2DHNrr2D&#g1uMS*CzP*4r2q# z!g{uw90L|5@QE&!h&Wwg5s`Rv!7;U8%+J}VJPkR&W)OEHTYXQ^15b)pn6SFmwkj@` z$WqLQL6VBKr=Y^i_C%+h^|dywR{2yYhr4(#XCA8{MSwrR%I<`8|JsEhM7caC!3!B$U!><P*c8V^g77U z*r5q+wwg>STkXLhcWJBrGFcBao0h1tHkBOb{57&Jmkp31Dv}RAz{b>Gc2mT0;@D5S zN2`3Y&fGTFx~`X-uKb|YuQu1_$Y(+V5rD*fd6Wm`z|+7(55DUU?%tO9_%T!WbyXE+ z8al}w2+DRTkT_+!G;^t-X6+qDU|yRf~DC`W{!L`!A6_zJq=y5SH#3?x?c0 zgKP!Mt{BcEQ~GE3mNR;|U{_>{+Vby~c(>W}Dta2D-McnL<4PN33X^2-sx3kmM}{Uj zY?a2N3y)oi2)(9h4L+k6@!AUNlNj?t5jCxP!Jv-P(G1`Ds{pU2aep>V;28l8?>)au zOrKD(y+gE8AS7HHSXu1tHaq%=_rY-}^x+e6m*#Zo$E-2Xz5;V0$B{+rT8HZg$H}4v zc8i}Z3U@$<>fzvsqFQ}qgyZoQ!qWlkxF1)5O_HxPBHq~i7#vxg>xKY-H>n}gPDvkZd9n-* zw$P4x9h1bWFB`TTYR4=ql`04#4Na5b9v~X*S{;mz)*eIxq?yFKrXF;_z=qAflH5hy zs?%Y_;0XMVJ;;46Qw_36L+6A*GM)bf-Li-dZqyJbP{Y6WBc#@b{;f4vHMr#+d1@Y?8WeR2gCxy&dh?YvNgn|!#Q{Q%lB zdW{_|(K7FcU<(izDD`V&7%$KG@a5_dKTn4YqK^zg5<)Y(Sd%0k=PyNM@1-?>f7LLG zF;m*XHU%6%OzQ3_4kHWqtU!yMeQrlh04&7quz1Ko!I9NAuTzr5uvH`W)fYpj+x$rC z9CsR3ZjxbK`*tDjW-#Ceca{cXVv3LoGAJ_fd-ynq)%EO3ejJ{TaTb_jl;VW6W7>W{i8p&kC@ z;@x&4eKR4DHXXFe1Mp;s2K~h539`x5u~bK&`&E;Xv!t@K62k4UH;lX6iXtHla`6&o zEA9EZA>PlFyU2ha5Zj%;sdVh)gozGI3W&uYBbEHLEsh4x__$F2Y&7DfCJym=B_g5; zipq%jh3P@=(7)~WK7YHI#V*--6F%5WbQ;EEp1}$U;KYlHz?l8{laL_&I*cLk5<^>u z587%4uFEY8C-~P~Cw4HA6_?$2XJB@s)JQcK#gFf6Z+X0m8%Z_N$#m70@%hhRq35~h z!}}x~PN>(4O_iRWm6@SykKqJfrWwy!4Z_=wy$*WlkfIgLUuE;|f%yC?Rs`yFeAEf8 zViS>$RU$6RvY#$u%h0@|ar(omvbbBQE-RZ()w=IW2V=@a#A*?VkdJLF6ayoKSPp&j zyvz5%_*rCQW(?NTW42WaJQ{B-n5<%6YYSFuRU@AQ&IKW}{4=Yhw=re)Y6mxC(qE55 z73#BomUN#*9FfNz&e4toy72`&fyYaTUt`>a;vhjkAdXIw0mvXMMJoFsd z073Fmh03!(@_xsUV-8Rz8>-qjwM>7OG7resG?0ErrDJHI%-^5L5JNaCnNUr`=#G~X z_M!bX;SJiy1*SDQ=M%7kF`qQjc8dmZfwr)b!VK)qiRMnKb{1ATMs11$iG(ww=r(B= zGUGK%5r^4!u!CdxiIDc0ApIRH-Ef?hh)eX44$zJaGXax$807LreU@Ww zS(Q)8^L09cC}Y-!xLINppl9HFIFyXvBc=-0dT~k)gjdrSFB(*Q0&;)Q#I7{JQqo<9 zH73l$bIPO~MW-jPORfglIPO0FN!Om1)?P6VP$x}D7|X8-`02PtqXktSjZ_>dlpC8M zAwp7~x9!h{TfCv0-z=t(T)(c2n;zs;r>GuALVsTjhd^sGUVxp7FDmp(TTf)-0@ha& zeq`2OjdkEFR!blm`Q7^lVGfwt15-lvJj&i04ppbKh>y zzGbI-xE!fBon;-38-T4@BW)^WQW|IfT`m0*xt}^d=J@YmXQurUi&R^m!w}asUfj;tSyR2)nUgy)F!z7}@`Sa*h)nSL3WFgnD$lrUG#>Fwr ztW?JuvzVvmn-H*9J7ck*(!3SQYOn(O$`^mPm#pi;al)$(m6h5jSXQx&KFC-xk7`UD zhZ6`vx?F`pc?de$L?6tQRr?&h$5=2nuu=?tt@6GD2isi^&wENh`c9CT+E=ylfStYJHzcf(#aG}vx-$K?T$XE^QApwKm_SjSbhxxx`Zkw|j4=)nW(v)?rxRydef}CV?$6Tgo~P^gwm? zhX>umj8I9I!4Mo+^5revsbg?7j38lD$vtp)D&U90jvsAn2HsCPhSs%tS*JF1821_R zp;NT(%_RK9ROM5hq@*Z;Pd77QzJ^4bJ*LZ9VMZukZ$ep}A;$hqZIi2oh9%Ll z_P(VV7YGuqW5*sY#pT)cvHgxOsS-%)`87wZmNt^dS)lV382fo$;6ysyiK@B~f;^5k z@?Z(}7?{R5;N2{Vk_irRgUZ`A5r=FT?=#eXu-NIjSjH_V)dXBw$hk4hg&=YkBSfM2 z1PsOPh?0WW8GG3)3 z5RtCH1ZGvTFO~TaS_ABgkMC3!e1goeM}Q#~9%M<42clWK!P7+hBI&?=qb60qj=`(b z);esAr6v^IS9gKN^{Rv~m3eoNJKiw5E}9^S45d`+$3blsydKkx?zO()9ye{F<>UKN zl43bt|C}-fCMwrgDIzF#HQ^Q_8VN)zU$!Cadr9Sn_gss?pQ%_;mHvG8UI?Qd?y!|DRtqy$Zs z0sx^5!)@lP0-FgxyhRz_gV)jycG*iPIvE8W+szZ+noY{S? ziNCKK^IERTHx_0g?3SZ0u?m6(pmjCk4PCS}99iKEP9MjP`X4DFe#1)g%nP%N{y+|L zNrA)FK#`Q_e(1AdicAF|!Powb^zLWOB_mFfTc-eyn_4ZvjXeI;a?% z*qHoz*^^e>(8|FCfbv*+K^C>OHngw-JVFBGMD`e`gO#twZqOg^T4N%S&XaYcb zl4KuU(^mi)+Bum3Ui~wGiLs%TvWWx8*5(l!=MNm^KRuPVwYPq(vvo2vw=r>W_yb49 z+z@DCWA=n=^`|2$a{8hsriM;djQN_eYhwa< z3gL-Z{$v2UXO8&H|H7WGd?NBc*&k_pO5MxxtOoe__&hK^3;zyI|6=s-9Q;}F0{-vy z|0D}Mb;lFE{*wV9pE-c(v4H+8ym*WGEK|G~Jy}0hKDGE%hIl-vACD(`xybWR@gKSQ zBgPk_mzX4;jb8N6;{RtaO*22Mp2pQ5^wi8BeSr0>_)8>D`j=F|JR3a?(SIf|z}si> z#iOVGexj!#^ib&es zx=7TRJ*a~fvDR=rqf$KcfArT=WZ3`K6>J^euaK}^s5KW0|& z|1!Q{clg!$5QStLm`9gDaEmv8JG1{D%hNsb=GjG(N6sb0%pxxGmX%eE>n$?}i#Rir a2rIj&5DPmehZq+No6x^xxZR&7f6-+R;PPnmxA^75hw1^|GA0)91!*S|+*6`OkkahGrl^x6E)A~YDU zw2aVOlt&4tFYxo8c@(W2Y*?=}u1+1+2eD1a)6alfZ#zm-pbB2c$I(wh6@sg1(XkHi z@GuBpY0FMq6l5YfKbQfE0Bk^r*9S=v z1VDnb&OlqpA`><{HI!_XaQuq#YaI{}9DoV{1w4jvzxDtC6_v6u6P1ForLn$)@dqXv zdiGxeui|uE|2u)#Wxra7>Z3MrK=+EsVg$tayS=*j1!ymDx3r@AR>ri_xuM_NG}dt+r;0}EqAN5HN42Ogl2e|W;yrsl664CD(C zfAeo-Wovt5eM?~@05y05G%zmwfDS96pFk{rdwYF1IeQyhV|zz8fOy4*Igl>^z>+MI zg$0gYjTf}Bw6O=w_RI}pzfueY^{u7#9X=Wx2^jM`I5=4u8_C-0+c_BnD8Fawzx^d) zV`XJ*?I_@6U|?yiV(wu6+5zN=xwsI38f|PW{{@H)UJ>$(=;mnrFXFb$hYrYBNkL0} z2M2(oi)%D69=~=Wt?y`TZ?11CZf)!22*CWwM*kZ3SC+MdqW~bz+KC7L*VM+|$lUr> z)Bzxx7SH#Z5`bSGR?v3=oTVFZ0aH!L*ufC+^RSE<`gI~~WbSBVuLg)_e+K(|t_~n2 zPBB6U^8er}>RZ`b8rv(m*%||y<`droHzxd>sA%J4Z)hxSV`L1_KKY6RjEk_Vt-Y~> zgSm~hsIs^aKxQ>B5SWX9lmD{g-BA%JaN~c|9RRL4N!`EziCEg`JO0Zx5BV!kz_5tg z+c??Eye1F8VuLRq%W!dPO?Y< zoiAl>YUXHeZTd^lr!ZR>=z>2Y+Pw}_Crv-zuk{4;t{fVuSF1^z^${d(c&|0JOffIess0@kAcuH%;-*BF4Zf8M6F zlcl4%t)&|v5)7H?pG6d%3>@wCUk?~db*nk?KY}P3yE;1Azn+ahxdyNgipiz;pJe|! zv~v3PuW@@#W5AvI;pV&lX~AEK1?a9k-2N2;V@G`zJ7fJuwMH=-tV_^RO%b;IL`D=rfeS}KDl2D7ACA2ES6erY)= zVFe|1IbmI?*Al32|5wq1N&CzJES`$5hUwe?NtM4&ovAL<%)4JaV{2n2GbbwpYkl+A z%3@-pYVK(EdW@{h9nGDM0dYcjX+ZZY+8P@=y=npQ+cvuby{4!rt@~P|tZa2vZR{}Z`A#o#sQEp58uiZP^|0`sio%Y1QC@DJHI~o3cF6jWN zkHDpWZUC&VpZve(f2ABib^PlKun7G28G{hu`H62F=&;|E-?xK@G7;G?>c86tsFGr= z21WtcfJp>wm#=pc^Z&`TxKJ9x-71 zr@c`A#rj7c)&GWf{%RlRfAHvj&w<^a+xrjRzw`dk{`CLOdwq@i)&7YG{+stlM)3Fi z>UA&tzsJw7o%s{Oygx%m$qVBP$KllfbrxWV6=fup}? zK-B-<{>h&Iq%r(n288p>H@|Gcp(ED<$rue`-}SD|Nhy{ zf9@S93DgCA{{rqGI0n{f;4KaOBm?}A0<1y6x(~z!zD@vd=07(5XAhJG$^d17ygxes zjDb3V<3Boq{h#?CEa3dl16+Uhy6HbMzLYQA=5~K{b7q<4csbztG z8*%tx$NJV};AelRgaS=^%+Rgp*5(^OJ}NTYBcgIH$Wf0w?$( zPc(jo4Sgun_9xr69#MavvXeN`F0!kv| zv`eVG9a&Xlr&(N36Igx(we_rQFE;Xk=i4ukc5m}QZOdR!k*oGCv#vHYOKLXsY9M5p zQ$)|qMZ83P9+W6$<|OhbcL=W4^kl{w-5`t1(9()(kj(FqxrHRzfU{kH_4q(+4!{2z ztXw5*ZQcNJ9$BFyo?~f=UM9Eu?Mzo+ut2PmRiOTpvKuKZu0`{KazkB?q3IsI-`9X4+66 z=jx_Djfrv|3-|XW5_a$GOqFjSAr2^7BX2z&FlPeazl~F*5W(t)E|y%3V*s7Uq@0<^ zuWd@@y=In79)ECH|kZ9xmNC@6Wo^@@Qn!tr5dn`orC0EOgR zn+oXBQ5$pmbhhShVZ@j=HXC%~tL!Pz}#>23s*83z4*lp0iCBG*$@*1;c_GoHyc~jT6S+!=^Fc z{l3CdTp$|Fe<-*JM(FgdOQfS zu7WD2?p&^4m(k%{u1j!AcBP75t=f-yJ@O8se~2! zI~5o|2S2ezyVN+$>^(VUmLB<}(_Po?Q{uTh+wRAUB7JEAFJ}~0l_AT%EFHUTrmsT1 zndw;NhziZkq9Xah%LGrcf!|21`h9zMCP+eIB;nr;%2{?{_g_5F=9 z2_c~|C^6ca^7LE8^0$?Bj90NK6DEiJdmfA%hFrtzildcn!3^#OP;KIt(#q3`(r9?a zlO=&Swm)@VOZG{d$1`bvCidQLcA=)MLz}GiDF)}G$!SlI&|M<#A}fiC4idL?!DV-9 zhPG>&lGrCx8z|*jBEF-tP7#d+FywFq!}$qEsS=V3;`(@ghiF%6WIlr9wrjHT#)Act z&zK?dWRru&+Ha_vKMW<+V5E7+MLLZawlT*xsL2u^d-o>F&27uye9=~A9Pz!-(sxzX zlS)=0BQxnMdJF|E7t%U}cC3+6LY2Wh;Aw{JJY4>{-4V@vz`n?UlV$9vvF=kMmkCF-Ssw&RBs-7DG3Y3& zNWLH`;t6UQDS#Nt`{ILx*qUkII}6DWEcs$WQ*Cgmre)1L7(cjjF}mvZd^P)gGJ9l9 zU4cNIaC{V)ooaMI={4?`LIuVlgUO6canoCJa>ONAkeJRqf|)FLh8<>V8ATnLit+|- zS`!dHjRHop0`1V>kNRe$mw};%D3fW$nN(^nR&?nhMe54hw{Whq4( z@mm6;J<|y_-|J(jVQ6fdL%RttTy-y!z1rjZqRfdY8VgsI&>>D1Qba-KlYP;Yw)3UE zyh6qhWa&trCK!t*7VT+^)tEYOHA<)V#r-?^`0x3#K}bK0eKj`9WW;pc&vGj49MDdl z7y_@({RTUwtNo$R5?hAOs4H~hC#o+~05{zmQ?MG{XQ4Nbatp!^`H8t!G9@!TKfh?( z2}j8&;clQ7T~crzE`;OkqhdEJrC)BD9LtSzS=~U+vLx6|bu%#waE!x@wX1CaAfsr| zdh0Yr=R?)j6=BR8^o$iw`y$-;?q=K2HEm(pthqHH*L#LFS-EQmWy2~qBY2#GXS44V zy^_!Zd^V-h&+$uIZpe9KE^faaucvEoD^V<^Nd;}zE=$Vrr54jz7ZgbS4CAxzjvG%b z;#x~L4f#U(0Ec0$j+tVJM zSc~JXZFPZ1yQrF!2)B-%?v!ffd8HsYzJU9nl%^Yf%4Zjca@h6lDuWqRMR=m z8{}6)_d?kHsfj@~4Is=wk&feFuFQh^bAHSJ!G%Ci5;@sai2&9;837>=A5&^enAWbd z=R`on@WbY3@Gq9MqGmz_h=DWCwY!^?*rHPGdv`e6`XF#+Jp#>sT~=Gmd8n#Qy*~sc zS*ACq4jO5!W(SgmeFxyH!N|KSK3Izlcse;Sjo#|q`M-aQr1`#5U??z&?NYxtjzTSk zXLmOW>Z|y2V+4#RG@i<6fJ`%-db07lBkAW3Ul0x#e23W!X!qX17Il@fNyTq0-rrCJ z*XE!>-qstS>NrqMi8`8Iq~JkSFo=8t>gjfh1vK$Ut)-)n{-nH9u@? zSME88(P%5>5+N2X-SN#sVzwFPAJ0kQfAkh6PzpVC72WtA>^X9^PfP=#O9h?dUUWEo z=cG4tj$DQ!#Y7V*$n6~%p?4<*=Vc-xm__)|`})GR9pPu;qBY&Q5e;4qtt^qk}hM&6Au6 z&JXFKn?kb3=tCV0X{|wn+}>}@V_aQsq<9ROoJr+W)Z(r>8}23n2%hCENo&E(+#6Ie z2@dJRJ;{gUF6qsfD4}fL?$p}IFmk0o!Z%4%G%VdZM3?zA&^s-%IDMpG@K6*N_|_};pk z(Lg!p0?#t^w3t?_ER){zglx6JV|FC2_d-F2qGZiho=oSkx#b~9T%UNCT%SkaM%(YU z4_s91D%QAm8BY?&@>EA{o#kGN4)zqr zv)CSZXvEIa<<{2m8a|0^L5v802D{^9c@x!UArH^3%%iqPn}9dNUh$e)sH53}F4oH} zs06}ad4mIn!a(_FA{rYvxg~3u%Pf`5QdIg;%;?e>&)|w`(JqJt)NLR2SrgXns<@p# z1P5b*SC}ByKahRfB4O3kd_xA8@)biWAe!ag@*}$Z)@Wl3l5j~t6RBP*7#fEu`uXys z@$4Nli->obRG8E6LnoJt&V}J zF3tk$F|~iIy83ps^6W@0%8ZtEJeV9$?4XGX5k$OOEIgL8Rz4vqPJm99B-wa?zzArQ1;qno z>Lv*@%P`98&xm&kBTa|r)bCW*?BW74b*Z~23K60D;N!#XCojk;_KU+XS)J)>F*QC| zc)s8Gz7kT2tg3So0ZmN;#Y#WaC3H@-YN_4~eMaTb8ATl^pkP4=n~f>z9aDLY^GFT3 z-&rV=cAcgW48aqT&GOX5(b4A=imDIM0Fc7{;?Z+`NnO5DAQ}Qq>u^So!ssNr1X6Cw zjWxaLoAp-P4inQ?&Jnz_fdWIhfh}YcB87s#dGz}JYb!kaV&RwozO*bp1C=?2QKU3g zo6|$%A{U)c&Aata4?>ht&V&~;VL@u5Dj+B4nq+$1Aun9DBh4f^1xKeM@5n;TLqla^ zuc9P6gX6et^KH9=Qz$xlGKxW&KROGDn=ncnpdQX|wKm(FIx9X#5bP5-QnQgM-<1NC zP!4Ej+n7V)^mVN*z#80aV+Z`()O5@Y^*U%M*IH$kN~+f(1M%~h5p)3R5tH^xrl5&% ztq|KuOi0$SDM1Q{msh=+^5Rz1N#8j5gOM88O<|WuauXF{Ju`Z!Fl5M$#Q2YrNGUa{ zT0fFtk*+3r$V?bbMAOlx9~r*;{Haz~syXeZ1uQ)MSsF$PPP&?>{nWlYj?)fK^8h7Y zd1CkM!gw?w7JsQ&HoMH+zMiLGqLSb})zvAyrl$SHs1l0Q^U37!$qoj zyb0mkra0+UR8g(AnmDC~&GimAJ20>la1Z&o=r;YXY6EKS!DY2&2SJ3oirau^^v&3s zxkPboVP?N}DBtUsEQM)HTkuFm@#9~`f8cgiDN4HxJM^~w~Nbk`GQR4?wB}2je>4*&0)#@eM z?qe6Te%iQTq5VRz&cx9jSu3@-d}Ej0xsXmnY>&7;K53p77jlc|)zCZe@@wlKNfPO< z<#u#OYPrxiRaGWPLMYKWf&;QBv-4ebx#0W@Dhcchm?NbvrB1DcQo)tcOUjMlktT^Bw75*Ij4&IhkRbOR`7Sn-h{?fZSeRlqKb83I8$iFFB2siKyuPhlgnh9oA9 z{c0u$p4LJEDMdo$_!M?O*2y^SX6CHvjwS1dHsH5-2X;JjH1V}3rkL5bEjM1$&Wl2Q zl%t?qG_J}dzLJgSZSn;5lE86>V)x{y#wJZ#K@OXi0I()|b`Gw!p>iQxquR!wTJH;J zIV#iB(~Qwct>c=E#15Bu5A^RO#45G-Xco}ZI`C|n_hsit(S`7dzoOyB6onoy`KIfU zv7mFkd=GVT^_djx)0f1-!7EQsltYV$jVQsljMSbj#PK{&Lye|~b6I4N4iJ`+ZX#A6 zRj64pC04OWi@}ugUP1?%#R5%aR2=5HD5g5Xe^bd(j#R2Rz(>GaqTR2zMgmPg9sMO# zuKG4;5lcBxExZCE$$hTF^TSuMWNQ{EN0nkFkJ9fVFy_@bSD&y9uY&1>A{x1@oGG<` z2rWUD@6MGK=M4rlPKsV7s$oektlAIfe{U>l|dD4saX@&UuD- zU_5Goi9}ryo(Y`mdU-_hKK5!_d#_NUrO=2lTgU?-L`H`dNJx9}xDggw!yCF9$E|GUD88sBsW|9$#F3k*g(;S<6 zS<^xD45fI1V6WO(6oRq)(1?%uS{Efdl^H)=`X9g`?&qmcWE%}k8&-2F*O1?=i3X1H+ z-n2)eWDbhVwOqN_Qrl#VZ7t;hw4WcYSlzIWWDX>SRr+%ZwYqTJ&6g}qKlv?4nzkJb zkADaM3NoGHCD6^D|E?@yrU(Bcb(-K}bx)B!vC?&4##6md37G#R>F8c{ge4NUDr8DV zq&29rLWA4!@ZOidZSf@pd&auEq#YZ}JZ3U1Ww6lAqsQLW+bSW6$p|2x`;6?rrYDoT3 z8cHkh5e==u5&%Dc*At|3ce)DSxSb4kY@A-;8=~q0?V2`>Fj!|NY)S}PQy8r_=$6Y7 zij6*fA*OC0Ev_S(?k%j284USUc=C|tgW0+LeEo7B>4Teob`_`@`g!y?l>q$r(__AO#e z$Iu*m%|cb^1&FYpi^q?jWfAFTC()Jsn7{uRjUVj>M{;7nftEz^E9aC-nfn0S$B`sG z+i3d}wX)vk9Hc2I)FSm8)qzHic8l`*bzL7EN4s@Hff){SkHhnO?OPYO+l=Su(U$ru zH4R7McpV9T+Tbv^9`s~P_?!-PTvN!HWaYE_k3Q!dw5!o_If{lOgTz&kO^>AJ*3D>8 zojq|2gk5%{hk&{{4Z!OnS@nyZ7SXiwyD5%+I--COM|9K-A=4Gl@pDjrL| zu?K_7`t#+45sV-d{#KQu>EjHA$kilUPeo>3q-zoqU`!yB@; zd#>rTLL6&)#A5-M-5(K3+QbZ{LgRc?@sDuKHM!v7))V|e2QY7N_IAep zBLfuKds;VeY#2`la@x#N-)YN^46QvvWWxZSjnd5(cSrl=Fa7f0C4^Bldxvo@=Abt& zmrNSQJdiQ9L}dl!8+Q)s#fVD$-nuwAODE(zWE6M_hP5!evSwuSMa>K25BgzYkGVbR z8p_u~vUm$Bhu-`g$8l2`OkARcvPimBz;2f z`?=J{j>IXir?HqJGf`oRQ(%&&-NhKqGWNr)(*a7IFkU< zs{7EWSxYXJ;n*B2lw*J6HhOeDg(JAcP&E`{oXyj%%QI_BR7W=LCrgmvfW6H6-1avp zQ$`Vr{HkttRdjjUIBweIQ+x8X73 zmasR`u)TWxb~%Fy7vrmH79ufkVIo!AT_4ID#DOpCDAWvC1yEcLn<)|Z@ZmuaLUy>b zXg}*>&#)237-YMzHiHciN6I|_jzutLZ3C?2A{!E`>`p9W6rsHY!Yu$8As!!LGx%q!^ws#C}Sa; zaeI7F_z`L|cfZBQT@paXv0byO1!YMhg41GD!;`>GVVmy&(rpoQq~bErmE|1^)r&$M zyauw@vg7!E*rPT2s31G@q?7?bZz#s}$TxbHzoPf^V1$RT`(w_qfYpHK)nVmbi)Hf;@+0?hveM8JlnN@z3gdLw zvWap@;mg)sUCs27|IUwV589-6me2dd+Lnr+ES23`H~WZTsoC(ZC4>)3z9FD+>66IW z(8;~$ajZu^Hblca4Mud6S}nYNh4`?BvYAW?8>NoUfO&S*$i%=ROQCFG-7$10jyyy% z5l6eIAU^KgWnyDEmXa(J=86km?~Cx+yOBCe6-t1rci-36u=1{rPg+a2*C)3lvZj** z-`njNMfCkyEltBry$z~XwGsm-_H&d=md+7SVwNJB|NJk2JQbLgr{$Rlj1(rxr0AxG z_*@nwI~2uxrF7>`D}|beAND`0^HKJVqRRyJB=S{att1h&lNUStvxV`-?e9c=ZasLd z7O6yf`(jhO;tY8CJeXXQ?%wED-I?^ZJVqZ6P!DD=s&EF=+KE*AiiTb&e^)?W(PPz_ z`7yH5?>ap+XF@IAmxn>yG&^-^VeKLV-D$h;^n5-E?r!XLk(;o3MPpSzG!T;@HbFfx z?AO!S5H^`$xi6xk)gBgio94NV;w2CM23o*dlAme2MX_0%X7m$7I9#B{iDLSOrnCf( z30f~VKJQp|gMf=N*C zYYD1@bqWz0p*kNKHa{#`DC{IRKJw&$K{xjUY~XaC@k1r~{L!@At~k*bW`NA6!)1Sn zFdf^2LAumbA|%nF|#vsh5$-A-Nx?Ftzn;=zVr>R+xRU&vs4o?Wx#1@k*34a?OyE^yG; zys170b%oNlJ^E!BDTs-k`8iFP67~w!dW=n}K**IrYpkvWxig|z$XhZfbdUFMVqs+; zgvrh=h@RBh_G&?@-FamZ=%#$#^<>>x_7venl85I$bC6vlNqV}7^jUA_31?(^%2w9Z z*`hF7a-0-H?QwhI;|lS>l!aCNI3!XbAyS6O?;r-2ureYhLN z&>@O){t;SqvWi=;buk{?uMBVRb>)NppBkI zYmP8JtSJw8zi;uuqNjO3o~oZ=c^dvTKN6GE;}IJPn@r&Jz8e)CPQgl};r7<<8yB2! zo2^~<>g?kFj45k*{a+a6TGmI=`VOn*BocIB7m;+_JpEujKJt`Pl2Bq+U?ptfEzH zqnD2~R1#)nN6BFe_--H}i?iWHEH5!03e=kqqw=gDl^;@kV`oU+zPkolv+L-?aC=_# z@jO?vU^bDxY)3x-Jh7+W6)wbpx3|4NPWNp)8N#%(-Oux;?uKIJXj7@n;A`pEkgPAL zWzcgqq{|ox@ap%JEG>{=!h;T<=3%*exg8rnOVZL$zt1G4HS3#}Xub3_bw9|~ZBjL#XfFubsqs0}NT^cTEnZV4gL2L(ENNvi)u*SwDVS;MF5Qz_-rf~)FH}q9>3jEt760&tuLezF#L=J-2!ROB>?7PiVh!aot*Q+cd@XeCst-=>R>=v;$6- zWLQF3Id|@)IXY)ni@`yiht(cn_~r&l&eZQ-Z?DibJ{xPoNTJNZg50O}@WCsV$-_ONg zh(CWbnou&j%A_UC{O-%}v3~4nJkskRvg$O0l{QMO)YRLV?BwnVb@#`Yrv-50tlp>6 z{m*X=9uv<(3*tiZ1{~up0w$rUnaC`O7qo+o-yMP$38_hJNNYRVY#M&Ig<54RY7$(< zU1DpVsjAOWHVZ~7qUi}H`kdCkA08k@FU4#Z^j0_qw(9+M(N9x3pF3Kgmy8#*$@x+C zVV$MiT;V?bbMGL17g#8aW1nb_}#c zE-QL38o^Apd#t1bJp+3gKeg-SA4P;Q-;SIqAyGK=sE#zSOYnY^&>Fb4 z8tb)D9Gcud3`tW((gaMiQE}YNpCiO)qR&4_M|DDGHB7wSrW+-iZFozsm=6h=I`++S zyW*m8WRu}!$!#xyleWcHG>tnnyJru-v4A|i65YWuFP}G|(df#UN_>dair0c2B%$Gk zR_3l{xGq)lTTu1lDDO?`joyA@roH!%Ex~zw?Pp2cPsx-gW4)CjxK)9Y zf}A}ERtMk&1xWG$k2k(L)YpK@V)wj!+RiNb5yn=Z(sHzoAXVh^=ETfuRUNlgq$mO& zJ!itvo|E_a&iXs%K3?GPfhP8IXoAQ%_0pexg1;}k&wL*d3hLbM3#Ag%Y$B`%9*IEy zVRDoQ%Nnu&GKyK+<-^d({%6p|vrI4WFa2lw8;i+=HP)zD#r8CF70w(YMxq=R){r4f zu9K|WA!q`nJ16%m1h+x$PqN-yqPJtU8TB{Alu3CyO6#&|IF9fLQcNa7+qRbtUya>V z%0BgiRsO(tj$_!ZbR8MeIK55@eLu3UV`K?Yr&?>*R`3R}?jm@L|5XDr_v?M6iu?JJL%p_Y>_$bB&63Q|>egZMp@^3z<=iPcEZZ5$S?X^U?iCi{0w9eYOlmo; z5RGx0XJx!?H62?YS87csEG0u_e2eTe#c+o~`Ru`^K;0N9X_ zZL?ehgq1J9O0yO>6l&HEnAX)u-Ycbip}7U`p;PJ~o%LFt^`4Lp)?Mj{eekIF3N=j4 zzvD>vPVEU=h-3RUg{Px2nfTs=6gJ2Mxyra4z&XnKRD zt$65Rm04#MGyl(<{yDvTnk3u+6*PU)DnF-0JVOsU>;lPwh*QL2?v*-yS?44r89AwR zg0>yrmo?qG3(c3!1fRqqL&@IWyY<;(HB^$Q`)mzu-#jODHRFgtK1-3Enp1cN9;NOgZ(ZgkimGPP=wQPki^5|W@*?{UC{K5$cbyr?bMUx3L)}ZeZ=?!hxz!xMyST@%y&aQz}j^pk3N1=G{WI zKjFS)hOdNEbc#watgl1nDul}BBN{eZ$yha%*(E7T z@IA-wd3p6lu-)-u+v=sdc+~0QiyO`IM=?_^#w9V6L`m5t!|}|K>a4;TBPwoOCvUd) zYr9eRsML1wn(KoQ>~sijFNP9239q&@H9s6-7Pv~D`Ja+5o`ta}HU$XvBO}$2RGx$y zPYV{*vMK92g?dWAvCDD{(kB=IOt6~maba}L2a}$_4{7}zm zyC5vzA&cIwHicyQoKrLMNVh#0WP*+tag7gNkR)!gS2xcnRI8k(0@2JCAVJN9s=}0j z+Xvf4lZz(2IDwTds2&A^p1u-QT0b&FS?w`3vyzoOhmYL`!MD}gWaH9OM0FgN_jdXF zei8#^t&m5`V%OX(PCXg(0BO*MrTwGLW+K1=3WEVRN| z0HXVe;Yi=nA-)YbXd>TV2#Ue<{^TY0JOovFCwy+cJTB_itiM%%tCu20d-W2f=yVyNo z+yh^C7q`x%FhM20IwdHA9X#3E)*$4KAkF^4*ytgH0aN&}{ zidAbexa(38`B~DUE6`t6kykEMSDrp#u-aU#1hjRVp2Zfpt4B)ud>5-4+uc=72{ida z4~9LO-LiXrn`4BL$K9@c@*RH@5xH|jUy1sA44Aetb0FV`{Q}21=}?jBrv%Y>5CLQ`G7`TkNj<>RN)Olcf*Q} z=kToO6)TZ5PE!VEXE|WWVRwf_5t zhqvdVjdXlJS}a$iB)E>4P)kuERRFA7-C%+i$G*ttTlLT;>tF8kIXlyis~C|KIJX}zY4xi*@mTeQx1h}5W00b%X<*Lxq|vV`1b(J2vrLoCF? z{`NCY=G);xO$wc3r)KcUWW0Z$30X!^TnRn;4K0T03GgqExdEDZDTSu*4?upD1yz8b^*-0+da(SkJJ- zL#yi+0KK;n7b6$d`4#z*4DBBQsXm`l2Q){D28_1k>_n;4>PM}shyR(ad>5Q2$^lnQ1M{J{nyqKmPUd%lU0 z8vRR@*;?zKS(V5N!Z&B?SiIpvPgnm!Cy#6zX@|UpYR4^l7AMso-SGscUsu&}?)sVMXh zIHI(d{xG8_pp*yg)FapWqh~we@Dl@avcglF8JTxdb*__2UxOpHzU&8ijfjPBVU7FR zK3sJ^cp@LR!dNK%!*QyX>lz!Ya+tZMF>zbEg@;%wc7(bMsm{(>y^k1qy9Xv!uRK|; zN1kP()>+~4tP!tlCgMXT!jLbR>w~En&Ehp9u@BNphOn@;oN%>!_Q^a1%7`tA(nHYb zHy=ORUP>0b?%#rvndF^D;|sOM6wuC9PR@57HN*tDI_33ogVA})(ZE<44EsWhe$~Au zWG>*rOoY>5kA|g$Tv?2IOxfonIW6Y8?<}qiy=BWpG_w=JTP(xK<(OWnq5lyaVz1DJ zJ?*xfH|KeydtZdqd@C-)Q$aM(ThgsevKz~`QN;VL6(y6vPmQjVwXjiN&<~>JowGz) z(S+jn8dRNNvKgi`_sCZ)VOKSJNeb%^wzt-&GneX~aSy6hmSJkG>uSa9NWl zRACE#AuD!RYOr`o^jQdnBbrjw*AJx8UzoY5&p&C6v*E3&8e7+%hW^f;>hps1JXd}{ z?aYNyG7I~#`8A1QvM)HcaJz%3H*Tb61~RlhFL6bVE(_guq;{W)XmX`^$1i}gL(zx} zRp)(cfuA&I2x!xf*_r7k3Urw0ydC8neB*__(YUVF?FYd7RTC$XzKaTwWIgk@qtCjR z!n%*96BJfV+JQ+T8Zq%i_V4Yf(~inNA=Ys#1Xi&`Pef6rHQj#kuF3Y&M#-9kDC%s` zg@P9Mq)yrG(!CqfeUi46X)D=*N^!P19OyTO#zGmn*NNGL?WF=Z?C`f8;bt05M#*Mr zJ1rzTPF5&sCQKPY++DBSf>xmx(9GK~)9;C$AHqj9d~(@SEY>2U{)?7GGTa zIKLq3CphD!rP(r#$u~V4>r}BlBv1E+x+NUz=cKz7S18Y8;SHO44yR|5u|@G^#5rgC zT`{kQDrlr9Eh0u57t_U*C50F%Y2)d>xp@q9Htj)Vi3g}rI-e$c2adwPmd!w4+EIsu zHam6PmXut^3xv-$oCUtkdENTSW{P)j1P|+r7pXHH#W6d&PDClh)nnV`M6(XK z_n{Qm&A2Yj^00qaO31Ulta#IoY~xz4H~UuXghE2;6qB6V7Kd4|kakwwq{+(W9baS& zM35ZSxHGq_*Nx9L2CuE%!F8I1$m^F_KSLVXEq$yICbwjMkjXtP1P61>$#5jA)y z#OW2yk5JSh*!3KJ6rwFrY)2QIZqaN!EYBy z6=Lkr9}(kPr`pm&MN_+^MBLmO9WbW{q*E~ar$(!|9t%bLHj_AF$@YgpM4t~8S04o1 zy8|8+SNLypo)6gb*ipSSXJtfpf*1!muU!+&4{jc~udQ0$Fo)xAHn%*l?Fq1E_CzoIeR9Iv$Y)d#jNsZ$T*`i|to!Z3{veBaPv zC-D1bh-?+tjBOp;njprPMC@uCiy_f^5@CdQ8ck4BUp)Y?5yR#3qk{t(^`}U*FnsAG zI%6B#fGP;F_*sR~?RkJFFRypa!tcU%70YX5%zt~Q1oYPjh6TLg-HS)VKPQ}tc4rL%cS*F`F zy*z3O!)t2`W<&OM^aizb_nuw3E2d06os1nFY}C#Pz$ah4gYcJs=Qn@t$DF3D$45+U zXT4LIdF#L1^5sC!;0Tx-$}Qer!gA^LBCT9^@v~nr?<$s=3f!Pxs8nAPe+QbG>Ee{0 zBM!1C1|F-{KanUvCt#uXzq!}~=di40=`k!Rww7cI^UvcnEoZw?O`SVNL>*3!dL*3@c zmqK=v)TQUck$m&3Tb7wL*}lHwgTfDg_(R|6;%Du9S#O?=$T#-rr*?J6MPGjsQc{s+ zEX0a+u;9}WB|H5j%Y)h|osru4nkIeMwA*F!r?!RY#zq+Ql{(0!<0?CR4}+Qd7@GNb zJ?j{_@8RBPp6LFxDwetxDjHjT3EGq)5kHF?!+{{bX9y{+H@D+%Cy)Hc`5E>usS z>bQUZ%?CMqdj?Obn$v&o>D~P#Qzt*}inQ`lBEG|^PfzO9u^vPWU)jQmhGkBZJc;7GJTUP4KLo)z{GMg0TeP|@h>6dxuf!PSo6PL71jif*is$|kSaXodF zT=&|=g%of4oYVO$(LAU}pKEH?k{2uPSuU&X@5xhNG4nzKH}f)FzwEH>NT%lgy}S4H z#z+0)oX<{Ne_6Bae061k`GnwV(PeWdc8Z31V?ym@(otYh_jNB{V52q$?zz^4pkdDW zqQ7N~5jed1>NmLf`F{j`*>6Jh0Rn#HFNu#ww4|qsgE&*2uGB594r!-Tw2-4n_ZtN3 zq=d4I-)sy%wTI%5@YEUDQn!(G=D6&XH^Y=}R0Yi3kzje>`06mG$C&2sDwXzlmCDV^ z4z+I{84Y7}OfAs_;Nonlqd>1MqvRxtAs6V%QTAw%Iq*~ZwSp3LXJ1AzLHm7#eCyCp zGCRG;&;7W$aWhb;Rz_OMSkB&~p_6FXOi%C=+2-&5Y`-5*HV^QlXiK8_I9A33d4Yc| ze(&Dh`;zv>6ET)*!P0Oys%-{u+%0k<&&uO~v+f#v1<_mCvU;PzLZoE|O<@N+|HfB7 z@Cn{!#Y=p?xhGD-HLPt1t#hNsE9hsTRdUy4<+m|IH7cky2pKP?a?vl zq+Ol->C4c&-uD|K=WVPHYb5u5X{Yqzx52IQd2E;-lGBs)y&u2(hdm8RZtbJZO1BdKwK(WyMWW?TzGXP zXQTiCAOJ~3K~&4NQHu4jo#W0pQ0_oHcgHy$ln5sA+IR8e;-#OPR;8WEpRg5zU>K1E zhRBq0M*E-B#OLE@L@=i6#<(8@oaD3fGn@P@_s+b$4h+mjXh?a z-@e~pad%t@L=*HeltvrHjJhe}FwySEQpw88-$HJ_DY%sY5DGIX9*{Z!6>#$z^gZnNGrO;hx3ej+&Fe(H$q2pCtB%_{2oR=mUk_&`ruBK zT+NG%$r(ZC3vMll+d7Mj@ z%p|qjb*&aPtTdrA@z614T(ovcrmqQ=39^wl7Gth{)b6_SLrx=J>Rh)vzW-58PgcLgkoQqNd^r9r z6YAy(V<#>~blmqga}ASM3l87(k#G1U`x<)=@BGVlm`i?Lr|XVK7O1LkGnf6f>1CKC zC5;^X(J=|-9$BhRr6Wuoj6~5CsnRW~jb@vK`@l9DTM&W5oJ3t7v_5$oKEw!Z^u3)H z8j-M?e*&}HcI&eHgugU(WAF_#A&93JS5EQQ_CdDI6;pCjtEq@E$Bay2o z-CRWg9X}#uM_ul)R3G{9hd!ZR3TOLz;$N5lxj4YVx=ldmlsFw>Em3q#@2Wkaw?{Ds z+JR14jc{NTwHgal*g8g&b|`6Y!#_qGzbVryT1gFUFk^N!Zgg9qRlJ!wW*_y`JYF0z zR;O$a#t|cwj9egl*O$!I#!=di*v|MAt8vHn>0hCCnQFpuRqjSQHmBcps?n^ZZA$1K z>|4(t&EvApnh|l$I(ImH^kd)gb36^a$>01_80S_BDk@P7ip0H20iLNTjk19s{&JJB zM+YJ-;Jua-bup=YlkqCxaL#|~%0CoUsiMQr4h1bINpE9V=w6Yy-gBqU+5gGiH{ZO6 zP%RuAxv#JH4P=uGem>vqEr@T0a7oq!QS)I*M21xQV@F#_VGthj%)ryRapaW+TrjRx zwBY8z;{T3hPRF_S$2DK(qj)rIBpEWNz_agexE$?OH_E96Ga}% z0?B22TE~aJEeNqi(&nngM4893+ZA8fmj75RNTzNXB;Vt7^OX<1|J!IMY$`Kgn^Nhk zwgM`%mzXkh-4lxgD>E)^LB`lV#OiciFiuo?(Kn1jMMQ3SZp&PZ(}E~5l~$RsSt>(p zPOr@pZ^kCMkg+8Fs4T@sROLF^olNW$_SBah>bQySz1DsE7`X3=qGXPYZ$%nq&(iZO zdP(nfiQL<1{SH}=$Fi?jL#r`*ATIh&ew+-c07z_FGUjf^mj^b1pZ|m3``u6bQB!XR zaxQfhd$I$-GJE7&k>oHXB~;#hJI$7fXy;#KJbub25}RIJW%Fu7E#%^kGd?X>_lmWJ zeOZuO6aFdTrc1YdyzV~*@gHo`Kbkq0{3F7831O3oxYq~mxVuQZ#s5CZ{W`AbjiqaR zT5n*`#K_RjE| zwY-YGXapynpG46%*Jd}myuT9R{3 zvbj7tf*y5L1wK_XRCA4mBeAQU_D%QAQ!6;tGySQrnv$~% zCWfSq#MJF&p}dxO9m7P(B4e|IA$B{yG@<^hPfNwwg6n2n?YdrdV6pRXvDA3f z-(1x5VMpOk5p!kzp>KHaw^(=Syt)sVU0@LpSDuMLSrR=ms<&9%3f=A$3C$l;xz`ZW z&_h?a(iL^_f2S%6N?%m&%oOXC5G`%ClF^;=P|~vRF1mCVOw(d4EbaDWbEr6Bo-`*d zi+r^a#WmoX-MhDMx8OBK_bOqR`&&4$6*|>*+TXOuv7DM}iA643M^GUJt3XE0I51uq z?$R?L>$2S}H-RLZnndP10?t4Bv5)_}?-TF~Eb84gUIXMR;E=PuYmJgzk_FqGCwnb; zUM(Bi@>W8t`y$)3_bJV}={@xL2)`Bi-vBReJbd)l!%6zsV2N~LA?2op?(4jb(8cK$ z1qU6ZQRw=Drw<&k{Uvo$)C)^2r8-IctjTUNI|F*hWOL6#5UhfA*u9kp;I= ze|}d$)+G9?F3Gwi(K^L2xnF^CC9i@? z%T8f3bH$OC-&LvtCbH0_`)w@jgcaJ`=yso9_d52dV+C*5YYmf_)MLYX_-XFU?V6)r z(l}9UkNj09u+@8lzJ%bee0g@4a&e2-2*oMg z7P%gH>chEswdu`w`1yURi_`{uR^ammE>!vpK~RK8s`EP*@*2M$C>Sq!jX&Q%=)Xy> z!vEv8^t=9ejJdWp7k@lac40=HI!@tjjzx|@>0Bf3xF_aQ^d1}cV%K;p z(o=l(gFIrHo|$;IcV!>RF=q#QyQV_5U)$K)JtkQa&zb|1bAbwN)@%9EoxU2?S7P-bkuIeS zyRo<=jzWd!CZL(ZM!D1cl7A?A$91_MYj>SKbNdOU$B+4n;YZ11Ij1+4gO~Q1=P=8= z%7P9Q1Zd(3znaK}=^-udX~641g&;j*;Oo6cI9dhRs~>v5_x*@^iBy{WbZ-DEOv9^! z66q@Z@+rpv<>_J5oeq+Wzh-lVV^>4T=GrRKPCqynK)>d``Nwxs1R=eJEwu-)CMS^#OM^y+uI?4TrZsjLJz1{L)+B@f^9E#Lk#o_)PH zXRV~*o6v1Ydk5=vr5j44jH!vTbaJN|^=&)mV@j*r^kZsMCgm<;i?z=ad=@ZM*SZ!! zRPx3jN(D7WwOW_>QG^op>0B4B)sx4u1j7qwcA9q1Ae1Xv@#^#^YSgDP0HfCW8$bBI zk3u8|b?;Mkul;h*PByUi1xPPwTa~{;+KZWT3DZ|f!y8xZ4k_-H{1q`=OiE(6&1T)NgRROO3TYC(4y~LS+uJSgiLBuc}2w@exh9#4l0+w zhVFdc3paXCIzjFOkhM2wyWyFrQ3HYB5o`9q_J$T_h`r`H=b88Y9~R;*K81sON;)ifFIcknUHq2D)J9>a$uLSm zK$>e$mOljy6{ez=MV)q$bZ8U^4lKuNM!$zWZJ8XU*VUV2dw6SYfej7HIG6se_S#N+zzY z+k#RO&M37r?J;`VkHE7I@k+^T`tAqE3Y!peR?Fd=KlU9z>w5$MLOmS#qQP4%cAxya zlu~hAU*r9le;?inlk8LcIpL+x0lptMt}pi-;?(N&D{yteQfZH#n{U4H#+%-rOV2+w zu<-^&Yl`mZWAf-VOZt-fr`U&n=^{N>Phdvltw~~^EJtHD3<7SKs76K#?UeVu_uU_w zuHr?_7l=gA#SgX5{2>jfJ4(lh5r~uC4^K8oGE%9BjTw(ynQqKOj*en)tPQ?PT7w-| z`EGLl_&Y`SiaV4bHb`MHv?ux7Rfr&^S@VVM?yJbzs~IAOz6rA%leGWup^FiURkT5lT~`p&R*md z0cHKm|4H}3!2Nq~-uHxw&Gx9xW6SH3C{RUfamr?)$MKrLhUvT)q;VA?Sb?x9%JWVr zDt3mz@vGBt{3MdW@7UW5S*3mzWHY zI#-H92(37+hN|=xf9vh3BWu0v4ABf7i`9uFeEqFbj?j)`>C1wl9G8e)p&nz>8w>)+ zeq4jylQc(BTc5i6k zmOofEU5DS(ZP)Pbq;}2rA``n@Ip>1g@9yXS0Ps>62hc1FS4JI~xlUcr>|XZfUOpFH zxkK?%l=3>N!Q!!1#1&*i&tbgTC`YZ))UX|TuYKvyP*;RP1K-K)RWJUY zc+wtG{2g;Ai0KZp`c6oLbfR_HT0?oK+9b7(OxRtJ#aScyPMS7Jyil#>?FK>2bq+7t zXeeDnYtpK&lP}{fVKskCYTVPi!#DGGVLpj>%gLYn{XDT}Df;#qUO02Tk!RNk3(%vB z(qJnm$dRkeS9iQ8bvRy0V{x9~ z%kTK*fBP|X&`W7)Q)OCv-3=ez*RV$6b+v=OtXu~;r5(j}%6zB(iIdYsY<&3K-B$v% z{$vWaiPc&CRwf8_RZaeHo_2{-oas9)o-|@Lv9uv$i>&E0!@RMD)9ju z)G|z8>$W4!UrXWFaZi#fe^AEKa#SKu^hnrbh98QZE~BM1KpZ1!3ToY}G1i)~5MrxD zq9Us1$PR#dX_Z!Cg=;R-I5})&6_;`$Tg%Rg(DkGSjh>pL(XYH+>uYqi;ImjKQtHnF zpx(SM#babNS~u;A-RrP>x$D{^6J^t}-o<6o`Tg@>@?{_RKmU*a{eN?AOUTT$u9COc zXOZj{4NJ!7YW>B%Sp%8lv@*xJntwd-s@)6ny#kRboY<1h`x9LJE0*##JBWtjcvWjx z@sn_Pf))bNpU^TYDn~D|-+15Gef0;t<7olW2{Ktiq3Yy`kK-<4 z`=QOG@X|;F^QT8~Ja#~bI~_#bP)0Fbiy9# z54^ul+e}lbBQqvoB=NNol(EvPYSt5HXX}i-hfW65c&%}D#CU36uJ=SMP{x#2;5i<3 zE|hYi9Pkp}9YjMNC>4}Epm5EG9tYH1vYyCowi(0|YvR>z5)cMli!rq+r1_&W1{G^OzJ^y zw16TKr5wyumqlNc;jH?YbKC>8xsK*^&^}|7lrBwI8-uGDl&jWNl9pLMp8?SaO&yoM8?^vccKe*jo82xJ1xTZ{*Np86qXrY{#9#k1q#Bsjx~G3 z6Qn2iGygGA=3Y*Moa&g`F3qf{nFb+v&tEQOsw!405#e?>fw=kklpI#xFAxD0mLz)u zD!B@{$V&(_&D6&ee?PAi-wRx}@RfD!7ldE{1~P4lH!$#@ROxZ5&Eo{!0rHdpFZ}cC zNK8irYrqrSYYW9d~St@t*xq-A6r`z*KwtF?MdA^?~ZO#1tS$R%uJ zPl%d5y4X!IF>hOj9kq07>?5*F(i_gk@!?&!OwD6L8IZ>x?H6jqCk zb5obp@v)&pJh3q3Rk!8UpIAb0O0pcvy-jhAd=O;eaK=}R|NI~Rum9}REV@i&ZjE!f z>^|T+@J1Nv{JJ)giCNd^iaoTD^LAf0fsS$_a4qssfrousb_kSpKKJW~5|YtK2u?5L z0^0PUWe0?3bAm<{PIIj5Y&BQW|2Slw39n!L$@u#BeC7Mo(hw5xm6KKER?;N>icjGe zF%GCPzk}CSmm;aJ^^RxMQP{rh=)man#AfP%$>(=hPaZnO~i`@o=#<(F&*D zk(x8;?oOB6Ri?nr>OJllpmYjmc9lIKrWWvf5Ix;QU)_JJPT9nUV%=2on8{S6y+3k^Ba z@%+?r`d&x9gRzlr*v`h0hdbpXal}9A3`VWf4&>CEJ=3<$fZ}-LQQtn1|`S8?UlIEW_@_XkEU1r5s5qO59qB#O1*gD#TQ?QHiwep z<+_GOp^7ZNna9mx1(Trivfsh?0F8*)ir2UP)=LWLS9xnXJN(5j|BwGu=TrTbfbA6P zG^>wAml|KBF!+{?SZ)dO5I|X-*2gsLR;lQ1ZzNj!Qy`2&%8&4oc)utA5%&SP0PsC{5WKH;YCB$0U^DL{$n|~&l$i+IM+&T0 zUlDK-DVT9q(vRZj8D0lc4*>;Gd}~52q~=N_T%Pzkov%WiZqITJA^K)@ zuzpZyz~%8w2JP(cTe6sksV{K^;hgzZxmPhNv#Vm)S_4*;^qLg2BimjTsy*6Qsz7e< zM`NRPEt=Zh_ALEtiyL`s$vQ3tj(1vI%wzkp@QBfyYdR|mZt%XhSJak>a48po{wj8C^~z`ipx0Q4XhC(2 zLm|&W-}VCWrH5iLy*M-#V@d!CbTCuzb%`ihsO~INLZ8mmhVr&0@`Wj_Z-WLq@jg@Q zDZ^CocS?S?l|ja_f(?mYn(<@PFzl&Ya=IIEm#m{i>thNcGjx*t8!c0d+qdmgB#oA- z!`K~0<&IQBdplC1e>9fVlFa}d4*d7wUvi!0gj!>q2^?C}T|-?WC7_q9t!mTCX*nw{ zD?BR%xyW#Tp;)kaW4_M2Gk6n%qbn8FJb2k~b03dO#QCin?^i}d?Y6Bk<|`arQ4qa5 zfJSm~I7)t9QD>_NB#s7I*anxlo^^{FEm2ey^A*1~E3F}G-zTcWi6`;1M8~ZqKQRa_ zz46HIlw9!aam5&u-V&g;#@k#QSM@Tl7P}g`4{SHaLe(QgLgkaa`OFNG&L^a^*6MpW zK^S9&S)r+rPulRmGF4?!l8U|x>dky!K7^@Ot~sIuR1-DgZqwpHhSj>_S<4q@ITktN z@Mp@G{Mmp1OWW}x>yTyaML>`FjkDwPioyUyBcBrAqGKdta}-1iY*UlpSS0?s0!lB^ z?ZNUyB3x}0t(>Z3BsdIfgv*6F1~5>G8!Qlwj|0_SfFVcZn7YfvrhC`QBv|sRu|uS} zdD9Svei=FiANPUj1cn@hJ@2TqXB@Q$HFY!fV@I-kLORm2bvl4WpdZ0ew$n1uVNHDv zeMn2~|Ch$8o#?6|kQH_%^YDE?@Wa32Yx6!=bM4hE?`dA?&e8uL1_b~BAOJ~3K~%-6 zXl7_TJEM^~0Fzyzuk-b`P zwTkN)#OztsmNaTa4As+3(r8uZTE zBz8-L%&Xz4P4Q82jdlf3%fL_R>5q;*sBAQ)IxV}Q+Sl*|LN0Tu-w&{EIATNx`L)TuFo1zQfP{6SAn`z}_9eWKKZq*!{P;5K; z3w7tV-6L24!U75_QbU>HsntrVD?3LzB09sUE-*(nrCp)43RlNfpRSP@x57F;Ts3yZ zS_#b1>TEllop#{%SeO;0} zNUSsM&-pIV=Um)g1^7hY#mp;${%4`e)~;eL^VP$Aun^TdT`|PVirm(Zh@>sBydsdD zAW#ktihr$zOZ?rADX)R>bC#cO51<;nD%d8G>+S69%lj5>c{~-1U!`fh^tj zMt=#HBKNu@P>F?fm9CPOj#v%gMq0dSG^-c?+W<%4N}WL-!D~IbA_AcYFD%Ek_Vk6^ z>lxjPxsP#2tfuIZw%vc3J9}OW4s_}!FBQ|@)oR(7)BcevJEwp86i`Xh+|BG_ed_yu z@H1WoxVT*l7B>Uy$=xhY=5DTL)h2si6nCj@>8_x=gz5Lrey`NZ!e8V#OCJTa-k-x)7gt=ZUXp3Y`sH}@58RO+RKR% zKtAKJ&B>#w346c3g=%&R(=1+Y<_l`dgJtoGj5 zQ&uAoK+XJ>mCd;YvT>Ch2g-{h6P(S=j6N zT-vQ6Hf*^xyUnD(Z%bG+eeb~XY^kvE-QW9zpUE5r%4GNA z`m&!6vLL7A)i$4d@$bT1(oddx*`Jl%%Nc}k)^k<*O)~c21=|0NQc# z-ne;w(*$q@QBHLw9xFMG>y=EeKRow(je^5<>)tB>if3)4g{s6bK-Iv5%DSzg3DJXO z>19U209)GYi(J>JPO$7L$E`vP@2K8@MXp#pVmoJfYy7S7%7@XQa005C)VexEE7|*Z zM+H%ga6K#~i?TK1M?ia_HjpGHMXhC%>y|@$VlweT3waY5m2E~bV`}jYSFJ&}8gy0K zIvX2&11{Q*)W&3ud<`LtevdUQJssq}9WjAdf@zM`6a`au=<;NLEJ#r{!%MbRPz}U- z%Dz3cBgcn0z|>ciODKec$K0=FQnvuAU?TG0xm=R@4!|sqUV<4mzkn}|sOhs~54$fc zWIB&8U1#UWAZVUHCq2c_^mZb~>yq%npg7fQ+#f|p_INFZQ-aqWF{Bd5UZjRIty|1) zDNaSFXA3SNrepcj6WXPu1k}@nZvH>4y-Tlk%aWe8&p!K<4H6e4Xn@KuPUAGP#YpuT)=aMTU#0LJnK>}I&_mszg}8@o>HO1ts}{#?9g4w-4) zqZ1Ocz4`u%c~1sAUbsWH@wUCQTId}F-S*f1-d-F+7mxmy7dIv#qLuy0| zeFl_s5K^;l%YstUdu=T{!g-tu21SobqOY)F_%Qh^40Q% zOIuQTfUMt#9>)(FmYIXUQ+ya2?2xWO-Wm24@1S1&Gek{!$b>~puY%o7k!2RYPf^P9XW+=*`vEX|_k)4stjFRlAdbSlUa#UCl$ z1E0;o8!>PFhtT{c6iFB~DG~6G{>tCkCUq%-vOc|0@h z6N5~!Oq57>86UE^)t4MS6wdE(n8O8m5y5+;)Vio%?Cm_!ka#^lc0cj?Jyd4cF*eZ; zSP*x4@5jc8=PFN%DjoYIOAO=0vQA9+o6AM^|6L@`zF_+h>s9gex<$_K2;_H#VCn|n z-8gl?oW&0UQ1 z?7&VNJ&QRt!&_4!Qke6K=8DW{-D)rA*GfheC!|75!UInOMeg#@xibLO0YC0kWO0M*K^xXc-HgPv^?a8%rrnaDEN?MbkB)e&+ZMN5roZJ~zX_nf3;KPb*PcrJE12G+R$`m;ZC(71VBWxc2f%Yd zs0t3HbJsTT+1vULL>h1gW}EU;0_X(u9N&)+`H8^!gkLWGgXRx~_?t;2!qqkRBw_Xb zpN}8$DMGGLe)(_x>;ASLICtvg*Ca^o%9hN>5Pd`v;$I3OeWkJxH3BD!(QISCju+jr zc2;sw^FKfRNDJ?pC!J82fAu9je4~!GNi2-E8x^4|XKjrk9v*}#gZm7=kh?vb=}!9q zF5aVi6}WXdGm4nWnvuK!-DtOl1R2F9+7aD|OE!-tGk(I?XWPr;_YuQ&=Kt|t>28s? z|0;eKV$o@LVt|=?beMb6DX>E-(Jf=$f_`o9`n$jK!AEdCABBudbvP%^Kl#u6v%ktM zx<3=-G?4tW=h%My(jKB)krtbm0@>S~GyF!LoIN;oK*vVsgMvAu8f)4VsI+<0G5+{{0;Kv7;@}22$Ff{gn{u134q4D&A$zhm;_jnmtigj&D zs3?=536s~uQ@e%*MMYA1mf&2acbHMExg2Yoc#b8m@!)lyx=a|ImyPyhb^%r-i5t++ zIR>4^E8WLq@h_eS87+s9qt6%@yzZZ=00r%U2FJl-DeTc4o_D_Y{)uvg%?o78G|!Y= zSuWYO>srs&Yg-<)i`y36+E=%IY@f_b%pi+m>Nv*5=9hMV;U_FmjK1mSyFJ*y;71Ky z@4QE|9XF~Bn6gQErpGgd-U6H-{e@O)>B0AB|CKf))N=AorUVWu{SEYlJ1k(xk4h02 z{-2jxa`lR02GV3qNWX^}I1DLihf5tn9RD)zqM7KJ`vOIv6tLSOLyM~UArb@Ft*Re7 z(b^lW{ZRz4Y$X~i9h{Bc+6e8}HV_+wuhFyDsAE{Q8u(u|C>HFnPq?FA^J}a5$^HxI zsy8fiNBF$-Obvin`>!F!bScLlO^?IaI_BkQ&}(29L&P<|YCot4_64-gZoi=cM*@rA zWN7z=ZS4_{ez6>YmDm14S{F>GWFA5pFQ2#Z49~ZJ)+xUeKx@e5r2~4_w%cUplFg5L zuHbtD@C-6Z4{l;7*STaEvw8@KmDZ0XZvKDgFaM3d@}w_j-FBfjsRl8xnJof&gdL^a z`<2HHmO9rLM#4I7M1#y&J4>jdGeh!40MlG%2hf@1Ae-)B@JiWuupOF!n?{r;AMBQ) zMAm6yh}D+x;~xl`!f>!O*7oXtAd}_E{J@gafO^d7T&aLNN1&#=i}@-&xG3c8gw=k_ zmj~j8V+tpkQOGQ9bH=q}M^kn{0B^AXj%e0d{Y-HT80_6+PC`qiU54CTR8=?T1j zI9I+XP`?y87Pu`44C{DHQ71PoS=aeYz`vS?kMQe|lfmN@n2ZH`dr%nslx}`>dAVP{ z;W{8c!TUyg0&Plgr1$f0^A*K7&M{3ciDJp$6-xmhtXl!zc-fVR>-uqo+3dIl87E`5 zf|2_R$uB)(LUMF+x$(o-UYk$EfpL8(qk)mVooGg47#6v~lk<$XGn0gw)E*F9Gi*d7 zA!6s{<+V{5K{8~N7JDj~hZm4CJD1R1v8N(vr5^CSYn~i6O9#u^yk# zvUE-#q#5pYuy#;lN`6AHR^G0`Ph^FItUBGL>tss$D9N#9U~m3o#MiPYc%P}ox`+Xu zu-jjI8K}{0yQsU3omp9?2U@E3nUJR}CAPb4f9=@xTf>4Mz)Hdn9-)B|*t6d3bKjnO ze{SRX*}dDuX4XuaTj{w*3&NY03fSw$I@1WFu3C zZCl+&Z5D^+K{))5r{0518#d>a}irm@k32 zvESiGB@3<$>Gc%Q2-xE*xNV|bZ;XbU~z5oVDuB^%x+du(44aY1_Ig|N`I z#K;~$n;&cV@BtIIpZjijHt-1+BX78=jG&JJ7jLqa&luk+p96M0fGpj5r|n&P^p>}$B~MMUo)Rdh9Zq>+h9qI}NJ|1y^wWL-=Ca=ac)^dk8Q0T% zOU+Fi@mP6F&)133%G+Udh0 zMzPbq_Rc3B0DGXG9@-+QLA=ln$sP;|a9*;?W!`|!WWM)5_uoI}QGR{_=m&lan4Jt! z5;7+$x}CTzJ$@o!GMfUxd@1Pn-!Ud&7#ik>ulQ(hLsfH(0sHsLW?;LAnkraWPKc_9 zHF~0~@ga^x+T2z&gGtof1Mli*a`AaahNNykrVG3D(Z+d3ym$TS4)LUArUyzEaqj1( z10@zlNNZE0Y$EWfa;Ae-3-^ri3{@S~DNX%$IVJ>YZw(5{w(T+2573kHSkk;CQrFZ@ z>rB&8-U74545w_|jd;T@`C~F0dghU27XK0a$zV_c+yYOhn#^8uTgbNSwmDCGo$MCz znFqSq4Yw($U6&RkEY$7F+&013wBxMsZ!^RwkdUCQV_@$oovgw9E_Wf{ABgR43VRc}QRq9&FTq%?rUscrY zJE%sVuy%%OvTOV$Fs-_TWFXUzLfB$Uwz`8w_}~gQen(%9LwB6zTmq7=rJQS=cF5Ai z+{8=!f?E|Wg#NdK=<5alSw}z6Pq{OCwTSts`mh=T>EN!zSN_|%km^_7_Q__Y+X4$O zba}Y~ke7Yis3>-+M!%wyJ34TNI7T#6G(_%jp5D0Jq4mg*19^DI8z!5tI^T>cuU|}S z-P?p7@OmT_FAL}q+Kn7J)Z<3y5y5e5@QkyA%NKwAGPVaA{fnEpR973j4=3Z7*o3bW z5cemHWApssVqHtNp1Y3|9;IzvtTz{okD8>k%-i^7A{3`zf(JHk1+=4F-iYl8B+=QF=Wipnu@83j^+f5;8d)kscsVSHbUX+ zwEkg?s!tlmpP_ru%A>gxGciw`rUPY2WbPqRvk_zg*|Nf!s~7cBi*G05J{nmLqm9+% z*I*8Gjk_f1tUrF&g*=u{yC|#WqH_~n@(#OW(+ex*ZkK6b zco}~&mpda^^@)lC%!S)=5Xw?a*XKpC=BtGzXbvcEd%lV0qMY|-mVLeeVL+b0Gcfxo z*6wzB`|L`Gpz_#&^@fG{^ydl6R4IP6SE@h~jpf|LB88pbNAN(fQ9XcA!7lh^m^#a9 zygYd7?CEy&D&uWRG40K_w5-O)$Bc0zz!f=!24(>u^PkT_^P>;!oi9azd*T|OLLQts zh{4ZD4cnl~TFk8gfRqlcf_rE@8QwEd@7`DJ8JLqp{iR)wZ9(JpG?DIdI}YlY)AtBR zfr;`CK{v5JG2P@KDHlxA#k|?XUey`LQ8JXQbLec~;~q26SFYI{yl-QqC9-;h2NBKqcN` zjcn{_^B=$bn{04FzCEI{TTF~#)6r$Bi$P6!21sYiV~vLJM^W0vofZINm~we*1QhEEyU7+RVjBwGTbc3dHDb?A1(TQ zVN1E8S9ekCy|C5mn`-Pd3teGdPKW?@4%R*G!q$3dz?_bg)?W5P3O50{cJ?P`>H5>T zPysnkhn=f~9J^zb;O5U+#QS^a(TpaoNtip15X6ig>4zVF=@WB(v z*_A^-483%bG(B{8>g?I{RXx?i9@D@xIh4uk?i7t_{Ki8~V`5lsMDq}QdDUH1h|H8+ zJt)ikOv5uqsN?l;P9XVPb@Z1aB6w+^yhm}GL5<(Z;l1A>zMFBLq+)tz@d-RU+k7BE zk(bA7bLn3xrBAxUQ9c+&vEJc!RsnZvTESGwtqp#a%*nX zEiYzt=MXPuTW~X~Y3ljdtL|Cx1+pPjK6ups}99-}sIH=QkkBHstC5I-YsO);VT(C4o2sYMoL2;lK6|gQ0L3yY8nS zym81$*EHx@csZ5Kh3gp=0XPZu8G~G|kS5iWkE7gqYCu;HNuA`)g@sANgv>Qk6Gx5; z7Wq4AFRsfXj*I#8;6h8(tT5$NFJsmwFB4FL)MTFCnVMsOWygZYEz?JVKcY?wWz>4J zVtY{b;3MvobdtJDh8(%0z{7b=8+?>!N)~z2T?Oq9=J z^&-Rj*Zy^X=&$F;^8Wq6?4HD753$ZGCthG(_A_eE7Eyb9{mpOv=Ku5Cgv+Mu{k_3w z<(N1l`{66T4vZ`HIY*cW*B@A43Wt&**RrX%jjbay{d8zmRpAVfJ6Urt|5ZNWka9;k zvLmCHSVUt>cm3LStv7%qG0GdH(SpaTHZ-tI7p3BIHpEdQq{Pe66%Sq1{mfALUy+I9a8;^g+bK$^HCSE%) zwSgP*&@DilodwX@RJM(3NB1}!-K~Ng;=dV>pK_M6Cbx{TOjJGTnK1^CA41Cf_i@=7r3=atb@uvx_pc5@vOZo56(T zlV#IkOaxMKz9P)p470JIWC+}fEasJwV4s#z$7~p?7bqPS03&#Y^i+A#UEBw&dBZ+K zh&r9<^*J$1c3>A_ET_j&p^Ty&^p2zE?Fw5gZjtGZ>Jq{*wh~YeyQnA9V+XQyGCvLz z;KW&{PVy!jJctJVfPH*c+V*v!=r}x!IPI{0PENiz*Xtk-2Lc3}_O>?wT`<6WQEjQb zULP%w8<@py3(IFduiB0E(n4{L$>4XqJeZq;4{G4i&OHIzEm&Fkl5u|j(bs&D2wx47 z-}?LRcYpTN-~IMyKa2RYZ-4sJzx=b``Afh3m;dtb{H34%rN8(WfBKhx`?r7kTfh06 zzw=wa`5V9U7k}$Ff9JP<>o5M!-~adi-G2{nWc%7M?uo96vq54T4SPKkL6!__I?L2?1eD_bh&=WcB zC%2i#D<}+%CeR%&w-HS-DzfyFH9Y(@f(w)=lS(qqSCC;3oTiT};%VHCJ>4>9tSQS* zj`fGcL{q_s9390zHxtp|=_OS3rtP)#A;ibn_zRZd3SyX6b=@cek2^gqL`~&nJXzNi zt4>o%#MmDt!#Ijdd=N@|EDU$>2UN$)ota27SD=G^5j=K5Idj3U!$tLiwKQg$}P6Y^Hwm1hD1yymfJZF}+fheDQzfZ7K1Nw4>L3bPttxw*X&! z)}CJmviN(y!FUOchA$DNzrby=1(XZ=y-2C}0jBmPrdzQZZA`u@j zB2Awta>0?g%-0dkjBZ|8C?5Bj5J!>VC_8|&C`g1sqv-!hjbs70C2_w`7{~u59k6g%gm9K|+v3u(NvzrvgJ-8WNOYY9@SJ42o9(SKT#j)u zt8e@(#2KZC=45(XJ)Y4V`_Udv@gzth%tcdJo{z0r>=-ts8PY4doF^tm@Qsc7lk%W9 zMcOSh*QG3#VGc0!mpfd?~f9 zcKfxBUE_^^&=2kt>BS|}mOadUdM4i{iSm#xn>Lnajlcl1t^?&p;0M0b&rP5HSGgCM zIH2-p1orF0@yi=9Cy6<|l(6WRe7nxbVuA*vOuN!fq1lp#6h{Eb=;Eh~12Zs5`+R`N zumEc*2lA$%eoh&Z6*w-$-h65>o-vyc!9BUk2?H*=(YXS?MC4?(gyQXt?^@bIalnNg zDuiPr>}O?Dx@^Y>;mz-(>a(<(!eu!*U12V94%Qux3#MxxF7Ovck7g3g|10#Ff{&?x z#&mm*UB~D<7e`oc%y$8>I%LY~M*qpAzs~gf*PFWUSd~6vZ~QGk{*j*L_M-0TNG~qb z5Logmc!vkv?u=#z!>0#Q`s09E%sDS`vT#*q&v9A6#t&CsY<{i)B7`za;v_W0MA|aO z2NT2MY1hDWikl|<{`RxOKmO(?{4~H|vHg&5CpO{F zA`|Nj*aSTTGEu0b*$H6|Ea(IU;D}be8!jh@yc=`!$z_dK0lYi^JRMF-QExyT_W(CJ z=Lap(=u93UQ(m1XIWSY|Rn#zOAv4L6w|a7Lr+6dZvssX3nkY%#9G3jkR%|C})0hCl z;h38f`cJA8;~LV@JaIZV@(y`GduR@<(TBY*$M%^}yoAu)i8y?~51^vGLBROcb2lR^1deR2?fNHT&c)=+a;R%T$~pg&dBJ1YRQ z(3?}bz9ptN@knGqg9)4sUB8n_73~H{v7=Bi{q#6PrFc%57&c;3vC}B_Cp&ufYr;E) z>P5Sma&QVMese20y*<0u{DGzF$z!Hwd+TB=kF2RC6G`9DvLIIOjyL6F7@t80CH$ zAl^fig~qXS5Ti3X3iMQc*R1uVW(xT2fg11V!Q{29p4D;!NXt#j@CDHS0TTtjLuNkJ zpfnNb#H;}yVl@)&^p8RvWZI}E4vN(`&sydJWKH!K%0#TUGHJnR21ICAp;7i~0+Y}I zF=dT_qUG3Eu`Sa(2Xa+UOPt11M}om#ng^;h=RAD|<)F^Ub^_mM@9vk_dAGhs^-RlK z4(0lsMgNmnkSia<$Wcs$v& z1K{$Yhaj3&5+HIu2*j3Q|Kv}M_!VRMDq%iF7y?cy{6(<*rU0iG`uP|kr<$H?I)6Pb z%NsV6ZZr9l2rJD3!ZcGMCNM1t)iAh%cP5hTlG%a|o*NxV&<)L4bku^4n;{?;M@~AE z5|*b3q>EJ(Q#5_d*Y1;iqK%1@0I|1!Io{5qj{h0~Jcl~=V4|yl?-A-7GYa!N?o5*M6w`1357kBDh>ZfYWWRX*D z1=zH1Ty6`zS%@Nk9{fA0{5p;V<1d7z$#?!|x92ke;q%>}JS56DkpKMq{HcH`WQ5Iy zkqTc-%}KGy0*O^6Y34$nlL~L#$<24W`r$In49j;Ns3Yc%rG$-XI4~)p&gBXp!_S`v zux~zi`5ghorr_B-Q#4@E5iyhXD)X~`3VBmlfnCUpLzx$VCdN!WXJ1%japk^Oad|1E zJhbS|^E@#rdFvQAUfG3DY6E1lUg_2aFr|IHsG@Pv%`k*m)iV8SWTEGnoRroBJf$WR zTza2@YWv`&%auj@PYn-+LzU@F&x5wXYJ90NO_(`a`{_>+4i$4$`)?U2pKba z9u$IQ)j&x#QP9ti1$$etsj}3SO>_N*CRFmphO~9@u@D5?eC}Te3ZrABfHD)vlk7Pj zLkTq`4WXne+MEXSchhEIX-_#JnlO4}5o+aUBWi0-YXm*=Bzp+3Xf`J#gFN;bIH*uO zdXRakt2VV7NG>lutBQ8w+b4a%lwmePWlXQ}P=K8}!md2EclGd^3h8j{pLjQTt8SFleAGVnBi*3C68R+-4vz8C z9+Hn^CFnIyHZpHkM^(CX<;Zd6LVKxK%zXL`z-^U#d^R_7zV#<^KNQ5rfZ0R&iJ>hE zG$mXzx0ZPK&Kk7e$7~#`4=Tb#R*91V>{~HRBdM_GASdh@a3^Rv@qvOys-6Tm9X7a> z!+bcjaRo48Y=VC_MQj?4gWL!}&>O4~df8PX^H@^Pm>b}*UBI!u=819{2D^$);ixNo zp*GFoJ`nq7*tNc60KZrmGPB-^{tPbvi;p=s1x{RFbULx5m`e1E3!N9m>lEG2;$E;W zOa~n`7M+KIK8KAm%}5>ctrhfEJw9)Sx9*)VGVG^Bp}nez*UA2X6zb|_eh$h-fmMz; z=X%>^x(Avz*xU-Ru@gDhcSf+6{Ji`k>XquGNHH&qOx(xx<*kWnBlL%UoRa4tmGR}>@Te3wa4clA)< zWfuCKaR3Uw`319YjpIDs?wWF?ej-0HG=JwFzziVtt&QrtPLR zxAhpk#A6$k<6rq6@S}4joS3UeamxpwK1?$?V8o@m<_q}c4*pdYfA8?Qr)Iv^7Z}|% z+#U4UK(+wS{Zja&VsYTZG&vZ#Mfmoo`D?@R$nOW{f!~h<{Qj%&zWN?Hr-tu;^pii3 zzca#B!G_;SqTe_<3-!%$-Z44KK?y9%Xk_R+B~-o`RXoXzzdX$KNx$V3YvU}I{@$M- z&J`SsS41)=5N9oBg(+%WN1s^9k*5&21Yr;>JvpfoIJW*if)kalTEgK5f?Pn+!++FD z=;I*I<*MHRaXE$5I(5UsI-A@S3HV-`|7tzq98_#g?AA2Tb)da-PI7e7byDb@GDv3O zN=WV1KX8TdQ9gOhv`4vSTFOAGc9yF@weuNs+V#2oUieCKJQx0Cp^5Gw6(cXwZ0KK@ z%erod=7fsy7Uh`A&3YJ21a+ypRt^-Q@JqGhACve0`ISD_b2jxi`D-DWTqkaugv#Ia z$QOHz+BiM~fHvO-(qHh&tpJ;!Lj#b{2v92H^W17Q1p8I{Cv8IMvtNhV)y_AE3pH=eCo_`N;x*z ztD-LDD0)!Q7Ba5W6V!^j8~aH~6$1ud&%m3RqF=7 z0O7kallG%xiOq0dLQgUE2bqSV_muv zcXNoMBF8CH@H&nIF9r2T;vx@zEvv?{NGYaLb49*vGy5>&>RP_dy#So!(sve#QpF*U z-n$6d^uF=(3qeWd>wNS#o58CBP7W;8ALaenJSUT9%(8Sy0nn3VT4qNv9P5+Ta*!a7 zZUhoY79o^W>ZK3dL0z*#im<>*QIHq$${c!l7n@G5IC`={*+T5)!hzCg=}oMMc9CF| z@lae#T2&HlC2xfMBultbs5!k$)oI-y`m}B_#h%B zME`y8xRb%w|%^J z3a|jY5t-2NprVCxi9W8`Vqsz;Eai?ZQ^KffHj~x!<{9 zFXH$_$3n8`B@3EIJLac(%>jR26MtkdAzbA>`iJNX(kuVWnGDjEx{PGG@NH3zjG32Z za$K00(P7_tI5AKHmf-A@_OMMkv9vH~{@Gy%;crOPDHu>^PuF2+zR73&^UVP@vcGxL z{mCEr1K9@I__^1otPdX=;sGIlHZX+)4gGbzH*wEIiIiCRA1#@AZ_vtkc^6GeCN-JU z=?4RvJADvIDzCIZN>bd%&zVSe5+t40pp$PCnL4VBp`UaRNd*umd{1^5yvm6NCnt}q z9v+Lx8lPT9B@6>#T!wEf2q^Yu?scvD)Hk}=<{heWWjqh+kxKD0>y2kBC%_|^-Fi*3 zYlW65uZzOSGkQK%!Et;$(974nq=BWeIA{T+cg3#9RTGwOD&S80(TE$`n?>G3Vwlsb z@aSH#7i@V^y=C}CpCWJ1INK$Eh-Ms+9@q%lz^v^6E-a1*08r2(Z9NQ;W}fjF7{3to zb?#odKhKBz_&7lSaA?6p&zA316H1F?wa7wg75r#-CpL?qgdC#gf>; zs;-7uN~yc)&`f!eHkaDi{2gV7KOSS;9t8MZoYCO=P>ZG8G&JFmeBMAJTMf1YE{y!Y zPzpF~5uU@Nc1P*^eXj^&=m&ph@CF28>9h3C$~&qW(sIt1B}?`0Wd))Mk%h_lMHz~+?o z>M!9S8|3opiS<@ooJPKFZ}J1}5Z}!0KA`kxim*KMTHIYfK8_0XV|Ko$`}<^gd96b{ zaN1SB?L&X0b*9}kwp|M!NlnsHZX z&`*<;OMB(PWSAJq5IcirK;{wy_dw>*4-Fw3BT3>4ZY3fk1Bk%*{EjtTs&!<}WK?mC zy7Qn90{{wXd4^Gy^G&WLr%oXS8auDmn|>TFC<(Nz(3DndOExDA8bjgm<(To{fRY&x z5s{d#GgLHNP=4Uj=OCu{S-i#2u2XSmaHHNnX^1u@2eFPz@*ZgIt54tIZT}O$nAXc^ zXOL(+r48MF(eSO;w#VBARPC{?L&nA*_5D8Y*1WT)c=^uSzs)wKxjxO-;^LEZh z0ZPf||5=@UB-k$pF;%V#*b_Vq{7Lpzo(td|9~ZyemF;(;Q4Hdw+a$*B35$~!m)SU` zND80)B(7$a9eqMF*MDSQ_ zZs110hN4rWKij?f3sy^s5J3AF}2{i)1n9}6+cykA zN2L@6mpe1&8q2~7#d~tkEY3q*1FTSv7Rika!Exg&&V;4^^qE)&xzBo!wM!6=;*t7M3wq)K4fu&qPu@o-;)NQGq3|P0N0i>>)kv40P94_qUxBuzsgk~~ z9uqsQ7IwAuKrvFC@noVO^W_6}VO28}UgK3|r~3zFfvCc|OB4Z(esS=OGGWazBu__FN&P$EW>F z%Sq=!AU_)P>cKpE65!1mRQ^${84DqBKkb|xE*lYRzdU70m3M2bwrPe?eu)jR>S~Nl z3Io6`ud6VAZizfAJoFjtXb9iU$AU8`glv6HkbV;-B$3FQ_Kj>pGiFK-r5^Q*A7R<2f`i2vv z(ZSIjPsO|Uspr8**mc8PGpr8H8sAU+@uqy)4A&gHLJ$6Qdx#$X_c(VS*))%Lg~eV8s5?^yt$n}qd?rw+=(K`V&s$b85p(IF7 z9??Ucf1F7g5PjxpqDKzGEQyONc{>d0$uHOm1RdT}D$2L2a>1EGQ%=u4kE7OB!LVLT zPwsW9`&&ek*+V3qkq(EHswVc3F(g2f&lP?=mXj{P%u0PSkN1dg&mKQ#OXi{45zn-Z zM?=3SaP=>7T~JN&kVWnkCUR`iQH%KKeNqCjW?IU&$ZLPszuV|fx!s4X5lHOfYn~4x zU#yeQ>E>^L^Xa{8U!gu73o(xefM!Bjz6}K;C2rjF)8j!OUjiDKI!O8%fov<@OWCLT zr@^-!m`SIq5jILt-3Q>G$-y&4ur)ouy8|KgM4MpYm5nINpbT|K0YyO@1P`e6G&VW% zbR?=g@$4xsmj@#U!g7NSpCOL;-2ZQI7YE6ij2;bOF3tih{;Oaz5nWZq8by_mDkobh zn)qmrPu!a1XvU8Q=;U-8XU@jvtbjd`N2<#HqkI|DadMt!*O$d z{67Q&^J^XlB3a6^6IZ~cQ4upD$qd%>Wvwa{bNv_1G2MYuQrVHDnJXUY1&FKr|?v4YBsF>iwY#0iNBL$4eX_349Z}8k9nRCd8rpl+9cYpu3|3w%*RIc7 z7PVY<{pd5d4st^=#)o!g+P4C3UvDNX%Qy0S|9G5mN3*$I437<|2I{;9lRc3&)YA(}@dOZu41lG0)MT<;e*k>zrTwVL_?QUjxc#{<9In2V>gYT7*Mi zF_2NDQ=)T%6Bk>}%>uCM5tPRTHu{!qNdvW$Zztg+f8VyTer!M-{aq7a0P*9kJiK}jU6dR z9j?;3Xoh)or}ysl_*SwWG+A{RE~i(Hgn{gTsab6dDfx3k{mStE7?3~r<=W3r1N#{Qt_mnTFXP2c1KF6w;~vi&{5_7GrOf~&!Q@R+m&NuCpm)h9cm5N69ONG0Fp$U1s((j7HtZIvHHIQeQ3<-#^&#*6KPXwS84))7{s(xzc`*d|157URDM{kbFfg+qJBRlHIX>SwI zl&I9ky3?~UFz>X3!A`kl`>RMhtE17<#~*X6GUVEdvEsLh*^GJr4`N|CaCmV_7+BpZN19!gCX1R-i97AFE$8;N^{D@pkvFl-u}=|oo}z{7PC(3Z-L4djz@ z{Kp;0(M{UAk>KO6c=dJiR9eiMddwfcaBxtMJHj=F1rkdfP5+H)i5IzT^>av8Nej*0 z|3o&4SAA5h*NZP2{*$Z;r`5a=T69}R7Qec-%P?Bw#QR3#On=FTtcvZVT^~4ZJk;(t zW9YC{YJ&Fvg99VZHp2v;i`9LS-aW&%a)?(BUp#TijY zH7$++J3~0lKb0pR?Bb4kT`vL}s!;-gsLvD9r z9Z8_|EX`wF_=on5T!Mhop3O9~+X!ZLJMBn6(XDFQMNSTTXjB8?l@5As(;l}G%xf{Y z;WwqS3aZOez*=sff&FLy$$#{xX3Q>1r(llbfg@!7k_n)!MPFZMKe@sA>%SzlpZJ5& zcl+D|u=w_XxDQDwCkTi%D$(OC(f?+RwL=l8?y2ev$3z~}`V6ZCW={l9XtNR9@$AN? z!`(`{QM{~YSQc{HJvfVG;7zFc^bAGl^b1a4gP}~p!NI8CP2O=ah>5_s#G0o{vN2_Y zZ2BEaqu({LChn@!$MpE;W#=CPw#;}c^I?_dZ%yHF?Lys&&9P?qv0(H9Vd8+Hcm+U`tX)9-a!}|Z@d{tQDvaj< z-V#KWM{;?OOTSmDMVf&=N^uO|ljkGKn%rU=Wg0ssX@_@wgAc|=khF1>-3x*IO#kJ| zfLQ?AnNUK}!PH&nh*JoO*m(-rcW@QGWRIO$hz1~+{lJN$UqvsEurz!F8W~WaTmtpK zj>7665kz2~Inq+nZ=81NM>890T2(;rHCB9cqvnOZ8mv(5Oa0refVNb$Pl^AfKzvRl z4=NHk&B%3$;?@1dL3Dk_uT$IcH}z_6w=%0iyt;!Twp!Y}N{2=*U4?;f^RAozs%hU} z>$>e?+jkCLRGZn&b4Zt@NpFgQ&aoeRr*t}QflQG@478Jp(T=X{S1zB$q*@H01kBv< zC&7B}|J}FTakIhu@Q=02)xmc^|J{8az^?^!H^E^g!e(dB#n!ypK;}U3WHa}+?x$Ax z;yu>kQkl5?MqmFb$yfRGULWo-NW&&hd<~fg7|A&XE=s=Uy*X%~lJ%&YD6xYNo>Ml`0`n(7BHvw4}S*Q6yzS}2n@0lz;Tr)W2S>ar!)8pa3N9Ox% zXpfBnf1Ka?qd3*BJ%IV8pnL?l4+Qy~K-M-Z56SikwECftXLatW8c>m7%AUjQNa>){ z#g3w_9dvB-f~yLKOBhO?P;jloSxlQuEV{5UB_vB6DBV&{b4l6z9AaC)97?2dH+w2G(Cwo z-yr2#kC;=`w)Uvo4-TJEXx$lf<-RzXo*J$N5V+cLMr`v3kIQt$Teh=L8M4XZ&ZPLC zj$W+16qPPTWKxXJrKf|EYV>>ZfhO|s0oWX(Bpe>p6ns%dQO4GqPKD4CM<&6J^(9}N zCcG}Ru_ekPpr~dr$FhBg+g$Y=z0u;iL9m1O|~0>qg0Pr z1zn5731QUfkFk8BPo5_IT;KBHU~lo01eKjhntGcPyC()dV2InB%qlPfcVZh zkTJ0+cQ%0lC1Jst68yN60L}#TKfYq>dU&P_Ryd3m`pqf*h;;Gr;|`KKd<^ZD-o$Y}X+ahPW@* zm+5o{>Jy{zCw(2A&@qJ6H^8)GGYsniVVY2PCBw%XdDim}`BtEO({DDprnv&h2M46e z^}|;`{>e9a{lrU({x)F#hTvXGz?_6+qY|Ham*k{_8QN3qk&8%tOfbzT4pQO8xg$9GSLPwQ+&iH1 zM?F-J7co&|c(fORhM5=DBrr*Q>hR)Q@1dSt&^43a&wp_`oE-Frt3*RpOzRUhgNtmK zq}=ufekLy~wp+FfhdfN$Qpd8#P2Ia&u(g-YG&jnwKlu0mU4K=ythem*KJoYG{(I%iCBG*GF8z5hn7p&bwO`OgowodNLXpI6?x~H~EW&X``TtoECn1-{kX5>F0q2qd$g}apYk{hn-6$V&_(H?xY&+v ziM2hvtNy%Y=Y6yoBWk&A1VK9J^|PDG9n8l5cmC|Z`7eF@?YF<1kMHNhfNXp>``P&9 z9~d#01DSVz*71+N`6hcVp9toQ0a%M3@*PcByhMQDJDwi?z%2og?5XgvFJj6zCKaN1 z1)X;!Q%uiEOjU*a0mVvIf4>kqtoF5`F z5$3_nn3TGn7zms*2{94zhC5+>L_4aI#y@9S5h|K8{XY1L$w{ccxriorbGv=xh5pLA zoD4ca=G=>J%j5lM-e3#awm_m-w%u7^tgodAW{g4|O)ql{MRz7y#8!v-njggt;h=W@ zAL{o6UU`xcl#*6%X*6E=!0PPHuIBs^doH=uQ(95P^4AiOF!_t5x&^aSB)^O}0D6RQ)U={miBkv;|CircF3P4Yx;k9^l zD-R_7=725bgax?R$7}OOLvj74(lvcKxJVT!MWnP@4aTv`GAEFixmjae*TN@I%MhXC zwt;mx5z@$=Ha0F3%reMRc=I&9RyYP*%B>6560vp%liu90bZE0F^NR}LoJ^>QA=FK3 zh^-tUAp^_HVtnIF*AszefcXz0Tp6y<2xJ+#W2}a;u_<{xe)Fm0(i&=5 z>N!lW&6CkO3O4W0_}BZg5hVHOg857em_u~5D1m)m^oeQPSJaZgdXsEy^S~SX1wg#I z*MVdFTG#vrO?QJHhIq`hRmw`uUdcWQk|kzE%bo_i`!-zlgfh(Y)PTPVNEnQ{RP7VN zoE5k*&;%hol9PP<{Ye8(|Ng)GpZ?bvuOegmP(#ZpW6T8#LX?Qw4bJHD-#2A9 zrVlvE7!V;+^yxc0y_vU~ox_HU;)ynnP~pQ_hET&r{9XyDz}AEYz(*s8EUcMjg5Bvz zPZg#fMvq6{t*hK)YwCD551Mr9vB?@}PYUNqa?rrGHU4oR2Ib*Or=;pRf#X`GEcUkg zpqacKPC)p6z~Efc)E(zhRZsV|Jo+=A1;n830lYY(?u>03w0Vtk!78axP%#O#D$@QQ z<$#&U$LNHAryTk&gNySxO#1Zy+^_%IpJbn~a9O?^n&p`3l*(|a zIxmBW1tV&1{Bt(&3qE)^_i~bn>-tBB;pYf?2S$m2+EH1p`0<) zA~GCRUufqbgr!Q2aLvaBRV0rTcqr32Ek65LMa{4E_#P($g`yFK+E;zBOSlSftJCMT zx?vD~8Ty3Phss&L_|&EUO8WGpzfG@lCRK$8?S~(}&4a&hsdzw_y-SHZ=L90=Q-N7b z`Db`k%!?cuL}bw4aPN@CtfCXg*9m9c^EKgqQ*eG2SQ4CAih(ml$;ddW8?sam`i;>mJEy$705$57@SoklQb)Mjl#IFCbg>a4V1>2{IdTBc=pkw)mq#JASgTryn;eUc@j>5R+3{ z|JlWU%EI-M!z#hzkj)+s?l}^J)7%qk@aX#S-;5xMZs77u4h39~%G8^j2{nh}0;O1! zvT}kjg|I+`m_m+})SiMRKt8}4oehCbr%HGwj4DY7((TviwGN<35Go4N;6P-vt8ZFS zq)f7dtPXYboAyy6G#1t)z1wTJwPjn4;Xi^5IG8{#pU<#QCTmT*XQNR`v1XWWc_N|O zS5LQGLKy<&`+E|(fj_{vqL)hyniY5%U+@v7;jR?4`p64awX2|Klu0lv;U@7 zAn>;|lycv|Ly%tSY3QsAN|uhvm>9%x4nnGCe-wxxNZCeDPy z!MCB46oeTmp{D`U1aVSsyFOt3Pd*61NluAizMva_`txsab23-TL4WPG_vl#_jth zk{h$cPrF`Bqa_MQeTIGqS=6@JkoN_{G9qvJjN=uTa71LIJ!Che6i-&*qx<2jKl|(d z`kypTj~2RvLNADeHD?G<0xyVq%$;u*Oy2c<_xIABxa34;mA6IHf|XkU0-IMBd6QF9 zJjBQ{94fQ?oUBpJt*}B>wt)^?fP?%g)=7*+i-Y>_Fe|nU7i4swtgYL z4j$IYr8966t6#d+%<*l4hm$blfixlk&T`OxEXPxU6UHf>VyF3#9^(q&2ZBV@~J#~rODmLvuM1upa7F1)DY8&L1y5fd;t!rI9O$yGf_?(?VQyb%rc z8iDb-=0MFNJ^p=_H*oHjc^cx)ALM3)e-jHyR4|e|u_s^r6Ev!rLgd3n0^qwj`+yOb zp_vDGP=phz7(&lPj;d&5qB(|*5$YK+N7H;Ar+l0oxEyQT;ZBoDB3I%@GHysnbGVLP zJDD+LvWTT+lt;mVIGsR-dm0#GhlKLZ^Ws{Jj^ZVTx~ggKSaJ%e?_&!=r!$5GWqg(D zBIA0$wq+u*lXL(w5B)eZ@4|X)(%b$`_|PrOZ5=tF`c9y#RVAi*Y%-52Qpsz2k#nrm z&u4O{@Ps~#&Sl9u!`=r(qho$p%Kc|Uq&^ABmjC9PpRmG1>8^KU^VvWi?&ZTp9Xk$8 zwzmSlLGg>le0ne+BI47w`OpCy&cDht)ZMkS2_#5Gpfo9)Y!z^m!yJf!pi3H|^ch1o zw^qCvV^%>D=CAz3j&8=znQ=cs=&3I>`6OPn`Mgu2WRo}~sJWE2N5k;sB{$XxjTm#9 zO_wiG)t+jLxp3KJUVd*tvSa6+4U}$VHgH>A@xzJ010_BWTxl~NPNlPh(+}F%o(BxZ zNx-Aq15>Qrt@Ng%1X`^$$_8d8ACpmH?0-X=ftvW6^FuV`ojYO>!gvk(Ou-dfk-RH- z_#Ve75C1x)9lqKO3o0BQ#0W2GUXCBc=G+*tp3oC^^2%x$^)X>4-6$6$}5JJY6iTuZZ{=fWhv&}d=fTXl0D>@o@QvhN>oxg1v z-5RzlYANi9n2O!(D}6oMMs9)|ao}?&P^VnF@QffQmgI;tXS@O0ZHi-a=o!71Ntuoh zUN(629{F<3WTk^1@XRv(eH}uhmAIRD6mY9Pw*sD-6Ni&RPf|T92{6!$|3z8)#O8os z;7O=mBX>ihWFUlPt~cKL^qa7Q=)1Q`()m%Q9n{qs76`7 zqb~N)U3!PuxIO$Ga}l39XlgE#Q8aV7XzL^;qFv0VBf(S)e#{H2<;EgUj*ha^{UG#Q zcd#Ur{xWsCn4t^w1dhj}ub-Z+j>wq(m(TrY+p|5~AK8!Y5owkPpsY!JJ`3=i$dli4 zbI%%JUMf`^<&4gpf#eT`{=8oshAqELAjCa@Z*ck7l+vLDfHs9hc{Ogqb_@uDBHlJt z_bg*uXCR9~m(pha(2x|j56af5((QCv=h6nwPGJoF5n@#N$BAKbVmRH5&P@!S1l+5R zV>WF-B;bDs+X{DK8i9cKgb~^GKPOuWIODqU(_+S{f*pKynr1q>8dCVF z9a=|+iJMk=^WFB<5wg<0IvNSpivaQk{g4Vg;6d5PN1{o5<{?94L%4oxj}sTS zCK6EL<6WgTe*2GZfe4waEGhLNOdnI+qxAAWBJcY2U5r@iU!^`=1@s$){*yodU;PCV zoR_g8)6%51QGt#m3O^>;>maxTodI`O4@LRP01JgJLP?Vz=f~cXtbSnTS6Tj^4Cd+} zjy)lmn5b@AQiO?mx1fV~=s=s$p=>umzO^toav zrS9c8A-&A2v+I6Sk!Sc0m|Qp8%+r~}(c_~(;jmY~HQF~7rjvTa7xQaxSq5KZ26M(9 zK-M1m7nT=4;bTtYyvzZIXV$J9RL<29syt*B(0x)C+7{yG^m!Y53=S5+mP=m0K?TvN z5z=ZP8w<{qf9u!&^uItmn?X1C2Nd&BK_FmrVzx$?1gfIbkU}zw6 zLC}S} zjGSj~RFLsmX6|d4kEH0-gp)^caR?b#PHAyzo)eEK(Irsqm>SeBKS|)3X56ZW41ZG# z5Nve*#DUx}g(k`Udl*uI001BWNklRX5!!cgYa zB_8@K%2Ks0{8dNqOZtz<8SP`hRsTmdlF2p2YN}x1bz%lMlKG!CLE+c_>U>&%1t}>}Stq)q}v1wa=ShQ8Tiozd+g`=ZGO%V^6-!44!q3+Z~s)5WlmxxP8uKJiCMpAnQFAJD|x zlM;3#n^WXDS%s%@$+4r1u_X$NzM~@w;pvVftnN{o$$-cI!-=3Hl%^1B1~4hgJ{;RD zur}&(LUIZwt97_q%oLNXJ_-i0D@8tZT1V(K4)O|D2I|;!sayMxwYJ63QqqpNmg;L< z)MDgthDWo$w2aFwW$O~lI~2db;@fTBqw*l09p`qby}=lJ81gRa2|%A%vRqKJlEchq z5712(0slNWkN~~=CvE30i;rEM0#3V!h3*eu{rUg!zxWHygYMi<3#E@k{T>&`iA91H zh98%d@ZiwB9s1nAQ*-k}azN_tph&oSx*jrI!S!;UF<+%!e6(XRU|hJ&QBN>tO5>#; zJK;MpCZrvPkm6dLxJ1g{%d7=`iZb&|{1}N7njWDJ06$y}5}`jE)rKx5&W27q#HVda zqcu0!bZPry(n6#+Tl)uEp7(BibbIu4o4DC`a!~fTJirf%4lyj--xhxuZ+~!VM1z=q^Fg8VvJAdn(L3l=V*lK~{cHbH zmVDMAisXuVK)xY_aPuM5DN%N9fCjPS%?W^YhK{wz<-7zT&Kfs6^zoj=;+TDuhvI5W$|559p5!4VuGN!A2l-R_Erc~v|i?dy7W`r|e5{t6jb6p7D=v=73ELMRd)VSn8OCl@Wb@;MJJV58x-bHLl&%NkW)M%zNi|F zlQ1U(6A12l_r|9gN+2sl{GaME0Ic3|ap3K8&^%@&BO5-4W;8)X8s3{;8N(S&H8+Ry zQxW(jPzUGj}k^86F=R$4w5<9vI&-z9_X0^ynvn-vAQ%b zSq>l8E$i9-F;v(Q+OulR>BFA?x!TTRbFC8%BYLvpQg1}V+vp|6IUC%jhr{9%keNcoZ3q9Er=I=58ILsZ z@d`mD4wFBA(8vk!Iq?t$-yrvB+wMEL7Sb|oY6GDlUM9UK1$^KM3oTuK{_5H5GLgs z(`ZzGtQxzkAJ>_x4j00G)wS%XJZG2H_ADr(@8vG)C5o2Olaw;TRj=AHt59yV+z9xg2FomL7cC+bdt&z zvp8Jf11P#jLbuTvgGH);Eo|&eY>pbdPMriLlUXyRXn)I{^T)km%}AKMkOjdx6D|#`+K!a#IoVGGCp^L$Szv+ z8pnReMW52?to%tmW2_@wm8{vS22d~{hwF!5|2O{3pUnQx_S?$^8`_K$By zU7NXL=wI^6_Y?e(Zz}!nC;6ap9<${klxx)acTwEiq#Fq4zySS&$=+bGelq&ysxTTiup?thwB?4{PjNmrM$Mg(i zzz-J14Seq{`?g~1kot;mPc{x-Z5*$>347a`J(XR>m-Bi>jOn0FH*DE*-SF(kuyv2ov$u`cJXAR8zdHl(?Lwc z914PSL}-KHq+ko6jwDzq&1lt#yFfi=*E_&)9-1aVTKJ!s*rgU&LUKEC$M3-i)Gqp2 zDt5~-nA4ECp{t=ggF*4R&v736p?7M>iqaDa{ojvgeE$Dyc1UTjq(;lcT>4_HYvB!` z_8;=AzyET-_M3YE-cY(v*MH{969W5jkFCoFmLAdwBZh!|PU)fzp`VV8G8;m3;;`^I z*+j?OWf$aXp;ra0?-WTo$%s($W5M+!*_^J3WzD&)uPS61OF`hEk=P6|(^W|_MI2j= zo)n3e2ZDW2*Yr^3l$i$|oR#7VkOy_&!P9whLg#^-_E@9`V&sO0u~U;|8aC#xD!K=X zb6!lImp7P7xc(41kW~IJqi%yW1U8}C@$lINt@>OI5D7z@YNPP7D!S39aj>EVjms() ziY;=_7sK}0U?Z`|P`Ey*j|qvSj^Y_lNp5UV>{79_npAqzIxMIOrG!$Dgl2~lRO17m?Qi^Ss zs?NIKmaGEn%~skznS7`eCT!73tH8Kn^v1WO@kx5LXqS|+()L>Ey2~wqKN3Q}$kL(h zZM8e&$d8yxuS9nW^fPq>c>mA-;)i3df@965!I5BP#!|EDA&P{=Cf9$`vJu>*7!9Yg zE6v4HACwjnw1l{jK2OK@kdSN!QU(PDLP$9Uhaqy>fy_4x4Pl(nqNjGVF&a%6rDyfH z65ITS7U0IOP^2#7qCxo;qY=Awb()W3Vow;8ij?q0nXC#jG!-h#Fz~1$V?Gxs(Q!C@YvV1{8xYL zNB;VMMk`GNty3y<315D)H0rZ0hi*f}g1rlklx0Fq^L9Vfbchi6sIP4naCGzpoBp=51x>D`H}1SIpIz|{bR&7kpTee+%@0GN0>nNQBoB)NjTAegfQt-MS2oZzx5-K(nkzf_TC&j; zvv^a-m9wLO&5RAqe&yedAaea}h&0MY*!W9mO5BDU4@lR-ErTSH?`fUFZ-gC<@}g?T z6n_J@1K;gl=LZ9z2HZh3LVmr+}f*H$y7AX&sUzCYT`S{}>x$Neu(R-nw)24my4+2uLKs z6Qm_~RwKA$Jj+cF3aH~WV%D|~=F)e+KS4mP{GNq4+J39-nB@24P zt^pFQ)Kr>)Du!NbXki>GdrRHV{xVsSckrKYMnF8Zm8N9rfg)SkL1)+ zR`~~qU-t*U{OBk@jmPoXoLPB{aCpcMfu`Mhu6=aiglbErbMc2I#FyPl$8LI@D+GA# zkNo569ftqopZw-z_(%N$)mVT;iX^yx}=ae&Mqk62gzu3{~!jNg6yKXy2g&8Zr zfDMvlK=9l^UJOZTq6c=2(FDzjJsJ|B3MOzhUVjAz6ROEe1cN-vvbQQX!N(&5Ft&qN z7$63zZU;ITSVC@7^j_)+mM4OACmcH3^MM{3l0l^SoF7Q5AvQeAv#f@`YZBcdJR!DP z$gEBPX}%+9OGjd7!-7Sk7ylQZm;!8krBPnhaa_Lj0fRQy8RL-8ImEPu7WHfI|E9NOhBjrn@YT5DV+x0Kz zOg=3J_EjMBi+0f&C%v;)fTRT4iri(|D9fWtwU%(mptPT)Ww&9c`-DoMWVUhtZOrz= z2@C@c4h#fp2ADot3&;RTItmWI@$0_wZYM12I1Fhka4jWt?zU$E`4^=Q5Z)48N?H1= zHA?4dTQ~4v(C_@=ug@wVhX)}GrtFr50(0HOk65fPC z8d?wzmtCg9T1WZXVt(XfCl1#{a-4{_)iZ#oN(~5Urv#m)h~T94(u9^_N)zYo3Z<+F z*@&ZOE3qB`rTKC$cwDe@6|i9gF5gHu+6$^OYiyHT`5_5zWQJ_uyL1_bbq_1kqKW}q zZj2LcUnp6ybFtJWLy>sVygvP6+hZtbrx(0dB8sLHVhjbwa^-jH06ITp>{CxE3qlfWIW*bmdWnE!HhS1n?hx!OltG#jkC$x>5z(i43c=+_ZIxDMiFg zwJ*VyG472VX`AP|BMWo`OainiWTx}edYJwH`d|68i~tS-nU|(%LLhaooUf%#M%R=L z??kE>n?Cba+w^9Rgdwp_#KyyK_}Z^LMyG-SR%Qlq@^t(mTx~g>7tyL380E)_9d<~c zT|BvZ_{CSxU-|s!E+3sdxjH?+xaJXKNN(Ty=tn;J&)@ys@BHdENJSIkQ|vO8s0nQu zP{2V-C7D;9LCWHc6rzP(eu5x_Kqa;4vRi^q=5?;gxAsX*R5omuIu0~BOz9+e1D zJpnsnN!(dbP~%KRNhO9faRKuraHw6zL#5cw7Bu`58$f-xj zFIZT;EWq$Q6|(~48*I}F_hCcUmQqn|y^&!15f${+`+oSnJoT5`)m_C$ zkj{%Wv<%we_}0-P%y!fa3}y`#*Sg_q(@oTbb6#X{Ir6!ES-^Acio?Y)M6P^q9rNtJ zcL7w-kT8X|@Et7VQ^v{3XN(tRNWk+SbwT@L{6cxOruK}HT##=w#AaMi*I4glZgBv!*)ZVkPr_? zC^q0A&9`_E6EJsWhuJm+ft%tEpx|cU1RP973=vqZHDn;$sSS0@8uU^v z@v@?bxvpNZqmISUe+jvOJp=aANsg)e%7Y$hzazyuG{n09u>cKPgyCD+kz zRzcWK49bmaQ!WtFG=r$!p$HX4!(n!|zXneX4NTTjj&Up;*F;l(RoeC6VmN3UI-VHbw+Zo%2DqdO1c(>sH1WB{*xXyjR>HF7f=6^7`QNwj+66fpqS44&Kw z4qx==0-1zJ2oFROkSn%gipq7nm{`W{(S8Xmbdqj~F=X-sH$roYp*edDi*Z@CB#qJI zh*200IHnD7SV6ZthPLZNyr+1}ZuYmj7Lf39T!e4kfBn6G`9JZ-zc>AWg=Q&4N|SA>5#Wf?BJXR0EDgYRes%5KS4JgJu+~vx3(HeK znQXM9vf@L{bRR*6*nbkcBCt&>klFS6lD_Bb%UcQCrXu)U!Yh_Pk4I6pu&&pRAr8@%2M)WpNvE)rm7BvXQan-g@5xO7zX zJGg9}oV3n7wA*W(AvVaRQkQH#eQn7s2hK!#ucWFX+eDWBkyxCaUxAMwKfHYH^RHgK`r50PC)_dTh~EyC zPJWx87h^PtEGO98d_YuLN5^+>9kQKpTky*tec`vh>)qe+2U?2N%%n<4M4MIy+M5+q ze5>8;a12`;rf}>W*p4~QM4BDElIlH36U5t(WLB4TW6?pj;{`J~b?^B}od7gUS>;N? zY|K=cue#qOtf zg8!vbZ9uP2x=dKu9c?OzZ0p!&C*+FR|Ihlo4}r1ZlBo%Al(v-QN}TB;aw7!beicM9 z7ptdbbUQx>h60Ck;f}T?e>R}CD;k}QZh6Z~J2K+1+&{g1^vY`&C#R=ZPdG2jFBAEt zJj!r*crRKn&rjg9E&FZ&G8nCnnDs9%PWc_OdlK_}aCk57(A)e}0COPSuJf;)DUk;e zwg~94N>HXq3)?cUY$p#bcjk5(!H zKa0#8k(cM^#Mf+`@C)k*F5KH=AKtqJ=*^6e4KC4CB{`Zi^J97{6T3TjSd^j>PSP?2 zLOh5R)pSLXiVi8&HDyj?aQQHUgfy*7%9g6cug=P`k7R6$%xKm^1BiG<=ID%85cQ$3 zPzl}(*c5=~6C|=xGy;jDtx_Ub{1*1e!y!UN6&bR~3bZL}4h0nw+azmtXoqhRr8vTZ z9_^-+OhS``ol7F{8$9XC*x}4K2wNr;zc5?89KQi#575xhg-jrgN!#JiScLkpSsoHg zBOvE|WV&V}v=V%A#a8SeM_)9P%CA>3(b|$UB@1^LcUBdd@*e)-ulaIT01fn-6wyh` zCg=)4jJCb{#V@ejf9>MY$;tH-_W2j*r*!%|U~wVzS6Am8`1yq(Zkw|L@TbNzxTH-o zKpfq{z&=E$o=<%IrQd$%cfI5HqsDU3g6iA|^dg9`Z~B52CAuXkrPSdIZ)tVK2nx2H z5dCW0DU5Qr4-P_>C|vw(T5knPYp|f&x*Q%DHiRCe|HCh>opqSvBHFYBEl>L4DqF>b zI0DpS-Icw{B6$Czg3%S7>PQ~00QU0r63`nIrQ5$&P^pHxgVrD#ZN*&B>XRYmUf{%o zBWfzw0WQMH?m>6StuU*uCx)V)T!J^NZ%U0HpR#08Z1K1X5$Q4!y5@^9bz@P|J9 z+wXqQcm95R6`<6^REGJT2e#S(y9l0&SL@SJrgPc&Ha3d|bQiQ__TVl)+{U={2|@Ds zm<%{QL|CYJc6nQMB4iAVbUZ%fElx`qJheFjh)Wc~Sye!-Eg8MELE$TsHW1iWVI+u{ z@CcvPMhjO~>Fb)|kCcjfDj9~kL~dGN^#WeH_Q_1wNK3QQJBorf3Ji-aHL&1_AemB? za|$bDg-A~(TwILzcov~?NG9GFB4*(h{SvY0me_@Fys$T+yBx*ZBiUu};Pm+#YmSz6 zefhq>@!tQOHW#KiHhnd1jaBpch3f*h1Pvsdm3-M1gnUfWoYNCn=9``rU5cp~l*|9{ zhNrR|HX5$4j%-ilt<@=_wp<^avD|f^I?y0km3k(8jO zeg6VpLF*$@O$@4ia<2l zCc`#kjnsA8Vl=K{3Y9XDL6UXYZ4%!-9C$)=x%@8?%q z`jwVvFAR80lx#s(BCvp4l&t8j8p2h+M?pVM_ZARvFPMqqJ#o$9GslXt$y#z0;JbG$ zFM*3{GvO*x17pB#`o9yK1O;-niSi`iSKV2L%Z$M5M-LxfeDQOizj%0d=BqTG+S{pQ zA?Dsb0|A|cJRO>4zbE|$-mqmMV25WlaQq+&Y=(Axp9io%#K5ry)UA*I@=L${UGMrf zRsootl|Yv|5ol4T1rtYwAfdr4j4;tgiVurs5;hf%LRPwRl|2-6>R4bA(?)~KrJT)^ zu6@>1XoFpso!D5Fn@d;(Em&fOh+ZKq z0~vNuOVCYHbM;;=8W|B7U*3=%-W!lbKPH*oH>S$=A+4aD{1LE9xMd@W%h2zPyg{)_ z6>2N8Z2Jmt(*G;uQt`1*@ylT?nQbD0sQ*)GwF8K}{xNr7U%c;!-uqv$@^?BXc$k)d zDTAGp0HMb{S-fp!+jlr=PN;l{ji!MOidgk6E_vgI8n@?;!>|9E-^W)zZE4rnEcve= zeUa1sS6<;Mz7q=I49*EZo!aHS_xA1N$jko!@c7Ox5B+k#-!Tli@weXf-QV#C07K>fu`?^-riB%30S#J_YqNpnLS9h( z&n=LpcrT{7_A^%jOKQZ8NSP~JyteAxbj)prmrtKT2i8n#Oi}{WltK+nx&PNFrHW1> zLYoy5oaD0&5Fm-y@W{0O6O##-imU|oP)=YV6SSG>uZMC*3( z2}~^z?@2bPfTx1I14_3`IzVRE&hwW)`C~uw=gtV}`q=`cJuUHRxZ^+>G%Q3c#%e0&G8DR6 zsz2<5V%!Qrx;RpcTzKS|505~gY)h2V)fWA!0Y2v7Nbcjw!=ITUwO*ch30CCjf$eAU*7A5uN4e<5vP(%b4hg>LMW?W&_W*JLuB^g$?l9jRjoAdj z&AYFbXE1O8h)@L#H@IY+ynIl1Dces8v=wL$qHL#bBPUGJVNjM;;#B0GW9mFG$$1j+ zEk}=Edvy8m)z>ahFzuXGz{MH&@sVcR&yt^+TExt4fdgH~S)UQZzQeyY7|5e8 zgWHEAwgXu`Aj8-#fg$wnX{fCaf9Mmx_1)j|?cNng%{ErXs*WUOn*do*X{~JyEuOX_ z1W;_qCB!Kc@Jf{m7xQnE7&cgIylqIoi6JKo^Hcb8k{b~c?&vn^CMsgt60yTJ z_?w(DUQA^srQR`LeqeFN4I=3mW>~dv-~QoSR1qCdU*Bl@k4Iyar^Fw+1{BK`R(lP z-`VrCR6pj?UT0-Hzq5A_t2x}Gljp!M0|9nqJHWsIt+mZ|hvv9@Y;kG$&-$dn4%N*y8S+XB|bNdTNeLfuG(hKcYlB~5081{;{pz%FNa zfN_!lGRO>{axw^5rJ)XK#c@qSfyiEpWl2{0$^u9Bz4gqY@-Wrtd78qXLy&0(t}+D zvaEEIgG?0$vol~{%A^}f@|2_-cruC_`);J4rkng~Yj#jQE%##IBSGYVWsu0cm(}^{ zfj|HLpZRY+*(Z5`0unw3nd zQe2ahuS8xU9$DTgV7zeWaQo<09_rzT0$8uMNEc_1dVgQ3i0)t0mz?aoj7M&YirI0b zD*y_R)Bnr!$2k*-tFkKT_XIr~STjHG>a%L_xq(Ag6>Jf1-N`n9Qt`0Sle4>b@A80w zHwxV@*dz5LA+CsLNjt1Mz@$C~yZX(6CPmcoR|)6aoFJsUyis?a0W*Q zU06jSq62{Wz|6{Ho!}A6!d}KDpF0Y$!J$w72E>Nh;SsuJTebzzWpz=Z;1M7VL`F?v z#emeBqyhoP=7p~GQBhvW04HF0con@L$b|+=OsRr@y3QJbQgEP4RLLv3!X%S!3ju7P zh>oZ@u2kel^5WVFFco?^hX>37wZDI0T-9@ba~Irzk66nxinlm zJ?8@6J#YX))vYI|lV>II(GS1)nRmbE9bd^^&6GJ6u{<)Gh_KjF5XM=}SS-SzTFP9} zEosp^ma5>Y4>EQt565Wi2$RoMK{3``r6^b8YBRmTacr1Id~A|@3nn#a1CWRWAR|YU z2nw}XG&U)#jVh3I$4IG2u}#r`C_*|Bz`&I!tpr99olH7ubd)ma5Z%0l*akWxf;Anv z=Jrre(?lb{eRu@O*2G>kC5z!3aVlBK>({bAnU;4i9gGK_@!~sD4dD#{F227=L^|>ppy^xeE35z z{EPSek#~L-g^fANG9B-bp-{kqB}x^D*YXC5!5IaRggte<7V1H@b3+z45=SbOLRv9E z9EM@oWLEHq4_(=oN^%LVCRD^brYm2!qwK!OR)xDi*}KufkU484)gPXQz$ zqa0K9-IOcprwqmKL?yMdv0}~SJBFq*%Z%4<*jkZXYx9n8sJ5bPgh@yjh4A@*Gd^sk z-O=3SB^Rfz@&-FYba1aHY>8+?TDhm=%@CYdT#byx8^Zu_TZF-tVV3vjAN=|E|Aq8@ z!9eZUoR6{V=5cg#sj@wZI%o96e{CL0jz3dMNy3tPGUGBnnW5X!FK65TXF^LU4&VID zF(-|@vB!+;n|jXtF6oVh1?OOpd->iL^nj1~o&n+b&i!b(&FaA*-&*F&>wux+JSLpe z{wG-x2y+ln*2NjC0L}~)>OXHS!f@-C{^2kG_Iv*I@BIC((G)*LlUIMOg4#qVaxU5+ zegcX3qks?vvhWT_>DBNI7Ss~1isT%`M}&kLt_>iChOzv~_7Xx-831ZhFtR4BNW*~% z_L?NuwX7zX>gkn2uhD%%EmZaPU!5+E7-R$ zKlt;1_s`G7pV{AL1#jLzb;~>300-w5WfR;RK`nRsTCQv!9XL!q8kCJZYg)zFnS>@>XkNDib328aresX zF#D|tzUm*o>GW-B!7OD3+41S{3bi@9Bfq*}=Ku2?L1lj~tSCuQiV(h+dB#G(r|Lu* zt+3i$Dx@>_pmd}LJRJ%{h@~^rQX-aYcwDY!;*;O<(d#(LqQiOEaCOad{>{h;|2+KxELjIkU5LpUjfha3tD;&9Dtsf$}#Sf(}f>Gts zBy|-Arj_GXHIj+m(v+pPh)t?$#^0OqE$|W?>&F9;D)Uk+Ahtuj6$f;4#X??L(g0dP zCvIsGTka;^q5&HAMY=C5G&aMXhC%PBNF@{BmDZ~bSLZMlbLe+|e&Q%#kd6RJ*>sD| z<>>JE@X4*ynw6q13)2uvEkEY~qY(lK5fj&jry1qd_U6@9Si}?uqlS34PU_a-Ti$Tb z)dfbgCpkNV!;|^GxN~uK>OLh3Z{POx-)CdIE$EV+0Ra(R>XW47_yUlJfesjS?i7|~ zNoMu~1`nTgv4Y+2J9x1FPoB4LfzrLBSFs#?_+0@8l#l$wkNwWOzUQ59wTrDfPDxf_ zQ)bM!OZA_K2O5K5vu@A0vL|r z+tg0wB(ECC@;@b|Fh%V24gIn`=+cf+6YYwvxR6_%k!LlivY@*R6nX@J>R+Zgk39(pJ0_Kb_wx-Pmh}ge!+hft5Mc%q^ zZXYOQ;ac07^&v^^10v6i;VZr@{r@6&*v@^(jgS|6=*xZjpBXg`#?gV0PKZ-D@XP79 zeUe}L&e;>L@Xge`H-j7#3Q>u=wiwfVgI7@m?(rqcZ9}?j-V8#6@4%ouKQn%Pb@--d zAz(S4j!MVloqemB;@H9Kwe0QL^8c!0p6c{gf?)X8{a8w~p^JfZ)QToGmyn^K9VV2e&@_k3RmH@A~dkOhG2O@)AT|tXujDi?*;- zaIsv=5ZPr5rWe~y)S2~f&*l&d2A+ZzjRE0Z=o|51BB=&#=*6^^E|@(A^ZPs)7Mm7h z==Uzc+bZ@fM}YY)v=t>Aj9pj?dW5qh2>PQR^ga8<4}Rb;rPBkDYEQcC$qJOOfrY5P zP)Oq1IWvg&`6~smMC(ssrk4W7383UgwOy0w{JbzD-4gfS5JG2ky zIO}7N9h**iboZISSfp9g~(5+8+yhC!fD{&8!N zZGztuxXqb>vYj1_0l*ma^kfr3&SKANo7RnG!vW}9$~81vnon`x6Vo9q&i=kq!e7| z8!Mt$B56iuPznx3Sj2Bi!iEPry;82>i!fEX9?>d=Mo3fUN)utta&;g{Ms)vb*yJN( z$5Ig^eDNh#j;`60Cwvp$WNL1sPhz`lhNQMO@V*FyNVN!7yrbRWgf0A569o-M3eA&B z&+UcQn6UJEBhyB7Ql9L)JpcQ@@PWUSPR$4aSoV-dO7lr-a2Etj<%HtrI^Id71k1)C zuzaYP{dBk_3lPC^hUD2Ir!JNp!bCA`7 zFZwVz2$#2=oK8IN47l7+IaTf~PwbYVaSs!_z3{HV901M$k!J*;w;bLPIAAN#RmEWj zfp@*<+xeZrRZy)?5G2qmo*9p&FoHsFE{+IzSSc2%IuLxc0q0NnOxV3=SpIVeVxd_HSX*u(at^@?!)*dRaC@ofBOiK!mB6=ug%Uw%bCPCp zy4m^LMWj|`Zov8momQs=UhAb+^FS4z>WBh$NhPqvVV#Sj#7n?GhhIV}Llz`PQ`J%L zt38Y;;d?@@=2Uf=!YpVETZ*f!`=WBk!l4q96#;Cqt)`70&67Y`)UO5BZVEQy1uIVm!b+}q!O9krp#mb& z>x6()5mp7c-ll?*v@W#{>6UylgTKH3!FGNDz#E!Y_6T!4F8{>o*e(GUi^R)iVG^Li zG>6I&zx*ZI5P1;!;Lv1u@BnOs6JU0nI(*{;QU`bFzwYrpe7hG#BMhx{sw$Huv$0PM zQeF&j0Pwvz-+DV@fZ!~_JP-3^xsSo_?{mVB6z>k?Wgrg*`O94eR}kDj%$I_AB-z!3 zhm7(lmrMo$jD@Z%i(mQ&ANkC?|F!S@ikj87k0E*_wp&Dv9ft+J%H4QZ<8{d9mY~a+ z##Hij=g1^)M(^|zf@GVziP5(hWo>C*NP1~qZU7A!Rw7el7?CMWN=%MKkhw%cI)$|( zaU3Csqha!hlY2%-QqeS=WlLr*6<&RUmY&3xrgWQs7JT@`ZnzY^^urZnBoVbUWRE7m z_-zlkOYZZi^8a4Y;)!7`M_m^deKMF5ZkbA*g4f?$$A?t3PNbu66L^2TQcfiw*Lk1|?B#yKa-#Yk%Z+;NLdETE+=JFeJGIKk7 z%V^-kKrvkPxoziiox#G6ZKuq){}>?p4IT!MIoxxv@4!*HeksT&{Ww_k*59FiVVUnU z2Mz)rEMi!{Fr*&ePjJw{CI%5{jlKJDz#Rz(tRMW3zW+O1@{mr1z&OW~@g(NqngLGv zm8u^al8&b3E5zkCN^hkg%RHI+{u&N2uL1tYE|q1_CE8$+z;JXVzi@qCItozzi&sO! zry@xC(N+pOL?zW`s44;n;FrjZMn0sVj%bLEX=S0a746H4Y}iyfxFpkDN7=5C4zr|7 zcM|F{jO?ULD`ly>K@%Othi|)>SfOgdH}a!2XxpAbb{ZDf&Dj1$;L87flSEVjeP~ER zn#+Quld6kAG}0ywqy03W^8$7CBR}-sKiA3I#Xy66@gE6q%Tbz^MUkdzM`DvUT$|AI z&p-EU?Se+KMw6-tNJG4EfvzeT;JP>1Y_FPNp;xSE+wS2rx6f$`*yz5SPP=Agjr3$5 zqI5)GZ1dax7Qnr_%Y470?aXX&Mn69G=|0{jbV=`_9y9ro9|w(r-5O*ifNVYk4i^sr zv$_ywCzsAuhpP$)1AG$Mo-cT3KpO4wy95U0AH49f7k=j*@BG%UsJo<3lOD!Z0B=B$ zzYS6sR9iwN5Q61OU?GX40<6QN64TMw+zQmc6>Sim5cx4d5PTJC=Tuol0bC-8lkO$t z>G+5#&0Kf0yzL+0k})hmVsgo+=~Rf$=3mgNABh3V9aD-O?uo*((N7}mrbq1XN63iY z6;mDjSGcK#Hy57?-+-Z7s`ua#?PbFaM26ZufY*usU-8jeL9I*E8mFJFuVz=mSw6GA zv-aQoq4)lmEb-U&-2oufBrI6?P0_o}=!0ldm}#k1kof^e93Rnv_T3~hp+)za$z(c) zzKa0i%a0K0YX-pZ+jK{Fxupl)o%_!?M(T*n?9#;$+BJSa$MLKdE||Y|pBZxyXvcRe-~hwZ zfo>5vl+24nc~*gkhcXa2=(OnY9enhopZLr>zw_I^VmSlcl(bRnGmUN|u|g)0(2*s)P=d}uq7Fl5vC;iYV?kHL=SzWuFEF90F6dd7==_%Qb}?N$qrt=J;E|&nY?h8 zX40GFB;xa}vLq3_@shFfmpP^*XW*O6)?GB1bdR4IDG>PyOSYYz`n99yu#e2;-+tc@ z|5yC}CEv>>M{t=xTGRN#jEF4D904$6+SrEQGsZ!HxsCNA%K>@C72llcr0|QRtr^ED zojZ~yl2PmVlZEU;ESbCf;d6IfNOJJzp&PR{1xW{XNx!xL?ixLnSDr5bNuM_axo7Vn zk#7UCPrq~Teg**z%Hf|gwkrgD>p4LzQa+vd=nkJE#6ml}D}}Yv$Sp^V_Dq1E7~OEJ zyW#?6yE@2nhKN9t8u}o)&3y z@uEyD?(q40hx8>nza5-5Ysa_kX0Hx`Gq_6{iXSFBybte4e{}agxA2~%1Ns!7kM8OS zR|ZG!^)cjvt${w3PFb}*=Lp$)IO~%L?fUM3g=X&*d#n*1;vkWgL0(vrye}}33Y~+( zFMsTX-+jlof6H4mTiq7WfJyNqaS}SF@U2EBYrb5IJ2hKj%b(ItP;B*++L)L8aei6` zMt~QS3Bz0fV`HsFND_HAc~sQIUc;g>wX!kSa>-!1t#nbjHUWEpqQg#J%eTysm%16# zIH8c2b(c=G?W>Eke8`G3b>yR@NS_YT7o6EdT%@ z07*naR5v@2u+s9z&7~fXTL%u#n~oc@hCVdT`Xv0b^Yc{ilZQX~WAFR#*z;41nfY^3 z51|9nD(Plp?7^gzJbrH>9Noe3&)7o%mKfLf?%nf=xGl(4kyEZPMcjZ_;S?=#!3fwM z_F1*IFvkALdH8H@^E04i>j}_7fUUqekMcSzQ~0b3vV3Q7I6Lu+KeKOVcK6&M0X|m; z@;jic;DF&^kz07o{GJ)OD^Q+3vt#G^0Q9^6_fcdEadGw-8k0RhbY;-h!g^TAk+qK; z=eDFT6fp>V@)Mta`R(8KO>aTE{~M*K(Wg%SOdIxY6>cs`M~2G&IYB3EJdCPguZ*CS zxucfJ+)_xrUe~_1HnFn!^&WqV6FC5?|rOT!l6&Ye5nZfnWLux1t)Zgm!o%Ylhh#tn`j%bhZe zAes1E1vY*7hWp2y0r;>@4K~erbe8F^0$B32^U`#k&7Ixt#FRd|aaL9h?(Hw0JnlCF zkabQvx9&*i2|?6yCLTk1wJ!Xc!t%os0QcMhU36*%>n;Z(2cdk7)K`fKp|c3+b%bzh z;Fe+y4%+ppPyXu5-}0^B@MVaRLB~&3MnuF|_eq4P=?$C25QGqREEddFsfslcZcae{ zTlql%3nbT4mp0TkEMzU2#>outnhvvE$et|ghS12$pW;WeDKyw98nmUUB`-=Bwxvh` zM#dCo2tqspCIXZ8TOAv&2@Tp>HL^ee3f)-_QQs13YJGJGdR)&g&<=j~N86h#d^F*Js9GxBbMgvjSdv%9g;rKaS#8 zgXV`p?4bG`KRM|i(}eEa>u(OW(*VFiXK}wL=p)7*1kC%sfM*k&HE_4URe*O5)|~4B-aBLjmAxNs zD8A)zsbpiEPD={*B@1Ex7bgiZl@yW^SyFPRQI5}73^Kbhi_6`TSq$BcTA zlZ=1~=8*$D1s3`xG;$AJxi-?swVA~fFSa-(PUDZPrBk{g3|Z*i-z(J~4K#ztlP9MS zfBZ+^_uoSfHjnj#o1qv|D_z%*;0QIXfMx0k_mN<~K&fH7Ao0dU-?($<=-FqUedgZ% zdoF`_bbBe~S~lM>oMK0pVk2&kR_j)E?SZ$X^oP%}0`Mt3J8~Y*@dTa@+)n19Uk3%n z=S3Ylvi0Yz-Wi@**yTALQ@De|p?5Pd(pg!*(mMOLAF}SIY?pjTgc&`B@BMx|vmIaG z_a!9ifRGoBG}J@H6rG~Nw{9Qi*NGTB+Lm#RpD3eb$fNYPZ+-g3Uwip&Z~w+GlNWeq z3#jyA!d_e4sz$S>jSSJs2Sb@$$wx|@E>Rm*#HQxLPb!VHm%ul{ipoT>sYObx(ah3T zyNWb845MoD=K5b%Bs=Rxd0Q&UIC5elI^dF9VK^LMlo+WfWW-5##*;@Z%)px-*(Fnk zMUqF7P^BcV<71Fo5t^AsO3 zmZw*nRxr=y^PP?-4}apv-p7}Goa58^DW$5ilxmAIeuzm9hLT+_G?%=B>K0jTpF{ zSCqw9hM&EA=rh6TsJc!A-Q#=DKQ_>QpiJktBl`$%W?h!+(qEiDRz4cq*^fCGv?HGb zw^Qm<5A<#yb1=x=1Li`!(1SnE2Mi82(q3KpPJ#!8K2nT>;dN!8Ubh<3`^a+k{2m6< zO!BZ0`s7;`&?gg_09D06@Y1J#?Xz!t`!_HM5Ri)pGuBEU_DqnaqY3b)!@<{~fyJ+k(=SP%VJBgy8-c>VM72U=WUu zq!>sp5=zFET*#%3HQ|IevK1w?GEEr5GqCc9W)oH_2?xG7Mgv*d6dsSD%&h6isC-}~ zhA`A2HlSw=jUgSIo&_`>7V$~ zzZgm`5-6r_RlK?8?WpOTag~Z3boR6_yJIGB^8T4!#hbP!oNkZ-;4V0`sv#h8kFTJV zek>8PX!Y;rVod`n(^XTX!?-`>1fv2k7L+ zY5I0xwgIjtS~BVb|2mMgBeOKmTZVLB?=(1BsnLgg=;*f3qvL0yn>q+gdprlwRSp6M z2MR{XJSSiwOxsudiLwqtzRE0N9pdW5*7f2if9pTz<}cs5&cepMaoN;S zoU_u6>zCAVrDKx;Y!Z>!EQQ7&MFY_aTSyd?M}>jQ6@SN6ZPDYJ#1$rROU~jnuEsD* zJ8a}(cf@tXjxAwIN@O_qn z=-G(FPfkDv*(9RTvinaK3gy4V3gB-ianV4DoVb2T6l91TD~A1jW_`&bFS1B-L+|W_ zj(_T2|I;tM_)E^%{#S8@B1WG#Yzf*Um1aTPv9x9tw}pYB#nXV`G{_*`3MMtm2mS8e zyPNm!clceWt*Y`#za$v1ze@M2Sq>`B#A=Eoc6upKwgCFVPM8@MBi+ZR!)3Nz%DPIh zlW9bJ0j*C9azvW#03!xl2KVaa7nkjU^qd{A$Kj(NcUivlX+JxzCi%-j20OPMnU95} z9Xpddpt#jgj&CAXUYGoK{@9(t!7_N4!8;MGwdoyhX|1y(;%c6IBe7k{0*1mF0U zIwWf6QitJF^6^&7sHDkeQtRw5PbpVJGP@{KDsv764aJQl@g&CF0LUN=R3B#`hOE9Y_*j0OOb=cl;GB_PrUHrXW#y9Z~HQxql@B+q-Y!Z#x%fQOiU_3)z=37QPeaJ@d9lv zm0N-+^3o>Il=YYPMME9=Qm1e#h^VQt5e(x}Al?vL8ha=hn95sJ=mXmLhQFNPa8h}0 z*juI$aZ!2H%4}HnTI%3-7p0BPNS=b!2*?)wF0K>otgf@;8tCjPo#pG=pjKH&O12GH zpe*sVqV#@*Go76d?FQcEW@J_YfXgd>r{kPipYKwq^Z(@kEUt5YN$1qRa#gTgH4w;? z@<@0QX~wd%F>LUW=GQ3uGhcFvli%3C6&OoA*u8y+U&j%Xat&UpJ^C_f^kUwRg@z(c zC`zJd>54GU)}EOs0X_JW!H%36Jn1f{?OZ-7XopItazKes>1w|E>kLg^K9~Fs02-d9 zIy}<&^3M^s0GOQ-*L(jt*h?8(i^2_dSZ8q!&Wl38=*FxNd^pI#s+}LR(CJx#Jn%Bd zUHMBx^3F=dRfH=5&kdBfK4ALdr+)RbpZNHvUjEj1@ZeBL!(KnCl|*m4>IOT9*ZYdE!Ae2FLB zXw2#I1=2{OBAmI_5HLDrsL2()5#iqkXh-!Dibk*w>`s*yQr4V-$A71D(C{1-npHeJF3y`!2_w<`X z4+51&9Ym3rNNqN>X)*;%8aa}03_BZDmq9A}N*#KB8HgnZGd^7-Grzud#o!F>kA(WP zUtY&`MyG?@u^7p)%($ID3hDIv!Igv01h|`Z6>!YJ;r)MZ#ib}X!zC=va4@k0&p{vZ z9DLGIZI;gJ=<-l89U8kFP<#Z~SYdW-amr($CswfKvhDcR;OhMHQb(>fQa)BM$kFZ> zKk?%4ebd{&=}jb4j0(|1(+U7buAoS7Vx@7Y%KR_LL^DWB5@?f7LaG2d#57icD+B>^ zNrsSe*r@%#I*+rPB4)5~32m#$HQR%hL?vl-nP!%S+9Ih+dyS&npwyHj=w_1NcSa19 zUc4c8C9l()S9y@bDNV?S1-cOdKwfhbLO3RtM;|xr(FWzX=}z4Tcbw^6=Ihf%r`qUt zmUoX&d-Ls`i-)hh^74=V$PfLcndPBRJ>%^x7~)|&BV(j{eEVc#_tOUR{^?7NXq`k= zbPF06U;t_U5W{aPNW<(_i=9vvGPfD7SRDRX<6=Sy_TZpyTy8)WO zL}!w*Q9&yp;}5?1z6Ho3A7JYz2Yct|%-THOyL%?UWj5B)`8*$x&bs5frND1<3-N?| z|IYx!|IoP_@CiWaT>d+VJb0F`|M)qvtSDS5@I@fL9q3YD9+&V}mnRv*oVg7S6ci}B z3Uj;Ay9f>d!hCA*P&u3*7~D1}k21HTb2iaIgg7!Cr25T5o3WkRcMSe!XTrfp{21TCLt>Jk%);JMmiykDGX)yeoT~SX4q&`B3LN4NrQAFBV~yb zC0RkI#slhHKs8pOvTRv{2@!dbxNJc~8%K}0x-+O;Qn`A8>J z8EpMEt{?tufAuezwfWW^3rp z;FGJVD(Xm#7d1^W1Ii%8WO;mehfm?(y+_9}j4*ZIluQ4^@W8jyBd-d|I&cQRE|mlA zMGFp}IpP5%2Aj;t_{j9S5AR?~o1$ZJF2IXEJ|yIFe%+II+3k#PC(P|e6#J~edOpCd zfayG`hc^3h?*F4$ee(IRj~@_m=D$2=?|1nj#r~E}I z&rXb8c4jiGqXpwd2Pnt{@uWT0KR=!QJ$rmU-U0I~uYBQO{M3)V@4XHS;2Z#A5xSk3 zxjK+rf|k}%xiAb0xD{jC79z+XwS!60dlJk`)$ud!Fhh1_l`oni&y+C!q1X~R2-KY7 zqEw;?2r<;y%)eenh7N>ApZb@84(qL%rHj7s=I0*tK_Hge?xz{0_@&++%z2MpL3ZMN z#FNghJUgB3sQ&VUAnvxPTJazig`9|$dVvw0 zv@n+vQn>bIj~)r3O;H!WBI24jM?Y9v*=&&cU3vKd$sx6^VyQ7s(8lt4r7}tj&M{$# zh!CIcTOsLeLNy^AQE$3`A;Z@;X4APSqSQbKF}PR;Qqxh~=kZCV(?hB;wFZ?fPhrI| z+R@SZJE#4g!bcBJ{^I2Eqc8mU-};fi{41Y+@srB1^D_pFJx&@~sJYu5TyQS)eRQ|`a|aJs0Cu$g<{(_~sAqi#AhUG_0nO6$d>{lp$ykp)~;L)UF7+{eUQgPk5~yY-En1ybK7bxr1Au{MaXd z@5N94`pe()4xS=xEumJg={s$;Qj-Nei6AS%39>1Ww&%1}+jTPJ1(>GuDabk$3X>HV ziP2lIz7EeMR3*#kFz5e`EcpoBBvpJVi(YABL)3#wc~;SiT2~z|W%68S;27hBNf~Tt z0Mpwg<}WV3_9S*kT3wys>{>tvqJL!Qp(*Lm5=(-{ z+DbXwt|X0u%A2bS0N0O82Ds%NCsp`EcEqyURfvMb*EG4uBKTvG21uj4&=tR6s*a5~ z$n+NAVGF<`v!3F!r1ot-+=_fU5u)_J%YE_mk_-fH0UQ_<&W@GXC;03*F{P^o-X*Z} zdw_^w4hz{ru$pn82|bH|(3zFHKw2H;r{{N6Xe<85!$xq##3 zTy1|^l7C_*kObqk*w%#rd`sI77SGxuO%vJX+wOPG6mkp0)d@K=StbP<4W?w3Ohus$ z9hU&YW{TB>ii8_-pr&M!xn#B>6$%YgR*F|pu5Ga}@Za(o!d}Ko2UgX?sCY1d9S@nw z6I*m2!Og*)eGv-PS+Of78(DQ%RoZw1*ICTsbo?CZ@j31+@gv`R`gHuypPW4Y;`@L4 zCx2{tRB;Y1+J}+|(mV@f@8J}{^B9tarJNADEC|_Nk z+k1MqxX6JlVx)GciEW-ucwUe{XSGdgh@nZ4k%BQ!(1?{&dn{|xLpG`t;qI(1BL~Rg zo1T9L+CE)pW3&GIPJj>P^xQyvW_M>;{E>aQWrNlk-LC+}Li{UEm>ti-%T>cQ5A*oF z06W|2&~`>USY~Dp0qxwZ8XR!rgiJ1~0N2iFC$7^RpgiH{MXm6U)3VL5gWqN~vQ`V$ zU-ZJ8Ee z5=BKvemE9+>}!q1QsJ6Tyol{=hT)Se1Bo#qWI-m=a%i+YtoPt+pk}*-_l{a)E8PN$ zpFh=WlM(+krJWs+PT-<5^Z^q+r}M6KJc?Y^W(qz=}*6; zhL&KY62*FesmB&0C-WHqSOwHAQW?A>mV-gk@c~gsQ%8yswxM*ETvA#k!;xAMZU9b5 z!z&=L@hIFG1b{gJsK5_|M3GhN9~qS_*(57-hOR;1#FL9!Xf1bnW9qGguX^tAz!!nE z-Hv<4tv@@oX+Qh{A_st`+o|moyahPk;Z{r@=5< zWe?_=B#fd(8$0?nnE1+E7?ilIHM-WgpiT4kYddfNl(aI zkG>rkFgl_^#?TX2k89mdF%oKtL6Zng+Zcr@WCX$5LP;{4Qi1= zGRdTLQ%~;eEA1JxHaZQk4Zv{g`RAX17Mjtoh*2OiX$A|O=iZqhq57=2_}%pAz-11Y z9(--#;19j^jR$9RWFP1CM>?+k5XhYNZ=I9bJO_gM9$|TPn58mqG?bCroUIE@R z^ohl|1ZU<}q8||n)>$4tI11$rDWinjm z!z8Y-7!1N+9dRm6@=yK8Kk!X7kO_9*$kx2HZRiZ@ONg1|tRVu~Mx0@^*V5i#v_5k( zkl64pu_x#UU#X3+3 zv(p)?H%opJ+N0Gr*`wntoZRmN=T3pQ_8c7C!<&zs1J5q}&*RCgHXKAUKVQys*;2!_s1pKCu?F0|rPX`>Rp0m`prVws`UsMumU*|}<4 z0y;d9q7l?ouZBSfYIb0nJ|Kcxv@aG(`C9GTq0CpK{1w0GTuylGPSpAVS;8^6WuXGB?W49Rqj`1}ET!3D~ zMEhW1QD!h)Qi~B8lD!Mx&e#UXa3f??N8Fgopwca!9;r=1=dvg6)?FS1Z~$O{vN4WL zBNL~rqKl*4-q((Oi3L6#P-x4V_7U3-zvtcG@%&w8Xnb(+;4Z%tc#8&a=bHlO)So=< z1y}VgJnNM~hpU~wpAbVX>cF^i0oH@UTNc8Jmr<$@?^qk@{Lq`GZY!6W*R&lom6t&! zou`Fr@el0CI!+t4N4a?i0LybL5GQyzSbbgQ+fcHqz^+9Tyf%YVpr12$Tafbx+nzeK zCx@9Gyu>r{WQE|tq5gIt;_cB}FMaY?KKIh6e*O2}_V%xTBjBz;p|Fx#QR|9qL0+~d zZ(9$P;xm@d{$FP4ib>8%kU#{~1c9VPTM%yjNE8zDkoru3aDRi&#=~tw4=$pBtRcdH zWbzF}39zLbMM;R-^MH#CqZd+n?jW6A0AUKleK#J#rQ`DF;hp#9NqcyQwiKE)3GDMr zyYywx`ObMQ|McEl;VPfs2?^Z#!j{NM-v$*=y}uR_;@lc+@z#jpo4IymZDPGT+e ze=d|-KnynRAnLd`vo{^X#S_6&fe3RXa|!G4i`N&)?j`6WFa;3aG@|6C9cCls86c_* z-8(9lP|3B>ttKx9WdI1hmxdOGbVM(K6G;`o?iA2DeKIi3)nz)Jz&HM=IGmW(6CH%ta_Knc zUG^XIk>k4$o=L~eNI)mD6Z-8xnnz}4JF?4ix)aX~aV~%!Ukaibvjlfb;%@}_9D(No ziqGDRO7_uY;0zY&;Bc&`0kf@O8zL`7?W%yd`~R+5gzH7&RsaAX07*naRL@F;yN1l_ z*kGADuuvwq1=wmQw_;rlc#!NW2s36NlSeyf({ghS?fM~-8#BHtrS+Nw(%@vvP*@D1 z6m>9hye4&wA08^IJuT9tq0nh^Mi^`_3{HJ}sF2R34Zn(_XGx*|^McM9hkO^TN0rP_ z$UyL!fAO3D^dG8Wis1l{@sDHhDJFeZ}^Jhmk>cG4TL=l+8S z_nv?5x#xCz#*DH}xko0>+OSEC{-@FmDtvjkzHu2C1D<*I4R;ToJ2-g$jc>lsV9On` zlk-c!HPaPr0yA`ZBGU)LY)-qSfA{NbWHdMZZvS&IXy3E&*l8mm zXx?7TjE%9*g`sYzhcDYW>5@+Gv_GSa2Awm5B^>)4UCR!Tfh0@7&>nFQ7>sh#G1i5= zhG1}O@r=!A3}4PH{PN;NcjeZZcb7jv>ASa%Pso$D`r z{5P`K*IP#;u_8x}6=G99t;FZ_DS^M?B}y zrwFCT)(i@6SDgLp2jLDF4gwAy`pFsJ0ZW?r4gWa+9r4`)M)KIJYE|5N$Aqw#%z@_YZ#+(F0^9Qf*F)^Xd1eKO@h9bGM8TGzqBMZoy1y)4^u zy9Nvw833HoE;3Ho5ml=EC`r>CzAi}|1i~BI3JrQTyklTtpj3eGQxjHIGQP7Xk*N33(*bWxZGGu4j zpF&YSXJ7Fco|S^KY^UJ0vs;At1DMYtu*IOQSm`Fz8*KQTpyDPvt4}Y2vl;ROh&bH} zS&m}X$5HU2R3`)9o%5(CQlQrk`D&BrBHnWJ;L#VLywj2T3qB7fLHo!5#2@=wws&+w zxY}WD3o9sZg`~%3V49Z!97aP9|FbNhqXq)rV2zUUKr)HI#JR2D>T1wQfMDU4i{h_H zP|?t?$xZFCN57}>DO{5>)L1F3eHd}^B^|yqn3c=lHj_CLJbL)*E8Mq#^yyFilmD|K zyh@cT(p#VCxVC+wEJzF0uuFvrdd>i7-r0_XBr+;SdFtPo?;J7P;RSC2a#nTBp|%do zGTm}1Q*vkF3;-Gipm60VSYK$bDG$Np&(IXI(L`>PLySCSYO0Qtb%gBX3#NXK*#YpO z(EI#~@21hRs5xNF$`9 z@=Zc!Z{Dg7O=fB3urg79XM9EX`GEWa5jdY4aDEW34GMJC;sIgK1Hk!(WCx+b71sP^d7e}AK&`G-}%Mgpba>9T>r6u|BrqR zn*>5TaOQ6dq?yx^EiZosvb{*3rEN0(myUXx&I(H>cMGA^bWS=b2x~tto7`qzW8!tR zOB%V*$=PGVZ~ey0 zFWXuDr}He9b>n|Brd?5V0Jn7HZL3X%L`eD4h@~iAAzN}l%A?@n5sN-Zq>4}F2vaUV zhh~qvx+F^#L}#iZGL=)E#7Pua0hJD4mNW7lZg8N6$z2WM< z4S-LkdtPwi-{Z%xG9WyU8L#zcE0tLSVq)N8XXc zAOxLXNb**14<>!gnjcc-0MVe+8G^2Pa-Fn;A(F1n4?g&J|M!2U>#r{R^3%WbeSh?; z>9_Q!cI2$xZwv$!bUqAgV@j2CRB&)`#;?65=dqy}Wb_#W+J`x=+%-flRBeemBmc#^ zy=V|E1sw;z(5FpEOCf?@ZG+4(Q6Jnkd-CLjPi@(B`2juFu>b5gKl@o}6NXp0zWO@w zAQ7Tgie^WfHb_12fSP;ZuuHSj1;oslr18$|8aQeaOQ&2z;K=Zq0T+Hz1p4Z*jZ?i1 zF@SnJJm3dA{6tq})Uf3CJE1(3-R{I+R#96YiaiL>c7sk;W+fs;;e}ghQ_0i54zZKB zn5kTaECJFiLnjT215H*+6C}OiC#4S0tZJ@2Frv|M=!(Hrng)vc8nA?|*hXogX(^1T z2e*%(dBffN_n*CkAGu?2cFElYo)bFdtl$y7`-&eHJ!K_)cJ=t-?HnXJ-fM4u`G<~$ z9Gu27{F;}I+Le?-*Y5B&D4Uf4H)_ee3-{`E&m)0}K91 zr7<7=+u!$ZehtGx`!KqI=VF&mhzY5;TrTF!K)YI>%s4)!pbS#kI;6wz80{TkBF@zW zWXh7-hLNCJ+9Pe~!U-p%uM669?(EUwFJAu4BM*oO3WGfvC%+MZHP(TmX$%EQsw%Q+ ziN#sQMav4Yw2`A#5wBUa0y~`luyg4dlGq&8%Hp4NFxd7|&P4b*w#L{w$sb9stZDaf zMJ3I;{cy<=5t%U$qY|TIY|?;QZalmW6H%%45JW}^n;jr%jJ)kZFdH^L;SF4$hSahU zya3mi5a$O*;Be;lX9DIy-Ek{z0)8m^sX?HOhBn~kvZ{R6eW*N=ShL(fP8sx6(4>_l&^8#SS_cm-|pNyk(d*H~{ffcof zpq*IUcK9|Whm1NNyYUtBz5C(d@9jxf3RZ)UN-!WXfL~mkK;}WJYwCGW3f&+0sbBmJ zaJn9ocMnUc_uu;7f8%S?obB1zXAOI?Jm%9hh;JRR5>m2hgB1FJe`y-pIdGAYL(F22 z_UzS`dwu=rwL`ZKL)-eOAZSCOUxCwE$dZOsUF41B6>bPV@m{)!O~ue>TYyBdS{FaB zv_hSM`L3>-3XX2eJ+d8Gy1Yn%wM&n!lDhF&c11u8uQbi}&%!JlTDFJ^oVwssV%?^O zIt==E_?CZTPDa69pOS_!(vsHYj>9YhE;t5p5sJ!g9V|b&;TRp^>P7srQ;78;uW8x@ zQ{m+$X8lI<6aHX&az(DYUZ2F<>Als@>$-CU9PG@A&yQzUkR#E}x?ath9Is z`}Fk583O`ahDY2ze027REdwhAp7g!AI(h9ORd;cHP6J`V!yQK7;;SQ_(d`J%rgqi@ z>~Vy(^Vr#}l+K{y>HN&V!rJ+pzohfHYK~)&y=1u>QI4w)Cp0_1yx#7!qxk2FU_BPR zbzTN79qf69&nuYrQ)vd6X#8di?gAaBxXy$Y5-W9>_bIw@a{}UhhP4#Q*`ivTepzDY;0ETDnq$u~Fd7gKr z7^ojSIDByL*`qJK_QkXNcc10sPxlY`MH=ph^Lz1j2pfP63_gRiC66ULyd>YtG%(7W zU>(>_;LW|O)R8s~9in36lAw5k^$|VLM=ddhkLJ`BslY>BQdbKOCR!=Ex1QS!fTxiI z)SlQYL9*g9L)z{wliMMK_{bTp=2L!w+RvatKN*V$D;&Ik%RXt;rbO)nle9&Y&M@&# zmbg-iv9&jo#P3;;~Nd0H3k9 z;Tuh-j~Eml`<=Ekh6wu7>DB3@$GH5?^^@~6YK&QwS<}NZE4tf)el5u@!+MTChi`Nw z3!0O5XHPnA-ebsML1#pcOL4ki<{5su?b+k|_aEFjdii%B`V2g8Yw~+-T|T1B>dpVO1sk%;tm#z0l~2|lH$m`P zl1W%#U)SV$fh1U5#KsZoN9hK%+iW80>q zW_Xa%n8^fB+999VrT%_2ABGl#nZz3^kmL&M!sL32X)stuaz_H*!>7U0bQzRomhKuy zH712PgK=fdcXq?Wcd;Kg?gp9AjRKucEef9 z+zuJ;o@n#}ez^5ngZqcO_fJ$5LFae?jOF9&kC&I1%o2Fy_6IL^|8PKHL+R(sm#;rr zM!dZ;2=E>ko$r#T_p(lRO3jruBPAWp84WvNxaD3D5ALum=!}4lK_|46+2LGo`)IG* zd%j@g3sLEqG!#apT$L>we<#6?Z2{-!%+Y1zw-dq%A8Gh<=K?zaSc;0vfE9g~2iAng zGQDB(=h=bCj=r-Umn_~j$Xy4n+RhAYw7frttvuF@4f3vk?A(Ikvl~7sdGq1n^5g~> zSNZ4Lhi9H|cP94u>GJseiG9oak57-E*>}392>7X1${*t8e_#I1rs32z>yU0P-(m0tpKHm3UI1Cb6$T1^Z<{8$C^`yhL$R%4DG zl~Y%wuX0b$lm|K35*Yhl+D-~*@bofoc8>C!c9VaE!kq$_A`UJZ z1U@qzRQM2*cJp4vC!Poe%ew{-JRW}c`9E6mf!WsW{qsGY{rTg={p0PYzy9V2C7vo;gP1tsvHPd#ArqFM3@_Mg$dH}A8TN`^Sj()6oGq|lHSJeBI;e#o9{4;mm^uxh zq`gbJI>1e|juaZ>?BumRRUwxa@SS6l<3EK;nM|RCCG0vGMeuIfC?>*s9OdPci6rg7 z!3Qh7o5Hn|&7tKVDfpBN)-Qgv4px^^`WZXq_8K(ijk0Fe2<;jN8Bi>vSUCc!D{y(# zYvp;ySZnCykFIO%8WJ84g@%inLkEP*2ljEOus5G0M9=%{>&y3V|NPfSy%`sJ2btvq zdv5;3`;WJ8Ji7e#>zAJ|-@at61d(4B|H%xQwe#DBizOYIC-bOv5b0Feh|3zCr8ZY` z-jR8KWo^w1VfD)agS!gc(t{8ibLHcjZ@zsxdlcYVNz0QZ05oN3;aZ>BhqI2X@mc5d z8*Ip1u|Ds>i$-re>FX{tONDlD_93G8-gnh`tI{j`11prvjZ=A-;;hwgp>Zqe!7DnG zfX7VZ830(%^NX@P+YY1qwsvx_bX177^Lr@OnWM7^ee)~#`m|yxmsGHB$;Vk-zR4qP zBWuT04+QhYGCrZ@)r2DCmIWRo5`q^NWeI~lj3J4mJ`K@^MzdTBA-tK8fN7>7>^6h+ zeVeKZB5pPbnZw;#N%im5x+yu&;6SGO9BRwKwq=7Yhv_Nb*qfP!7uV{yKw~E2p5Zxo zp}1V;&Bg8xm*L8Y2*TCbijR~;Htsaot1k= zHG#6rosrmF3!t6goh#E{fB*HAsfqwFFQmAK?lIJRoNJhw<%Kc4rWzg|pJ~+3_cSgH zA~3+BS4-*K+|T8%gM))#rV0K~1Y}=4DW*8<{yUr{GzhSEfkmr1ZTXyzs{> zpKnj}{~zyPzrCm;{=C1_AyMFte&}f{iB{!4{(ZM<8&@asX8Sv zV(}k=TyWla2ZVd^P`w&n=O-~$<;hNE1Kiq^cjEz_dbTEc5J&^P%qPo(c5G0$fpaz? z@ix+FbI|2I@X66mTanKVR4_~;R0YgJzP;Z$GTuBrGgA5*uZ1vp>P%UL;y|xK?B~$7 zFjj;>=cMutuvvb{=jp;FBZ`2GDd~euy`YBqDEnLoaU$Aas1#-X=06Le0dOl2ndT0U z^;PRfn6&d}!As#3pt1Xk|Cj*`;xC1-umx@r^Uo8RhUf<=z7}#&p(QSjxDTH=o#$*z zivH*`hDaSNuQ-Q|%`UcjqH63XO|?7QCEqJdZ&89=K`q0iB(HF7ss4Rv3iPK^gPS6M#FheXfjIEUqhPoV zXD2mRlMsPHo8^rEq7yQhaF*9RSk4gB6a^tI&s)E33kMVYkzP3y1nQKXcphzOcJzB# zw#uUuTVd8GH>Kd%oQZH+nm5vD%DB2kLNhbLL6klck?pn+l zf%UN2mJb_5AjN-P5#m-_I@UOhylQEj>Ew2NY`pMr2LlrWm3}#3+NZhlbLFJbne1q9 zHhUyItFDf8SO~G3s`hM>Z;VahG!g5QQ6Bl^tjls6T2C}Yi>SCk8cgVhsO5ftR0FewfZYtBZ~l^rZ@;kB-|MU7+5qs<Goa5#qr>!u9NkDLQfD?o!F z<#&9ZX(4qO*T(pCg|Ylm1D!(pMX&iW z&u0SizIP4cXpgf~X&LkCJFoWX`D#&-f5Yuv3O&-|GfzA0+(RbML4^&td&^=N$8DY~ zz&2+{uFWHYG6sPBwOt83lxr7%WhtSu*4T4RS0wuyG1FKkTSfMz!6eNv7~7?+rKvka zi=_}LSt4aib-9Y%EUA1&Nyc8}rY_$V%J;s!uj}TUDc$cozu)toXFcyZ|8vgsJoEdF z(VR3a4&1jf>IwiyUF z?l4WKie9N?UvK5uJLC{yJsC1WK^>RsY_E>pb*7qE$jF*Ot2BF^wMValCt(YTRwn0L z@qk0uCZg7}ZLf;!RjpWWwxd=fG{qFp30dkx%Z)8k(XU;dM2xR$i&krLd5e{W_}iuM z8SOIxzklJH#u-g3CNVgnSC zvxcqCX9R<06n`1G*i6AhGp@dC;yx?M5%D3`sM)~L;f>SEQ=aMTP(P1K^P|M^&oISz zsD;)J1P{^?h1(Om?MFLZ!qd!JRI+wwODH?)3vgTaJbkPw7`$eqdjL&o=lC4-&Xz6Jg8A$N1S1iT3QkKC@$+_YI5jDyi9i9?Sk^o$m6%iABgK3Z;XhmebRxZm`D_rbJ|-J#}26T`DRWO z8id(oiX7(GR0W+Q)qBRCc(L~LXfI@2O zO1|)ZVcjvowMDqYG@sfyi`aiFy#6hr@sdZwWOU5fHMilRYkZspQ)47 zwGsEeWToHZvxkisT3gy0YOn>Ay}>P4?hYDx7+Rw1pQc*+P~9Svqv~~=yv44MmrD1l zduP0N+U8{1doK6ZYE3k`r`?#S`Rb3U>ogNvrl=xO#PZ`B?5wb}) zxed5=GKA%Q6!Lk8{E5A40qOc&(^jY(F^Ub>Qm-i15KcaRPw?bCF zxcSjl_7t|1<+P)hlk?pp{2l+KxA2L!Iq4eVHF=VE4h}icJ09 z4(8oe_ zd42N>woSTQk8jrL=1i*IBpae}5ARyjl_D46)H?M;<+?P91*&T>2%*~56v2F8Dq7A)9uW{XKeA!>T`GY)Kt@{Jl zk7cLam0HwBg*w*?Iy+r(RLsVEoA*B1DHWR6a{3S8R7hja_H)|~lt>*S6?~q0VBWto zc)Vg)nPEEDSQT~DM^0`g!}ecyJ5uh_tMg0v*Z6ANi1c!H3zqV#?^>x|@QB#BiWpdq zj=}!aV85*<{2-&_dPd`>cXbkno}L<-;fcfEJ;Wzv?vD;gB@5Qo;{%_hn^LrPJS&Lz zQKiRa_LSmQcOFyjuUgY@Az^vm^j2$vf0&q>wk|ZQ}8K`GeW8^#X$Oq(5ro}X!Hxz z#Ts!ct}zW&F)Q^*a2z+r9+C}!gg3Ip6=V0suz_`MuvicRi2>dOGO!A2xZ#L?fd>GN zbpQZOSlsuw$z0&z8nBoWsMa1tU*Zl5nGyg%y~YGGl?bc_YlvhV#fRYS3-CZ)I5+E{ zfc*pyBCr~4V#!2bPYa4C5#WPb=AdeBR(=HkAR-{LSOC$3K;A>7`cZsA(Wp5&d)($; zX-Nt20mmpoUI%=MRO*}@>jMN&Z(lD+E_q%NYsjwsgdlRDxpyD{+6G{#RAM0B$Bz;a zh$93N08X&alHv<~cL=ONWH|Q(fGseGjQy_!t%PXnJY)Kdii(=mgGUWvjtJLfwrT}D z@HOG!Gy_3+t|ZJkU=A?AiV)mbGN=p=K!`#Fxep?!44%$tF)_Gm0CVU~bF|<*akyiN zl~6x|A+iiIVllA++u^1m%%MPmNMfEXeU|N^^Q#9*U}~l%oKLhhp*7(th}}kT+Yng_ zHO+j0_DkZ60zB)cTSzW&8fyNhe$=-v*2hbMy23aeY5niwg4IahCfZ|2UTQD z-U#1CV1nfUvT$Vyrdi+sn%Q6!IIsyGG=%wA4NaN~o0+Ihxy7y?t@s z)WEq!f;yMR<6;vv<`)8@Fkf&w_{~8KQ~L*5*)IXYxNQ3q&L`OP5l1oS*tB!nET_2s zf&GNgW!TRN+ieJQ#N-WddkI6*d@+b$PJ;F>hz#eRz(TAu6^fh=tb`((ElC(?TV)!I zk7j3Qm+cItle@UDzwE%qaM6M@r5n6hI%BcU%SIE5TrgY~vJR?4Widf#K154HbT-n2 zDJr{Ih3I#of~P!uUd`r?N%A?sJ5u-)A4^oeOi|>ZoVz6i5JIFqp$n08Fo6tSN}w|j zBG#$8Y;d{er7nOAH~+?%f=dyI)ny9qIxwpKw;|V^RUOrz)NFi)R-w81zCUVN;4a_> zC7urvym(UoUzl=y1E$MPf9ReA(c)B^@A>P=)E7~#d{F`lSa$la54}^{-QJDQ+4>@% zw`p@VOJ6M3dD#()AhlS?UnbAjkU56%00IQl&Ga9kS;7j<@7gvbKTPwr-TfJpzQ=V+ zx1o#h&1fQqF4^#bPb{+U*YDZzxmsVvQyobr=iW`fs`cjY`DPu}VW)sUIygtjK?d-{ z9qVCk2=lLA);2h1?OaRJ+t{eTW!VTvVV zh6R?8vdhk%qS)%R_LXi%DSf1UY51bI-;5;!jo}wMGYxd)*kF}CI9S*>3q|%)RzkI4 zpCQC7#PU{$cHSey<{4Wp*5t*N7lQB_k>`P=qh8!MmrADM4@tN;K2 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/Content/M_Infrared.uasset b/wrappers/unrealengine4/Content/M_Infrared.uasset new file mode 100755 index 0000000000000000000000000000000000000000..374953331aef4a22bbb592e3fb2fae709dbc3925 GIT binary patch literal 93332 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%0A@>jjUkO`^UgfLtPf(js3M$q$0$ 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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/Content/T_Depth.uasset b/wrappers/unrealengine4/Content/T_Depth.uasset new file mode 100755 index 0000000000000000000000000000000000000000..ee38899b2ca389934f9e505283a116d693c34c7b GIT binary patch literal 3584 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 b1?$2%ocfylz0N_2A-h8#Gr>*t{~G--jabeK literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/LICENSE b/wrappers/unrealengine4/LICENSE new file mode 100755 index 0000000000..1cdf4d7357 --- /dev/null +++ b/wrappers/unrealengine4/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Intel Corporation + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this project except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/wrappers/unrealengine4/Plugins/RealSense/RealSense.uplugin b/wrappers/unrealengine4/Plugins/RealSense/RealSense.uplugin new file mode 100755 index 0000000000..d462c26752 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/RealSense.uplugin @@ -0,0 +1,28 @@ +{ + "FileVersion" : 3, + "Version" : 1, + "VersionName" : "0.0.1", + "FriendlyName" : "RealSense Plugin (alpha)", + "Description" : "", + "CreatedBy" : "", + "CreatedByURL" : "", + "DocsURL" : "", + "Category" : "Input Devices", + "CanContainContent" : true, + "Modules" : + [ + { + "Name" : "RealSense", + "Type": "Runtime", + "LoadingPhase" : "PostConfigInit", + "WhitelistPlatforms" : [ "Win64" ] + } + ], + "Plugins": + [ + { + "Name": "RuntimeMeshComponent", + "Enabled": true + } + ] +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Resources/Icon128.png b/wrappers/unrealengine4/Plugins/RealSense/Resources/Icon128.png new file mode 100755 index 0000000000000000000000000000000000000000..ff0e264b880336e479a604bf1602022483e6c2c0 GIT binary patch literal 7121 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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/ColorMap.inl b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/ColorMap.inl new file mode 100755 index 0000000000..1557ce26d6 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/ColorMap.inl @@ -0,0 +1,212 @@ +#pragma once + +namespace rs2_utils { + +template inline T clamp_val(T val, const T& min, const T& max) { return std::min(std::max(val, min), max); } + +struct float3 { float x, y, z; float & operator [] (int i) { return (&x)[i]; } }; +inline float3 operator + (const float3 & a, const float3 & b) { return{ a.x + b.x, a.y + b.y, a.z + b.z }; } +inline float3 operator * (const float3 & a, float b) { return{ a.x*b, a.y*b, a.z*b }; } + +class color_map +{ +public: + color_map(std::map map, int steps = 4000) : _map(map) + { + initialize(steps); + } + + color_map(const std::vector& values, int steps = 4000) + { + for (size_t i = 0; i < values.size(); i++) + { + _map[(float)i / (values.size() - 1)] = values[i]; + } + initialize(steps); + } + + color_map() {} + + inline float3 get(float value) const + { + if (_max == _min) return *_data; + auto t = (value - _min) / (_max - _min); + t = clamp_val(t, 0.f, 1.f); + return _data[(int)(t * (_size - 1))]; + } + + float min_key() const { return _min; } + float max_key() const { return _max; } + +private: + inline float3 lerp(const float3& a, const float3& b, float t) const + { + return b * t + a * (1 - t); + } + + float3 calc(float value) const + { + if (_map.size() == 0) return{ value, value, value }; + if (_map.find(value) != _map.end()) return _map.at(value); + + if (value < _map.begin()->first) return _map.begin()->second; + if (value > _map.rbegin()->first) return _map.rbegin()->second; + + auto lower = _map.lower_bound(value) == _map.begin() ? _map.begin() : --(_map.lower_bound(value)); + auto upper = _map.upper_bound(value); + + auto t = (value - lower->first) / (upper->first - lower->first); + auto c1 = lower->second; + auto c2 = upper->second; + return lerp(c1, c2, t); + } + + void initialize(int steps) + { + if (_map.size() == 0) return; + + _min = _map.begin()->first; + _max = _map.rbegin()->first; + + _cache.resize(steps + 1); + for (int i = 0; i <= steps; i++) + { + auto t = (float)i / steps; + auto x = _min + t*(_max - _min); + _cache[i] = calc(x); + } + + _size = _cache.size(); + _data = _cache.data(); + } + + std::map _map; + std::vector _cache; + float _min, _max; + size_t _size; float3* _data; +}; + +static color_map jet{ { + { 0, 0, 255 }, + { 0, 255, 255 }, + { 255, 255, 0 }, + { 255, 0, 0 }, + { 50, 0, 0 }, + } }; + +static color_map classic{ { + { 30, 77, 203 }, + { 25, 60, 192 }, + { 45, 117, 220 }, + { 204, 108, 191 }, + { 196, 57, 178 }, + { 198, 33, 24 }, + } }; + +static color_map grayscale{ { + { 255, 255, 255 }, + { 0, 0, 0 }, + } }; + +static color_map inv_grayscale{ { + { 0, 0, 0 }, + { 255, 255, 255 }, + } }; + +static color_map biomes{ { + { 0, 0, 204 }, + { 204, 230, 255 }, + { 255, 255, 153 }, + { 170, 255, 128 }, + { 0, 153, 0 }, + { 230, 242, 255 }, + } }; + +static color_map cold{ { + { 230, 247, 255 }, + { 0, 92, 230 }, + { 0, 179, 179 }, + { 0, 51, 153 }, + { 0, 5, 15 } + } }; + +static color_map warm{ { + { 255, 255, 230 }, + { 255, 204, 0 }, + { 255, 136, 77 }, + { 255, 51, 0 }, + { 128, 0, 0 }, + { 10, 0, 0 } + } }; + +static color_map quantized{ { + { 255, 255, 255 }, + { 0, 0, 0 }, + }, 6 }; + +static color_map pattern{ { + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + { 255, 255, 255 }, + { 0, 0, 0 }, + } }; + +static const color_map* colormap_presets[] = { + &jet, + &classic, + &grayscale, + &inv_grayscale, + &biomes, + &cold, + &warm, + &quantized, + &pattern +}; + +} // namespace diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.cpp new file mode 100755 index 0000000000..93e4e436b6 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.cpp @@ -0,0 +1,88 @@ +#include "PCH.h" +#include "ColorMap.inl" + +namespace rs2_utils { + +void make_equalized_histogram(depth_pixel* dst, const rs2::video_frame& depth, const color_map& cm) +{ + SCOPED_PROFILER; + + const size_t max_depth = 0x10000; + static size_t histogram[max_depth]; + memset(histogram, 0, sizeof(histogram)); + + const auto w = depth.get_width(), h = depth.get_height(); + const auto depth_data = (const uint16_t*)depth.get_data(); + + for (auto i = 0; i < w*h; ++i) ++histogram[depth_data[i]]; + for (auto i = 2; i < max_depth; ++i) histogram[i] += histogram[i - 1]; + + const auto scale = 1.0f / (float)histogram[0xFFFF]; + + for (auto i = 0; i < w*h; ++i) + { + const auto d = depth_data[i]; + if (d) + { + //auto f = histogram[d] / (float)histogram[0xFFFF]; + const auto f = histogram[d] * scale; + const auto c = cm.get(f); + + dst->r = (uint8_t)c.x; + dst->g = (uint8_t)c.y; + dst->b = (uint8_t)c.z; + dst->a = 255; + } + else + { + dst->r = 0; + dst->g = 0; + dst->b = 0; + dst->a = 255; + } + dst++; + } +} + +void make_value_cropped_frame(depth_pixel* dst, const rs2::video_frame& depth, const color_map& cm, float depth_min, float depth_max, float depth_units) +{ + SCOPED_PROFILER; + + const auto scale = 1.0f / (depth_max - depth_min); + const auto w = depth.get_width(), h = depth.get_height(); + const auto depth_data = (const uint16_t*)depth.get_data(); + + for (auto i = 0; i < w*h; ++i) + { + const auto d = depth_data[i]; + if (d) + { + //const auto f = (d * depth_units - depth_min) / (depth_max - depth_min); + const auto f = (d * depth_units - depth_min) * scale; + const auto c = cm.get(f); + + dst->r = (uint8_t)c.x; + dst->g = (uint8_t)c.y; + dst->b = (uint8_t)c.z; + dst->a = 255; + } + else + { + dst->r = 0; + dst->g = 0; + dst->b = 0; + dst->a = 255; + } + dst++; + } +} + +void colorize_depth(depth_pixel* dst, const rs2::video_frame& depth, int colormap_id, float depth_min, float depth_max, float depth_units, bool equalize) +{ + auto& cm = *colormap_presets[colormap_id]; + + if (equalize) make_equalized_histogram(dst, depth, cm); + else make_value_cropped_frame(dst, depth, cm, depth_min, depth_max, depth_units); +} + +} // namespace diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.h new file mode 100755 index 0000000000..cd3ad636ac --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DepthColorizer.h @@ -0,0 +1,9 @@ +#pragma once + +namespace rs2_utils { + +struct depth_pixel { uint8_t r, g, b, a; }; + +void colorize_depth(depth_pixel* dst, const rs2::video_frame& depth, int colormap_id, float depth_min, float depth_max, float depth_units, bool equalize); + +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.cpp new file mode 100755 index 0000000000..76269d3079 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.cpp @@ -0,0 +1,201 @@ +#include "PCH.h" + +FDynamicTexture::FDynamicTexture(FString Name, + int Width, int Height, EPixelFormat Format, TextureCompressionSettings Compression) +{ + SCOPED_PROFILER; + + REALSENSE_TRACE(TEXT("+FDynamicTexture %p %s"), this, *Name); + + this->Name = Name; + this->Width = Width; + this->Height = Height; + this->Bpp = GPixelFormats[Format].BlockBytes; + this->Format = Format; + this->Compression = Compression; + + CommandCounter.Increment(); + ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER( + CreateTextureCmd, + FDynamicTexture*, Context, this, + { + Context->RenderCmd_CreateTexture(); + }); +} + +FDynamicTexture::~FDynamicTexture() +{ + SCOPED_PROFILER; + + REALSENSE_TRACE(TEXT("~FDynamicTexture %p %s CommandCounter=%d TudPool=%d"), this, *Name, (int)CommandCounter.GetValue(), (int)TudPool.size()); + + { + const float Timeout = 5; + const float Granularity = 200.0f / 1000.0f; + int NumTries = (int)(Timeout / Granularity); + + NAMED_PROFILER("WaitCommandCounter"); + while (CommandCounter.GetValue() > 0 && NumTries > 0) + { + //REALSENSE_ERR(TEXT("Wait FDynamicTexture CommandCounter=%d"), (int)CommandCounter.GetValue()); + FPlatformProcess::Sleep(Granularity); + NumTries--; + } + } + + if (TextureObject) + { + TextureObject->RemoveFromRoot(); + TextureObject = nullptr; + } + + for (FTextureUpdateData* Tud : TudPool) + { + if (Tud->Data) FMemory::Free(Tud->Data); + FMemory::Free(Tud); + } + TudPool.clear(); +} + +FTextureUpdateData* FDynamicTexture::AllocBuffer() +{ + SCOPED_PROFILER; + + if (!TudPool.empty()) + { + FScopeLock Lock(&TudMx); + if (!TudPool.empty()) + { + auto Tud = TudPool.back(); + TudPool.pop_back(); + return Tud; + } + } + + auto Tud = (FTextureUpdateData*)FMemory::Malloc(sizeof(FTextureUpdateData), PLATFORM_CACHE_LINE_SIZE); + Tud->Context = this; + Tud->DataSize = Width * Height * Bpp; + Tud->Data = FMemory::Malloc(Tud->DataSize, PLATFORM_CACHE_LINE_SIZE); + Tud->Stride = Width * Bpp; + Tud->Width = Width; + Tud->Height = Height; + + return Tud; +} + +void FDynamicTexture::EnqueUpdateCommand(FTextureUpdateData* Tud) +{ + SCOPED_PROFILER; + + // UE4 is so great! + const bool HackIsValidThread = (!GIsThreadedRendering || ENamedThreads::GetRenderThread() != ENamedThreads::GameThread); + + if (!HackIsValidThread) + { + REALSENSE_ERR(TEXT("EnqueUpdateCommand: invalid thread")); + } + else if (TextureObject && TextureObject->Resource) + { + CommandCounter.Increment(); + ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER( + UpdateTextureCmd, + FTextureUpdateData*, Tud, Tud, + { + Tud->Context->RenderCmd_UpdateTexture(Tud); + }); + } +} + +void FDynamicTexture::Update(const rs2::video_frame& Frame) +{ + SCOPED_PROFILER; + + const auto fw = Frame.get_width(); + const auto fh = Frame.get_height(); + const auto fbpp = Frame.get_bytes_per_pixel(); + + if (Width != fw || Height != fh || Bpp != fbpp) + { + REALSENSE_ERR(TEXT("Invalid video_frame: %s Width=%d Height=%d Bpp=%d"), + *Name, fw, fh, fbpp); + return; + } + + auto* Tud = AllocBuffer(); + CopyData(Tud, Frame); + EnqueUpdateCommand(Tud); +} + +void FDynamicTexture::CopyData(FTextureUpdateData* Tud, const rs2::video_frame& Frame) +{ + SCOPED_PROFILER; + + const auto fw = Frame.get_width(); + const auto fh = Frame.get_height(); + const auto fbpp = Frame.get_bytes_per_pixel(); + const auto fs = Frame.get_stride_in_bytes(); + + uint8_t* Dst = (uint8_t*)Tud->Data; + const uint8_t* Src = (const uint8_t*)Frame.get_data(); + + for (int y = 0; y < fh; ++y) + { + FMemory::Memcpy(Dst, Src, fw * fbpp); + Dst += (fw * fbpp); + Src += fs; + } +} + +void FDynamicTexture::RenderCmd_CreateTexture() +{ + SCOPED_PROFILER; + + REALSENSE_TRACE(TEXT("FDynamicTexture::RenderCmd_CreateTexture %p %s"), this, *Name); + + auto Tex = UTexture2D::CreateTransient(Width, Height, Format); + if (!Tex) + { + REALSENSE_ERR(TEXT("UTexture2D::CreateTransient failed")); + } + else + { + #if WITH_EDITORONLY_DATA + Tex->MipGenSettings = TextureMipGenSettings::TMGS_NoMipmaps; + #endif + + Tex->CompressionSettings = Compression; + Tex->Filter = TextureFilter::TF_Nearest; + Tex->SRGB = 0; + + Tex->AddToRoot(); + Tex->UpdateResource(); + + TextureObject = Tex; + } + + CommandCounter.Decrement(); +} + +void FDynamicTexture::RenderCmd_UpdateTexture(FTextureUpdateData* Tud) +{ + SCOPED_PROFILER; + + auto Tex = Tud->Context->TextureObject; + if (Tex && Tex->Resource) + { + RHIUpdateTexture2D( + ((FTexture2DResource*)Tex->Resource)->GetTexture2DRHI(), + 0, + FUpdateTextureRegion2D(0, 0, 0, 0, Tud->Width, Tud->Height), + Tud->Stride, + (const uint8*)Tud->Data + ); + } + + { + FScopeLock Lock(&TudMx); + TudPool.push_back(Tud); + } + + CommandCounter.Decrement(); +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.h new file mode 100755 index 0000000000..460c76b8e8 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/DynamicTexture.h @@ -0,0 +1,54 @@ +#pragma once + +struct FTextureUpdateData +{ + class FDynamicTexture* Context; + void* Data; + uint32 DataSize; + uint32 Stride; + uint32 Width; + uint32 Height; +}; + +class FDynamicTexture +{ +private: + + FString Name; + UTexture2D* TextureObject = nullptr; + + std::vector TudPool; + FThreadSafeCounter CommandCounter; + + FCriticalSection StateMx; + FCriticalSection TudMx; + + int Width = 0; + int Height = 0; + int Bpp = 0; + EPixelFormat Format = PF_Unknown; + TextureCompressionSettings Compression = TextureCompressionSettings::TC_VectorDisplacementmap; + +private: + + void RenderCmd_CreateTexture(); + void RenderCmd_UpdateTexture(FTextureUpdateData* Tud); + +public: + + FDynamicTexture(FString Name, int Width, int Height, EPixelFormat Format, TextureCompressionSettings Compression); + virtual ~FDynamicTexture(); + + FTextureUpdateData* AllocBuffer(); + void EnqueUpdateCommand(FTextureUpdateData* Tud); + + void Update(const rs2::video_frame& Frame); + void CopyData(FTextureUpdateData* Tud, const rs2::video_frame& Frame); + + inline UTexture2D* GetTextureObject() { return TextureObject; } + int GetWidth() const { return Width; } + int GetHeight() const { return Height; } + int GetBpp() const { return Bpp; } + EPixelFormat GetFormat() const { return Format; } + TextureCompressionSettings GetCompression() const { return Compression; } +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/PCH.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/PCH.h new file mode 100755 index 0000000000..30f05ba603 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/PCH.h @@ -0,0 +1,13 @@ +#pragma once + +#include "Shared.h" +#include "DynamicTexture.h" +#include "DepthColorizer.h" + +#include "RealSensePlugin.h" +#include "RealSenseContext.h" +#include "RealSenseDevice.h" +#include "RealSenseSensor.h" +#include "RealSenseOption.h" +#include "RealSenseInspector.h" +#include "RealSenseDetailCustomization.h" diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.h new file mode 100755 index 0000000000..86a3b9f4a2 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.h @@ -0,0 +1,169 @@ +#pragma once + +#if defined(PROF_ENABLED) + +#define PROF_OPTION_QPC +#define PROF_OPTION_THREADSAFE + +#define INIT_PROFILER for(;;) { HiresTimer::Init(); Profiler::InitInstance(); break; } +#define SHUT_PROFILER for(;;) { Profiler::GetInstance()->LogSummary(); Profiler::DestroyInstance(); break; } +#define NAMED_PROFILER(name) ScopedProfiler named_profiler(PROF_TEXT(name), PROF_TEXT(PROF_UNIQ_NAME)) +#define SCOPED_PROFILER ScopedProfiler scoped_profiler(PROF_TEXT(__FUNCTION__), PROF_TEXT(PROF_UNIQ_NAME)) + +#if defined(_WIN32) || defined(_WIN64) + #define PROF_PLATFORM_WINDOWS +#endif + +#include +#include + +#if !defined(PROF_PLATFORM_WINDOWS) + #include + #include +#endif + +#if !defined(PROF_CHAR) + #define PROF_CHAR char +#endif + +#if !defined(PROF_TEXT) + #define PROF_TEXT(str) str +#endif + +#if !defined(PROF_LOG) + #define PROF_LOG printf +#endif + +#if !defined(PROF_MAP_IMPL) + #define PROF_MAP_IMPL std::unordered_map + #include +#endif + +#if defined(PROF_OPTION_THREADSAFE) + #if !defined(PROF_MUTEX_IMPL) + #include + #define PROF_MUTEX_IMPL std::mutex + #define PROF_SCOPED_MUTEX_IMPL std::lock_guard + #endif + #define PROF_MUTEX_DECL PROF_MUTEX_IMPL m_mutex + #define PROF_LOCK PROF_SCOPED_MUTEX_IMPL _scoped(m_mutex) +#else + #define PROF_MUTEX_DECL + #define PROF_LOCK +#endif + +#define PROF_STRINGIZE1(x) PROF_STRINGIZE2(x) +#define PROF_STRINGIZE2(x) #x +#define PROF_UNIQ_NAME __FILE__ "_" PROF_STRINGIZE1(__LINE__) + +#define PROF_SAFE_DELETE(ptr) { if (ptr) { delete ptr; ptr = nullptr; } } + +#define PROF_NO_COPY(type_)\ + private:\ + type_(const type_&); \ + void operator=(const type_&) + +// HiresTimer + +class HiresTimer +{ +public: + static int Init(); + static double GetTicks(); +}; + +// ProfilerSection + +class ProfilerSection +{ + PROF_NO_COPY(ProfilerSection); + + friend class Profiler; + friend class ScopedProfiler; + +private: + + inline ProfilerSection(const PROF_CHAR* name, const PROF_CHAR* uniq) : + m_name(name), m_uniq(uniq), m_sum(0), m_count(0) {} + + inline void Update(double delta) { m_sum += delta, m_count += 1; } + inline void ResetCounters() { m_sum = 0, m_count = 0; } + + inline const PROF_CHAR* GetName() const { return m_name; } + inline const PROF_CHAR* GetUniq() const { return m_uniq; } + inline double GetSum() const { return m_sum; } + inline unsigned int GetCount() const { return m_count; } + inline double GetAvg() const { return (m_count > 0 ? (m_sum / (double)m_count) : 0); } + +private: + + const PROF_CHAR* m_name; + const PROF_CHAR* m_uniq; + double m_sum; + unsigned int m_count; +}; + +// Profiler + +class Profiler +{ + PROF_NO_COPY(Profiler); + +public: + + enum SortMode + { + SORT_SUM = 0, + SORT_AVG + }; + + static void InitInstance(); + static void DestroyInstance(); + static Profiler* GetInstance(); + + Profiler() {} + ~Profiler() { Release(); } + + ProfilerSection* BeginSection(const PROF_CHAR* name, const PROF_CHAR* uniq); + void EndSection(ProfilerSection* section, double delta); + void ResetCounters(); + + void LogSummary(SortMode sortMode = SORT_SUM); + void Release(); + +private: + + PROF_MUTEX_DECL; + + typedef PROF_MAP_IMPL SectionMap; + SectionMap m_sections; +}; + +// ScopedProfiler + +class ScopedProfiler +{ + PROF_NO_COPY(ScopedProfiler); + +public: + + inline ScopedProfiler(const PROF_CHAR* name, const PROF_CHAR* uniq) + { + m_section = Profiler::GetInstance()->BeginSection(name, uniq); + m_ticks = HiresTimer::GetTicks(); + } + + inline ~ScopedProfiler() + { + const double ticks = HiresTimer::GetTicks(); + const double delta = (ticks - m_ticks); + Profiler::GetInstance()->EndSection(m_section, delta); + } + +private: + + ProfilerSection* m_section; + double m_ticks; +}; + +#endif // PROF_ENABLED diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.inl b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.inl new file mode 100755 index 0000000000..79123cbaed --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Profiler.inl @@ -0,0 +1,169 @@ +#if defined(PROF_ENABLED) + +static Profiler* _profiler = NULL; + +void Profiler::InitInstance() +{ + PROF_SAFE_DELETE(_profiler); + _profiler = new Profiler(); +} + +void Profiler::DestroyInstance() +{ + PROF_SAFE_DELETE(_profiler); +} + +Profiler* Profiler::GetInstance() +{ + return _profiler; +} + +ProfilerSection* Profiler::BeginSection(const PROF_CHAR* name, const PROF_CHAR* uniq) +{ + PROF_LOCK; + + ProfilerSection* section; + SectionMap::iterator iter = m_sections.find(uniq); + if (iter != m_sections.end()) + { + section = iter->second; + } + else + { + section = new ProfilerSection(name, uniq); + m_sections.insert(std::pair(uniq, section)); + } + + return section; +} + +void Profiler::EndSection(ProfilerSection* section, double delta) +{ + PROF_LOCK; + + section->Update(delta); +} + +void Profiler::ResetCounters() +{ + PROF_LOCK; + + for (SectionMap::iterator iter = m_sections.begin(); iter != m_sections.end(); ++iter) + { + iter->second->ResetCounters(); + } +} + +void Profiler::LogSummary(SortMode sortMode) +{ + std::vector sections; + + { + PROF_LOCK; + + if (m_sections.empty()) + { + return; + } + + sections.reserve(m_sections.size()); + + for (SectionMap::iterator iter = m_sections.begin(); iter != m_sections.end(); ++iter) + { + sections.push_back(iter->second); + } + } + + struct SectionComparatorSum + { + inline bool operator() (const ProfilerSection* a, const ProfilerSection* b) const { return a->GetSum() > b->GetSum(); } + }; + + struct SectionComparatorAvg + { + inline bool operator() (const ProfilerSection* a, const ProfilerSection* b) const { return a->GetAvg() > b->GetAvg(); } + }; + + if (sortMode == SORT_AVG) + std::sort(sections.begin(), sections.end(), SectionComparatorAvg()); + else + std::sort(sections.begin(), sections.end(), SectionComparatorSum()); + + PROF_LOG(PROF_TEXT("")); + PROF_LOG(PROF_TEXT("%10s %15s %10s %10s %-20s"), PROF_TEXT(""), PROF_TEXT(""), PROF_TEXT(""), PROF_TEXT(""), PROF_TEXT("")); + std::vector::iterator isec; + for (isec = sections.begin(); isec != sections.end(); ++isec) + { + ProfilerSection* section = *isec; + PROF_LOG(PROF_TEXT("%10.3f %15.3f %10u %10.3f %-20s"), + (section->GetSum() * 0.001), section->GetSum(), section->GetCount(), section->GetAvg(), + section->GetName()); //, section->GetUniq()); + } + PROF_LOG(PROF_TEXT("")); +} + +void Profiler::Release() +{ + PROF_LOCK; + + for (SectionMap::iterator iter = m_sections.begin(); iter != m_sections.end(); ++iter) + { + delete iter->second; + } + + m_sections.clear(); +} + +#if defined(PROF_PLATFORM_WINDOWS) + +#if defined(PROF_OPTION_QPC) + static double _perfFreqMsecInv = 0; +#else + #pragma comment(lib, "Winmm.lib") +#endif + +int HiresTimer::Init() +{ + #ifdef PROF_OPTION_QPC + LARGE_INTEGER perfFreq; + const BOOL rc = QueryPerformanceFrequency(&perfFreq); + if (!rc || !perfFreq.QuadPart) + { + return -1; + } + + _perfFreqMsecInv = 1.0 / ((double)perfFreq.QuadPart * 0.001); + #endif + + return 0; +} + +double HiresTimer::GetTicks() +{ + #ifdef PROF_OPTION_QPC + LARGE_INTEGER counter; + QueryPerformanceCounter(&counter); + return (counter.QuadPart * _perfFreqMsecInv); + #else + DWORD t = timeGetTime(); + return (double)t; + #endif +} + +#else // not PROF_PLATFORM_WINDOWS + +int HiresTimer::Init() +{ + return 0; +} + +double HiresTimer::GetTicks() +{ + timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return ((ts.tv_sec * 1000.0) + (ts.tv_nsec * 0.000001)); +} + +#endif + +#endif // PROF_ENABLED diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseContext.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseContext.cpp new file mode 100755 index 0000000000..b28eb37daa --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseContext.cpp @@ -0,0 +1,86 @@ +#include "PCH.h" + +URealSenseContext::URealSenseContext(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + REALSENSE_TRACE(TEXT("+URealSenseContext_%p"), this); +} + +URealSenseContext::~URealSenseContext() +{ + REALSENSE_TRACE(TEXT("~URealSenseContext_%p"), this); +} + +void URealSenseContext::SetHandle(rs2_context* Handle) +{ + RsContext = Handle; // rs2_context is managed by FRealSensePlugin, just keep a pointer +} + +rs2_context* URealSenseContext::GetHandle() +{ + return RsContext; +} + +URealSenseContext* URealSenseContext::GetRealSense() // static +{ + return IRealSensePlugin::Get().GetContext(); +} + +URealSenseDevice* URealSenseContext::NewDevice(rs2_device* Handle, const TCHAR* Name) +{ + auto Device = NewNamedObject(this, Name); + Device->SetHandle(Handle); + return Device; +} + +void URealSenseContext::QueryDevices() +{ + REALSENSE_TRACE(TEXT("URealSenseContext_%p::QueryDevices"), this); + + FScopeLock Lock(&DevicesMx); + + Devices.Empty(); + + rs2::error_ref e; + rs2_device_list* List = rs2_query_devices(RsContext, &e); + if (List) + { + const int Count = rs2_get_device_count(List, &e); + for (int i = 0; i < Count; i++) + { + rs2_device* RsDevice = rs2_create_device(List, i, &e); + if (RsDevice) + { + Devices.Add(NewDevice(RsDevice, TEXT("RealSenseDevice"))); + } + } + + rs2_delete_device_list(List); + } + + for (auto* Device : Devices) + { + Device->QueryData(); + } +} + +URealSenseDevice* URealSenseContext::GetDeviceById(int Id) +{ + FScopeLock Lock(&DevicesMx); + + return (Id < 0 || Id >= Devices.Num()) ? nullptr : Devices[Id]; +} + +URealSenseDevice* URealSenseContext::FindDeviceBySerial(FString Serial) +{ + FScopeLock Lock(&DevicesMx); + + for (auto* Device : Devices) + { + if (Device->Serial.Equals(Serial)) + { + return Device; + } + } + + return nullptr; +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.cpp new file mode 100755 index 0000000000..55d085b805 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.cpp @@ -0,0 +1,230 @@ +#include "PCH.h" + +#if WITH_EDITOR + +#include "IDetailsView.h" +#include "IDetailCustomization.h" +#include "IDetailGroup.h" +#include "DetailCategoryBuilder.h" +#include "DetailLayoutBuilder.h" +#include "DetailWidgetRow.h" +#include "EditorDirectories.h" +#include "DesktopPlatformModule.h" +#include "Widgets/Text/STextBlock.h" +#include "Widgets/Input/SNumericEntryBox.h" +#include "Widgets/Input/SFilePathPicker.h" + +// +// FRealSenseDetailCustomization +// + +void FRealSenseDetailCustomization::Register() +{ + FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); + PropertyModule.RegisterCustomClassLayout("RealSenseInspector", FOnGetDetailCustomizationInstance::CreateStatic(&FRealSenseInspectorCustomization::MakeInstance)); + //PropertyModule.RegisterCustomPropertyTypeLayout("RealSenseStreamMode", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FRealSenseStreamModeCustomization::MakeInstance)); + PropertyModule.NotifyCustomizationModuleChanged(); // LAST +} + +void FRealSenseDetailCustomization::Unregister() +{ + FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); + PropertyModule.UnregisterCustomClassLayout("RealSenseInspector"); + //PropertyModule.UnregisterCustomPropertyTypeLayout("RealSenseStreamMode"); +} + +// +// FRealSenseInspectorCustomization +// + +TSharedRef FRealSenseInspectorCustomization::MakeInstance() { return MakeShareable(new FRealSenseInspectorCustomization); } + +FRealSenseInspectorCustomization::FRealSenseInspectorCustomization() +{ + DetailLayoutPtr = nullptr; + RsDevices.Reset(new rs2::device_list()); +} + +void FRealSenseInspectorCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailLayout) +{ + SCOPED_PROFILER; + REALSENSE_TRACE(TEXT("FRealSenseInspectorCustomization::CustomizeDetails")); + + if (!IRealSensePlugin::Get().GetContext()) return; + + DetailLayoutPtr = &DetailLayout; + auto This = this; + auto* Category = &DetailLayout.EditCategory("Hardware Inspector"); + auto ParentWindow = FSlateApplication::Get().FindBestParentWindowHandleForDialogs(nullptr); + + if (RsDevices->size() == 0) + { + UpdateDevices(); + } + + Category->AddCustomRow(FText::FromString(TEXT("Refresh"))) + .WholeRowContent() + [ + SNew(SButton) + .Text(FText::FromString(TEXT("Refresh"))) + .OnClicked_Lambda([This]() + { + This->UpdateDevices(); + This->DetailLayoutPtr->ForceRefreshDetails(); + return FReply::Handled(); + }) + ] + ; + + for (auto Device : *RsDevices) + { + FString DevName = uestr(Device.get_info(RS2_CAMERA_INFO_NAME)); + FString DevSerial = uestr(Device.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER)); + auto* DeviceGroup = &Category->AddGroup(TEXT("Device"), FText::FromString(DevName)); + + DeviceGroup->AddWidgetRow() + .NameContent() + [ + SNew(STextBlock) + .Text(FText::FromString(TEXT("Serial Number"))) + .Font(IDetailLayoutBuilder::GetDetailFont()) + ] + .ValueContent() + [ + SNew(STextBlock) + .Text(FText::FromString(DevSerial)) + .Font(IDetailLayoutBuilder::GetDetailFont()) + ] + ; + + DeviceGroup->AddWidgetRow() + .NameContent() + [ + SNew(SButton) + .Text(FText::FromString(TEXT("Load preset"))) + .OnClicked_Lambda([This, Device, ParentWindow]() + { + FString Path; + if (This->PickFile(Path, ParentWindow, TEXT("Select preset"), TEXT("Preset file|*.json"))) + { + REALSENSE_TRACE(TEXT("Load preset %s"), *Path); + if (URealSenseDevice::LoadPreset(Device.get().get(), Path)) + { + This->UpdateDevices(); + } + } + return FReply::Handled(); + }) + ] + ; + + DeviceGroup->AddWidgetRow() + .NameContent() + [ + SNew(SButton) + .Text(FText::FromString(TEXT("Save preset"))) + .OnClicked_Lambda([This, Device, ParentWindow]() + { + FString Path; + if (This->PickFile(Path, ParentWindow, TEXT("Select preset"), TEXT("Preset file|*.json"), true)) + { + REALSENSE_TRACE(TEXT("Save preset %s"), *Path); + URealSenseDevice::SavePreset(Device.get().get(), Path); + } + return FReply::Handled(); + }) + ] + ; + + for (auto Sensor : Device.query_sensors()) + { + FString SensorName = uestr(Sensor.get_info(RS2_CAMERA_INFO_NAME)); + auto* SensorGroup = &DeviceGroup->AddGroup(TEXT("Sensor"), FText::FromString(SensorName)); + + for (int i = 0; i < RS2_OPTION_COUNT; ++i) + { + const rs2_option Option = (rs2_option)i; + + if (Sensor.supports(Option)) + { + auto OptionName = uestr(rs2_option_to_string(Option)); + auto Range = Sensor.get_option_range(Option); + + auto UniqId = DevName + "_" + SensorName + "_" + OptionName; + if (!ValueCache.Contains(UniqId)) + { + auto Value = Sensor.get_option(Option); + ValueCache.Add(UniqId, Value); + } + + SensorGroup->AddWidgetRow() + .NameContent() + [ + SNew(STextBlock) + .Text(FText::FromString(OptionName)) + .Font(IDetailLayoutBuilder::GetDetailFont()) + ] + .ValueContent() + [ + SNew(SNumericEntryBox) + .MinValue(Range.min) + .MinSliderValue(Range.min) + .MaxValue(Range.max) + .MaxSliderValue(Range.max) + .AllowSpin(true) + .Value_Lambda([This, UniqId]() + { + return This->ValueCache.Contains(UniqId) ? This->ValueCache[UniqId] : 0; + }) + .OnValueChanged_Lambda([This, Sensor, Option, UniqId, Range](float NewValue) + { + NewValue = FMath::RoundToFloat(NewValue / Range.step) * Range.step; + Sensor.set_option(Option, NewValue); + if (This->ValueCache.Contains(UniqId)) This->ValueCache[UniqId] = NewValue; else This->ValueCache.Add(UniqId, NewValue); + }) + ] + ; + } + } + } + } +} + +void FRealSenseInspectorCustomization::UpdateDevices() +{ + SCOPED_PROFILER; + REALSENSE_TRACE(TEXT("FRealSenseInspectorCustomization::UpdateDevices")); + + rs2::context_ref RsContext(IRealSensePlugin::Get().GetContext()->GetHandle()); + *RsDevices = RsContext.query_devices(); +} + +bool FRealSenseInspectorCustomization::PickFile(FString& OutPath, const void* ParentWindow, const FString& Title, const FString& Filter, bool SaveFlag) +{ + IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get(); + if (DesktopPlatform) + { + TArray OutFiles; + if (SaveFlag) + { + auto DefaultPath = FEditorDirectories::Get().GetLastDirectory(ELastDirectory::GENERIC_SAVE); + if (DesktopPlatform->SaveFileDialog(ParentWindow, Title, DefaultPath, TEXT(""), Filter, EFileDialogFlags::None, OutFiles)) + { + OutPath = OutFiles[0]; + return true; + } + } + else + { + auto DefaultPath = FEditorDirectories::Get().GetLastDirectory(ELastDirectory::GENERIC_OPEN); + if (DesktopPlatform->OpenFileDialog(ParentWindow, Title, DefaultPath, TEXT(""), Filter, EFileDialogFlags::None, OutFiles)) + { + OutPath = OutFiles[0]; + return true; + } + } + } + return false; +} + +#endif // WITH_EDITOR diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.h new file mode 100755 index 0000000000..834afa6925 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDetailCustomization.h @@ -0,0 +1,35 @@ +#pragma once + +#if WITH_EDITOR + +#include "IDetailCustomization.h" +#include "IPropertyTypeCustomization.h" +#include "PropertyHandle.h" + +namespace rs2 { class device_list; } + +class FRealSenseDetailCustomization +{ +public: + static void Register(); + static void Unregister(); +}; + +class FRealSenseInspectorCustomization : public IDetailCustomization +{ +public: + static TSharedRef MakeInstance(); + + FRealSenseInspectorCustomization(); + virtual void CustomizeDetails(class IDetailLayoutBuilder& DetailLayout) override; + +private: + void UpdateDevices(); + bool PickFile(FString& OutPath, const void* ParentWindow, const FString& Title, const FString& Filter, bool SaveFlag = false); + + IDetailLayoutBuilder* DetailLayoutPtr; + TUniquePtr RsDevices; + TMap ValueCache; +}; + +#endif // WITH_EDITOR diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDevice.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDevice.cpp new file mode 100755 index 0000000000..601622b646 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseDevice.cpp @@ -0,0 +1,199 @@ +#include "PCH.h" +#include + +URealSenseDevice::URealSenseDevice(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + REALSENSE_TRACE(TEXT("+URealSenseDevice_%p"), this); +} + +URealSenseDevice::~URealSenseDevice() +{ + REALSENSE_TRACE(TEXT("~URealSenseDevice_%p"), this); + + SetHandle(nullptr); +} + +void URealSenseDevice::SetHandle(rs2_device* Handle) +{ + if (RsDevice) { rs2_delete_device(RsDevice); } + RsDevice = Handle; +} + +rs2_device* URealSenseDevice::GetHandle() +{ + return RsDevice; +} + +URealSenseSensor* URealSenseDevice::NewSensor(rs2_sensor* Handle, const TCHAR* ObjName) +{ + auto Sensor = NewNamedObject(this, ObjName); + Sensor->SetHandle(Handle); + return Sensor; +} + +void URealSenseDevice::QueryData() +{ + Sensors.Empty(); + + rs2::error_ref e; + Name = uestr(rs2_get_device_info(RsDevice, RS2_CAMERA_INFO_NAME, &e)); + Serial = uestr(rs2_get_device_info(RsDevice, RS2_CAMERA_INFO_SERIAL_NUMBER, &e)); + + rs2_sensor_list* List = rs2_query_sensors(RsDevice, &e); + if (List) + { + const int Count = rs2_get_sensors_count(List, &e); + for (int i = 0; i < Count; i++) + { + rs2_sensor* RsSensor = rs2_create_sensor(List, i, &e); + if (RsSensor) + { + Sensors.Add(NewSensor(RsSensor, TEXT("RealSenseSensor"))); + } + } + + rs2_delete_sensor_list(List); + } + + for (auto* Sensor : Sensors) + { + Sensor->QueryData(); + } +} + +URealSenseSensor* URealSenseDevice::GetSensor(ERealSenseStreamType StreamType) +{ + URealSenseSensor* Result = nullptr; + + for (auto* Sensor : Sensors) + { + for (const auto& Profile : Sensor->StreamProfiles) + { + if (Profile.StreamType == StreamType || StreamType == ERealSenseStreamType::STREAM_ANY) + { + Result = Sensor; + break; + } + } + } + + return Result; +} + +TArray URealSenseDevice::GetStreamProfiles(ERealSenseStreamType StreamType) +{ + TArray Result; + + for (auto* Sensor : Sensors) + { + for (const auto& Profile : Sensor->StreamProfiles) + { + if (Profile.StreamType == StreamType || StreamType == ERealSenseStreamType::STREAM_ANY) + { + Result.Add(Profile); + } + } + } + + return Result; +} + +bool URealSenseDevice::SupportsProfile(FRealSenseStreamProfile Profile) +{ + for (auto* Sensor : Sensors) + { + if (Sensor->SupportsProfile(Profile)) + { + return true; + } + } + + return false; +} + +bool URealSenseDevice::LoadPreset(const FString& FileName) +{ + return LoadPreset(RsDevice, FileName); +} + +bool URealSenseDevice::SavePreset(const FString& FileName) +{ + return SavePreset(RsDevice, FileName); +} + +bool URealSenseDevice::LoadPreset(rs2_device* Handle, const FString& FileName) +{ + bool Result = false; + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + IFileHandle* FileHandle = PlatformFile.OpenRead(*FileName); + if (!FileHandle) + { + REALSENSE_ERR(TEXT("OpenRead failed: %s"), *FileName); + } + else + { + auto Size = FileHandle->Size(); + std::vector Data; + Data.resize(Size); + + if (!FileHandle->Read(&Data[0], Size)) + { + REALSENSE_ERR(TEXT("Read failed: %s Size=%u"), *FileName, (unsigned int)Size); + } + else + { + rs2::error_ref e; + rs2_load_json(Handle, &Data[0], Size, &e); + if (!e.success()) + { + REALSENSE_ERR(TEXT("rs2_load_json failed: %s"), ANSI_TO_TCHAR(e.get_message())); + } + else + { + Result = true; + } + } + + delete FileHandle; + } + return Result; +} + +bool URealSenseDevice::SavePreset(rs2_device* Handle, const FString& FileName) +{ + bool Result = false; + IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); + IFileHandle* FileHandle = PlatformFile.OpenWrite(*FileName); + if (!FileHandle) + { + REALSENSE_ERR(TEXT("OpenWrite failed: %s"), *FileName); + } + else + { + rs2::error_ref e; + auto Buffer = rs2_serialize_json(Handle, &e); + if (!e.success()) + { + REALSENSE_ERR(TEXT("rs2_serialize_json failed: %s"), ANSI_TO_TCHAR(e.get_message())); + } + else + { + auto Size = rs2_get_raw_data_size(Buffer, &e); + auto Data = rs2_get_raw_data(Buffer, &e); + + if (!FileHandle->Write(Data, Size)) + { + REALSENSE_ERR(TEXT("Write failed: %s"), *FileName); + } + else + { + Result = true; + } + + rs2_delete_raw_data(Buffer); + } + + delete FileHandle; + } + return Result; +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseInspector.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseInspector.cpp new file mode 100755 index 0000000000..d28840e48b --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseInspector.cpp @@ -0,0 +1,640 @@ +#include "PCH.h" + +#define MAX_BUFFER_U16 0xFFFF + +template +inline UTexture2D* Get(TUniquePtr& Dtex) { return Dtex.Get() ? Dtex.Get()->GetTextureObject() : nullptr; } + +inline float GetDepthScale(rs2::device dev) { + for (auto& sensor : dev.query_sensors()) { + if (auto depth = sensor.as()) { + return depth.get_depth_scale(); + } + } + throw rs2::error("Depth not supported"); +} + +ARealSenseInspector::ARealSenseInspector(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + REALSENSE_TRACE(TEXT("+ARealSenseInspector %p"), this); + + PrimaryActorTick.bCanEverTick = true; + + RootComponent = CreateDefaultSubobject(TEXT("Root")); + + PclMesh = CreateDefaultSubobject(TEXT("RuntimeMeshComponent")); + PclMesh->SetVisibility(false); + PclMesh->SetCollisionProfileName(UCollisionProfile::NoCollision_ProfileName); + PclMesh->Mobility = EComponentMobility::Movable; + PclMesh->bGenerateOverlapEvents = false; + PclMesh->SetupAttachment(RootComponent); +} + +ARealSenseInspector::~ARealSenseInspector() +{ + REALSENSE_TRACE(TEXT("~ARealSenseInspector %p"), this); + + Stop(); +} + +bool ARealSenseInspector::Start() +{ + SCOPED_PROFILER; + + try + { + FScopeLock Lock(&StateMx); + + REALSENSE_TRACE(TEXT("ARealSenseInspector::Start %p"), this); + + if (RsPipeline.Get() || StartedFlag) + { + throw std::runtime_error("Already started"); + } + + PclMesh->SetVisibility(false); + + Context = IRealSensePlugin::Get().GetContext(); + if (!Context) + { + throw std::runtime_error("GetContext failed"); + } + + rs2::context_ref RsContext(Context->GetHandle()); + rs2::config RsConfig; + + const bool IsPlaybackMode = (PipelineMode == ERealSensePipelineMode::PlaybackFile); + if (IsPlaybackMode) + { + REALSENSE_TRACE(TEXT("enable_device_from_file: %s"), *CaptureFile); + RsConfig.enable_device_from_file(TCHAR_TO_ANSI(*CaptureFile)); + } + else + { + if (Context->Devices.Num() == 0) + { + Context->QueryDevices(); + if (Context->Devices.Num() == 0) + { + throw std::runtime_error("No devices available"); + } + } + + ActiveDevice = DeviceSerial.IsEmpty() ? Context->GetDeviceById(0) : Context->FindDeviceBySerial(DeviceSerial); + if (!ActiveDevice) + { + throw std::runtime_error("Device not found"); + } + + REALSENSE_TRACE(TEXT("enable_device: SN=%s"), *ActiveDevice->Serial); + RsConfig.enable_device(std::string(TCHAR_TO_ANSI(*ActiveDevice->Serial))); + } + + if (bEnableRawDepth || bEnableColorizedDepth || bEnablePcl) + { + if (!IsPlaybackMode) + { + REALSENSE_TRACE(TEXT("enable_stream DEPTH %dx%d @%d"), DepthConfig.Width, DepthConfig.Height, DepthConfig.Rate); + + EnsureProfileSupported(ActiveDevice, ERealSenseStreamType::STREAM_DEPTH, ERealSenseFormatType::FORMAT_Z16, DepthConfig); + RsConfig.enable_stream(RS2_STREAM_DEPTH, DepthConfig.Width, DepthConfig.Height, RS2_FORMAT_Z16, DepthConfig.Rate); + + if (bAlignDepthToColor) + { + RsAlign.Reset(new rs2::align(RS2_STREAM_COLOR)); + } + } + + if (bEnableRawDepth) + { + // PF_G16 = DXGI_FORMAT_R16_UNORM ; A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel. + // PF_R16F = DXGI_FORMAT_R16_FLOAT ; A single-component, 16-bit floating-point format that supports 16 bits for the red channel. + // PF_R16_UINT = DXGI_FORMAT_R16_UINT ; A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel. + DepthRawDtex.Reset(new FDynamicTexture(TEXT("DepthRaw"), DepthConfig.Width, DepthConfig.Height, PF_G16, TextureCompressionSettings::TC_Displacementmap)); + } + + if (bEnableColorizedDepth) + { + DepthColorizedDtex.Reset(new FDynamicTexture(TEXT("DepthColorized"), DepthConfig.Width, DepthConfig.Height, PF_R8G8B8A8, TextureCompressionSettings::TC_VectorDisplacementmap)); + } + } + + if (bEnableColor || bAlignDepthToColor) + { + if (!IsPlaybackMode) + { + REALSENSE_TRACE(TEXT("enable_stream COLOR %dx%d @%d"), ColorConfig.Width, ColorConfig.Height, ColorConfig.Rate); + + EnsureProfileSupported(ActiveDevice, ERealSenseStreamType::STREAM_COLOR, ERealSenseFormatType::FORMAT_RGBA8, ColorConfig); + RsConfig.enable_stream(RS2_STREAM_COLOR, ColorConfig.Width, ColorConfig.Height, RS2_FORMAT_RGBA8, ColorConfig.Rate); + } + + if (bEnableColor) + { + ColorDtex.Reset(new FDynamicTexture(TEXT("Color"), ColorConfig.Width, ColorConfig.Height, PF_R8G8B8A8, TextureCompressionSettings::TC_VectorDisplacementmap)); + } + } + + if (bEnableInfrared) + { + if (!IsPlaybackMode) + { + REALSENSE_TRACE(TEXT("enable_stream INFRARED %dx%d @%d"), InfraredConfig.Width, InfraredConfig.Height, InfraredConfig.Rate); + + EnsureProfileSupported(ActiveDevice, ERealSenseStreamType::STREAM_INFRARED, ERealSenseFormatType::FORMAT_Y8, InfraredConfig); + RsConfig.enable_stream(RS2_STREAM_INFRARED, InfraredConfig.Width, InfraredConfig.Height, RS2_FORMAT_Y8, InfraredConfig.Rate); + } + + // PF_G8 = DXGI_FORMAT_R8_UNORM ; A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel. + InfraredDtex.Reset(new FDynamicTexture(TEXT("Infrared"), InfraredConfig.Width, InfraredConfig.Height, PF_G8, TextureCompressionSettings::TC_Displacementmap)); + } + + if (bEnablePcl) + { + RsPointCloud.Reset(new rs2::pointcloud()); + RsPoints.Reset(new rs2::points()); + } + PclCalculateFlag = bEnablePcl; + + if (PipelineMode == ERealSensePipelineMode::RecordFile) + { + REALSENSE_TRACE(TEXT("enable_record_to_file: %s"), *CaptureFile); + RsConfig.enable_record_to_file(TCHAR_TO_ANSI(*CaptureFile)); + } + + FlushRenderingCommands(); // wait for textures + DepthRawTexture = Get(DepthRawDtex); + DepthColorizedTexture = Get(DepthColorizedDtex); + ColorTexture = Get(ColorDtex); + InfraredTexture = Get(InfraredDtex); + + REALSENSE_TRACE(TEXT("Start pipeline")); + RsPipeline.Reset(new rs2::pipeline()); + rs2::pipeline_profile RsProfile = RsPipeline->start(RsConfig); + DepthScale = GetDepthScale(RsProfile.get_device()); + REALSENSE_TRACE(TEXT("DepthScale=%f"), DepthScale); + StartedFlag = true; + + REALSENSE_TRACE(TEXT("Start worker")); + Worker.Reset(new FRealSenseInspectorWorker(this)); + FString ThreadName(FString::Printf(TEXT("FRealSenseInspectorWorker_%s"), *FGuid::NewGuid().ToString())); + Thread.Reset(FRunnableThread::Create(Worker.Get(), *ThreadName, 0, TPri_Normal)); + if (!Thread.Get()) + { + throw std::runtime_error("CreateThread failed"); + } + } + catch (const rs2::error& ex) + { + auto what(uestr(ex.what())); + auto func(uestr(ex.get_failed_function())); + auto args(uestr(ex.get_failed_args())); + + REALSENSE_ERR(TEXT("ARealSenseInspector::Start exception: %s (FUNC %s ; ARGS %s ; TYPE %d"), *what, *func, *args, (int)ex.get_type()); + StartedFlag = false; + } + catch (const std::exception& ex) + { + REALSENSE_ERR(TEXT("ARealSenseInspector::Start exception: %s"), ANSI_TO_TCHAR(ex.what())); + StartedFlag = false; + } + + if (!StartedFlag) + { + Stop(); + } + + return StartedFlag ? true : false; +} + +void ARealSenseInspector::Stop() +{ + SCOPED_PROFILER; + + try + { + FScopeLock Lock(&StateMx); + + StartedFlag = false; + + if (RsPipeline.Get()) + { + REALSENSE_TRACE(TEXT("Stop pipeline")); + try { + NAMED_PROFILER("rs2::pipeline::stop"); + RsPipeline->stop(); + } + catch (...) {} + } + + if (Thread.Get()) + { + REALSENSE_TRACE(TEXT("Join thread")); + { + NAMED_PROFILER("JoinRealSenseThread"); + Thread->WaitForCompletion(); + } + + REALSENSE_TRACE(TEXT("Reset thread")); + Thread.Reset(); + } + + Worker.Reset(); + RsPipeline.Reset(); + RsAlign.Reset(); + RsPoints.Reset(); + RsPointCloud.Reset(); + + REALSENSE_TRACE(TEXT("Flush rendering commands")); + { + NAMED_PROFILER("FlushRenderingCommands"); + + ENQUEUE_UNIQUE_RENDER_COMMAND(FlushCommand, + { + GRHICommandList.GetImmediateCommandList().ImmediateFlush(EImmediateFlushType::FlushRHIThreadFlushResources); + RHIFlushResources(); + GRHICommandList.GetImmediateCommandList().ImmediateFlush(EImmediateFlushType::FlushRHIThreadFlushResources); + }); + FlushRenderingCommands(); + } + + REALSENSE_TRACE(TEXT("Destroy dynamic textures")); + { + NAMED_PROFILER("DestroyDynamicTextures"); + DepthRawDtex.Reset(); + DepthColorizedDtex.Reset(); + ColorDtex.Reset(); + InfraredDtex.Reset(); + } + + ActiveDevice = nullptr; + DepthRawTexture = nullptr; + DepthColorizedTexture = nullptr; + ColorTexture = nullptr; + InfraredTexture = nullptr; + } + catch (const std::exception& ex) + { + REALSENSE_ERR(TEXT("ARealSenseInspector::Stop exception: %s"), ANSI_TO_TCHAR(ex.what())); + } + + #if defined(PROF_ENABLED) + Profiler::GetInstance()->LogSummary(); + #endif +} + +void ARealSenseInspector::ThreadProc() +{ + REALSENSE_TRACE(TEXT("Enter ARealSenseInspector::ThreadProc %p"), this); + + try + { + while (StartedFlag) + { + if (bEnablePolling) + { + PollFrames(); + } + else + { + WaitFrames(); + } + } + } + catch (const std::exception& ex) + { + REALSENSE_ERR(TEXT("ARealSenseInspector::ThreadProc exception: %s"), ANSI_TO_TCHAR(ex.what())); + StartedFlag = false; + } + + REALSENSE_TRACE(TEXT("Leave ARealSenseInspector::ThreadProc %p"), this); +} + +void ARealSenseInspector::PollFrames() +{ + const double t0 = FPlatformTime::Seconds(); + + rs2::frameset Frameset; + bool GotFrames; + + try + { + NAMED_PROFILER("rs2::pipeline::poll_for_frames"); + GotFrames = RsPipeline->poll_for_frames(&Frameset); + } + catch (const rs2::error& ex) + { + REALSENSE_TRACE(TEXT("poll_for_frames failed: %s"), ANSI_TO_TCHAR(ex.what())); + GotFrames = false; + } + + if (GotFrames) + { + ProcessFrameset(&Frameset); + } + + const double t1 = FPlatformTime::Seconds(); + const double dt = t1 - t0; + if (dt < PollFrameRate) + { + FPlatformProcess::Sleep(PollFrameRate - dt); + } +} + +void ARealSenseInspector::WaitFrames() +{ + rs2::frameset Frameset; + bool GotFrames; + + try + { + NAMED_PROFILER("rs2::pipeline::wait_for_frames"); + Frameset = RsPipeline->wait_for_frames((unsigned int)(WaitFrameTimeout * 1000.0f)); + GotFrames = true; + } + catch (const rs2::error& ex) + { + REALSENSE_TRACE(TEXT("wait_for_frames failed: %s"), ANSI_TO_TCHAR(ex.what())); + GotFrames = false; + } + + if (GotFrames) + { + ProcessFrameset(&Frameset); + } +} + +void ARealSenseInspector::ProcessFrameset(rs2::frameset* Frameset) +{ + SCOPED_PROFILER; + + FScopedTryLock PclScopedMx; + + if (bEnableRawDepth || bEnableColorizedDepth || bEnablePcl) + { + rs2::depth_frame DepthFrame = (bAlignDepthToColor && RsAlign.Get()) ? RsAlign->process(*Frameset).get_depth_frame() : Frameset->get_depth_frame(); + + if (bEnableRawDepth && DepthRawDtex.Get()) + { + NAMED_PROFILER("UpdateDepthRaw"); + DepthRawDtex->Update(DepthFrame); + } + + if (bEnableColorizedDepth && DepthColorizedDtex.Get()) + { + NAMED_PROFILER("UpdateDepthColorized"); + auto* Tud = DepthColorizedDtex->AllocBuffer(); + rs2_utils::colorize_depth((rs2_utils::depth_pixel*)Tud->Data, DepthFrame, (int)DepthColormap, DepthMin, DepthMax, DepthScale, bEqualizeHistogram); + DepthColorizedDtex->EnqueUpdateCommand(Tud); + } + + if (bEnablePcl && RsPointCloud.Get() && PclCalculateFlag) + { + if (PclScopedMx.TryLock(&PointCloudMx)) + { + NAMED_PROFILER("rs2::pointcloud::calculate"); + *RsPoints = RsPointCloud->calculate(DepthFrame); + } + } + } + + if (bEnableColor) + { + auto ColorFrame = Frameset->get_color_frame(); + + if (ColorDtex.Get()) + { + NAMED_PROFILER("UpdateColor"); + ColorDtex->Update(ColorFrame); + } + + if (PclScopedMx.IsLocked()) + { + NAMED_PROFILER("rs2::pointcloud::map_to"); + RsPointCloud->map_to(ColorFrame); + } + } + + if (PclScopedMx.IsLocked()) + { + PclScopedMx.Unlock(); + PclFramesetId = FramesetId; + PclCalculateFlag = false; + PclReadyFlag = true; + } + + if (bEnableInfrared && InfraredDtex.Get()) + { + NAMED_PROFILER("UpdateInfrared"); + InfraredDtex->Update(Frameset->get_infrared_frame()); + } + + //REALSENSE_TRACE(TEXT("Frameset %d"), FramesetId); + FramesetId++; +} + +void ARealSenseInspector::Tick(float DeltaSeconds) +{ + SCOPED_PROFILER; + + Super::Tick(DeltaSeconds); + + if (bEnablePcl && PclMesh && StartedFlag) + { + PclRenderAccum += DeltaSeconds; + if (PclRenderAccum >= PclRenderRate) + { + PclRenderAccum = 0; + PclCalculateFlag = true; + } + + if (PclReadyFlag) + { + FScopedTryLock Mx; + if (Mx.TryLock(&PointCloudMx)) + { + UpdatePointCloud(); + PclReadyFlag = false; + } + } + } + else if (PclMesh) + { + PclMesh->SetVisibility(false); + } +} + +void ARealSenseInspector::UpdatePointCloud() +{ + SCOPED_PROFILER; + + const size_t NumPoints = RsPoints->size(); + const size_t DensityPoints = (size_t)FMath::RoundToInt(NumPoints * FMath::Clamp(PclDensity, 0.0f, 1.0f)); + if (!DensityPoints) { PclMesh->SetVisibility(false); return; } + + const size_t Step = (size_t)FMath::RoundToInt(NumPoints / (float)DensityPoints); + if (!Step) { PclMesh->SetVisibility(false); return; } + + const size_t RenderPoints = (NumPoints / Step); + const size_t RenderVertices = RenderPoints * 4; + const size_t RenderIndices = RenderPoints * 6; + const size_t MaxBufferIndices = (MAX_BUFFER_U16 / 6) * 6; + const size_t NumSections = (RenderIndices / MaxBufferIndices) + (RenderIndices % MaxBufferIndices ? 1 : 0); + + #if 1 + REALSENSE_TRACE(TEXT( + "PCL Id=%zu NumPoints=%zu " + "RenderPoints=%zu RenderVertices=%zu RenderIndices=%zu NumSections=%zu " + "Density=%.3f Step=%zu"), + PclFramesetId, NumPoints, + RenderPoints, RenderVertices, RenderIndices, NumSections, + PclDensity, Step + ); + #endif + + const rs2::vertex* SrcVertices = RsPoints->get_vertices(); + const rs2::texture_coordinate* SrcTexcoords = RsPoints->get_texture_coordinates(); + + FPointCloudVertex PV[4]; + const float Size = (PclVoxelSize * 0.5f); + size_t SectionId = 0; + size_t PointId = 0; + size_t VertexId = 0; + size_t IndexId = 0; + size_t NumInvalid = 0; + + while (PointId < NumPoints && SectionId < NumSections) + { + if (!PclMeshData.Contains(SectionId)) + { + NAMED_PROFILER("AllocMeshSection"); + PclMeshData.Add(SectionId, MakeUnique()); + PclMeshData[SectionId]->PclVertices.SetNumUninitialized(MAX_BUFFER_U16, false); + PclMeshData[SectionId]->PclIndices.SetNumUninitialized(MAX_BUFFER_U16, false); + } + + if (!PclMesh->DoesSectionExist(SectionId)) + { + NAMED_PROFILER("CreateMeshSection"); + PclMesh->CreateMeshSection(SectionId, PclMeshData[SectionId]->PclVertices, PclMeshData[SectionId]->PclIndices, false, EUpdateFrequency::Frequent); + PclMesh->SetMaterial(SectionId, PclMaterial); + } + + FPointCloudVertex* DstVertices = &(PclMeshData[SectionId]->PclVertices[0]); + int32* DstIndices = &(PclMeshData[SectionId]->PclIndices[0]); + VertexId = 0; + IndexId = 0; + + {NAMED_PROFILER("FillMeshBuffers"); + while (PointId < NumPoints && IndexId + 6 <= MaxBufferIndices) + { + const auto V = SrcVertices[PointId]; + if (!V.z) + { + PointId += Step; + NumInvalid++; + continue; + } + + // the positive x-axis points to the right + // the positive y-axis points down + // the positive z-axis points forward + const FVector Pos = FVector(V.z, V.x, -V.y) * 100.0f * PclScale; // meters to mm + + PV[0].Position = FVector(Pos.X, Pos.Y - Size, Pos.Z - Size); + PV[1].Position = FVector(Pos.X, Pos.Y - Size, Pos.Z + Size); + PV[2].Position = FVector(Pos.X, Pos.Y + Size, Pos.Z + Size); + PV[3].Position = FVector(Pos.X, Pos.Y + Size, Pos.Z - Size); + + PV[0].Normal = FVector(-1, 0, 0); + PV[1].Normal = FVector(-1, 0, 0); + PV[2].Normal = FVector(-1, 0, 0); + PV[3].Normal = FVector(-1, 0, 0); + + PV[0].Tangent = FVector(0, 0, 1); + PV[1].Tangent = FVector(0, 0, 1); + PV[2].Tangent = FVector(0, 0, 1); + PV[3].Tangent = FVector(0, 0, 1); + + const auto T = SrcTexcoords[PointId]; + PV[0].UV0 = FVector2D(T.u, T.v); + PV[1].UV0 = FVector2D(T.u, T.v); + PV[2].UV0 = FVector2D(T.u, T.v); + PV[3].UV0 = FVector2D(T.u, T.v); + + DstVertices[0] = PV[0]; + DstVertices[1] = PV[1]; + DstVertices[2] = PV[2]; + DstVertices[3] = PV[3]; + + DstIndices[0] = VertexId + 0; + DstIndices[1] = VertexId + 2; + DstIndices[2] = VertexId + 1; + DstIndices[3] = VertexId + 0; + DstIndices[4] = VertexId + 3; + DstIndices[5] = VertexId + 2; + + DstVertices += 4; + DstIndices += 6; + VertexId += 4; + IndexId += 6; + PointId += Step; + }} + + if (IndexId > 0) + { + #if 0 + REALSENSE_TRACE(TEXT("section id=%zu points=%zu vert=%zu ind=%zu total=%zu invalid=%zu"), + SectionId, VertexId / 4, VertexId, IndexId, PointId, NumInvalid); + #endif + + NAMED_PROFILER("UpdateMeshSection"); + PclMeshData[SectionId]->PclVertices.SetNumUninitialized(VertexId, false); + PclMeshData[SectionId]->PclIndices.SetNumUninitialized(IndexId, false); + PclMesh->UpdateMeshSection(SectionId, PclMeshData[SectionId]->PclVertices, PclMeshData[SectionId]->PclIndices); // TODO: SLOW AS HELL + PclMesh->SetMeshSectionVisible(SectionId, true); + + SectionId++; + } + } + + const auto NumMeshSections = PclMesh->GetNumSections(); + if (NumMeshSections > SectionId) + { + for (size_t i = SectionId; i < NumMeshSections; ++i) + { + //REALSENSE_TRACE(TEXT("hide id=%zu"), i); + PclMesh->SetMeshSectionVisible(i, false); + } + } + + //REALSENSE_TRACE(TEXT("total=%zu invalid=%zu"), PointId, NumInvalid); + PclMesh->SetVisibility(SectionId != 0); +} + +void ARealSenseInspector::SetPointCloudMaterial(int SectionId, UMaterialInterface* Material) +{ + PclMaterial = Material; + if (PclMesh) + { + for (auto i = 0; i < PclMesh->GetNumSections(); ++i) + { + PclMesh->SetMaterial(i, Material); + } + } +} + +void ARealSenseInspector::EnsureProfileSupported(URealSenseDevice* Device, ERealSenseStreamType StreamType, ERealSenseFormatType Format, FRealSenseStreamMode Mode) +{ + FRealSenseStreamProfile Profile; + Profile.StreamType = StreamType; + Profile.Format = Format; + Profile.Width = Mode.Width; + Profile.Height = Mode.Height; + Profile.Rate = Mode.Rate; + + if (!Device->SupportsProfile(Profile)) + { + throw std::runtime_error("Profile not supported"); + } +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseOption.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseOption.cpp new file mode 100755 index 0000000000..a6d84cdda3 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseOption.cpp @@ -0,0 +1,63 @@ +#include "PCH.h" + +URealSenseOption::URealSenseOption(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + //REALSENSE_TRACE(TEXT("+URealSenseOption_%p"), this); + + Range.Min = 0.0f; + Range.Max = 1.0f; + Range.Step = 0.1f; + Range.Default = 0.5f; +} + +URealSenseOption::~URealSenseOption() +{ + //REALSENSE_TRACE(TEXT("~URealSenseOption_%p"), this); +} + +void URealSenseOption::SetHandle(rs2_options* Handle) +{ + RsOptions = Handle; // rs2_options is managed by URealSenseSensor, just keep a pointer +} + +rs2_options* URealSenseOption::GetHandle() +{ + return RsOptions; +} + +void URealSenseOption::SetType(ERealSenseOptionType NewType) +{ + this->Type = NewType; +} + +void URealSenseOption::QueryData() +{ + rs2::error_ref e; + Name = uestr(rs2_option_to_string((rs2_option)Type)); + Description = uestr(rs2_get_option_description(RsOptions, (rs2_option)Type, &e)); + rs2_get_option_range(RsOptions, (rs2_option)Type, &Range.Min, &Range.Max, &Range.Step, &Range.Default, &e); + QueryValue(); +} + +float URealSenseOption::QueryValue() +{ + rs2::error_ref e; + Value = rs2_get_option(RsOptions, (rs2_option)Type, &e); + if (!e.success()) + { + REALSENSE_ERR(TEXT("rs2_get_option failed: %s"), *uestr(e.get_message())); + } + return Value; +} + +void URealSenseOption::SetValue(float NewValue) +{ + NewValue = FMath::RoundToFloat(NewValue / Range.Step) * Range.Step; + rs2::error_ref e; + rs2_set_option(RsOptions, (rs2_option)Type, NewValue, &e); + if (!e.success()) + { + REALSENSE_ERR(TEXT("rs2_set_option failed: %s"), *uestr(e.get_message())); + } + this->Value = NewValue; +} diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.cpp new file mode 100755 index 0000000000..7d51a01ca3 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.cpp @@ -0,0 +1,97 @@ +#include "PCH.h" +#include "RealSensePluginImpl.h" + +#if defined(PROF_ENABLED) +#include "AllowWindowsPlatformTypes.h" +#include +#include "HideWindowsPlatformTypes.h" +#include "Profiler.inl" +#endif + +DEFINE_LOG_CATEGORY(LogRealSense); + +FRealSensePlugin::FRealSensePlugin() +{ + REALSENSE_TRACE(TEXT("+FRealSensePlugin_%p"), this); +} + +FRealSensePlugin::~FRealSensePlugin() +{ + REALSENSE_TRACE(TEXT("~FRealSensePlugin_%p"), this); + + ReleaseContext(); +} + +void FRealSensePlugin::StartupModule() +{ + REALSENSE_TRACE(TEXT("FRealSensePlugin_%p::StartupModule"), this); + + INIT_PROFILER; + + #if WITH_EDITOR + FRealSenseDetailCustomization::Register(); + #endif +} + +void FRealSensePlugin::ShutdownModule() +{ + REALSENSE_TRACE(TEXT("FRealSensePlugin_%p::ShutdownModule"), this); + + ReleaseContext(); + + #if WITH_EDITOR + FRealSenseDetailCustomization::Unregister(); + #endif + + SHUT_PROFILER; +} + +int FRealSensePlugin::GenId() +{ + FScopeLock Lock(&UniqIdMx); + return UniqId++; +} + +URealSenseContext* FRealSensePlugin::GetContext() +{ + if (!Context) + { + FScopeLock Lock(&ContextMx); + if (!Context) + { + //FPlatformMisc::SetEnvironmentVar(TEXT("OMP_NUM_THREADS"), TEXT("1")); + + rs2::error_ref e; + REALSENSE_TRACE(TEXT("rs2_create_context")); + RsContext = rs2_create_context(RS2_API_VERSION, &e); + if (!e.success()) + { + REALSENSE_ERR(TEXT("rs2_create_context failed: "), *uestr(e.get_message())); + return nullptr; + } + + Context = NewNamedObject(nullptr, TEXT("RealSenseContext")); + Context->AddToRoot(); + Context->SetHandle(RsContext); + Context->QueryDevices(); + } + } + + return Context; +} + +void FRealSensePlugin::ReleaseContext() +{ + FScopeLock Lock(&ContextMx); + + if (RsContext) + { + REALSENSE_TRACE(TEXT("rs2_delete_context %X"), RsContext); + rs2_delete_context(RsContext); + RsContext = nullptr; + } + + Context = nullptr; +} + +IMPLEMENT_MODULE(FRealSensePlugin, RealSense) diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.h new file mode 100755 index 0000000000..06a68e949a --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSensePluginImpl.h @@ -0,0 +1,28 @@ +#pragma once + +#include "RealSensePlugin.h" + +class FRealSensePlugin : public IRealSensePlugin +{ +public: + + FRealSensePlugin(); + virtual ~FRealSensePlugin(); + virtual void StartupModule() override; + virtual void ShutdownModule() override; + virtual int GenId() override; + virtual class URealSenseContext* GetContext() override; + +private: + + void ReleaseContext(); + +private: + + FCriticalSection UniqIdMx; + int UniqId = 0; + + FCriticalSection ContextMx; + struct rs2_context* RsContext = nullptr; + class URealSenseContext* Context = nullptr; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseSensor.cpp b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseSensor.cpp new file mode 100755 index 0000000000..8b5591dc11 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/RealSenseSensor.cpp @@ -0,0 +1,131 @@ +#include "PCH.h" + +URealSenseSensor::URealSenseSensor(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer) +{ + //REALSENSE_TRACE(TEXT("+URealSenseSensor_%p"), this); +} + +URealSenseSensor::~URealSenseSensor() +{ + //REALSENSE_TRACE(TEXT("~URealSenseSensor_%p"), this); + + SetHandle(nullptr); +} + +void URealSenseSensor::SetHandle(rs2_sensor* Handle) +{ + if (RsSensor) rs2_delete_sensor(RsSensor); + RsSensor = Handle; +} + +rs2_sensor* URealSenseSensor::GetHandle() +{ + return RsSensor; +} + +URealSenseOption* URealSenseSensor::NewOption(rs2_options* Handle, ERealSenseOptionType Type, const TCHAR* ObjName) +{ + auto Option = NewNamedObject(this, ObjName); + Option->SetHandle(Handle); + Option->SetType(Type); + return Option; +} + +void URealSenseSensor::QueryData() +{ + Options.Empty(); + StreamProfiles.Empty(); + + rs2::error_ref e; + Name = uestr(rs2_get_sensor_info(RsSensor, RS2_CAMERA_INFO_NAME, &e)); + + for (int i = 0; i < RS2_OPTION_COUNT; ++i) + { + if (SupportsOption((ERealSenseOptionType)i)) + { + Options.Add(NewOption((rs2_options*)RsSensor, (ERealSenseOptionType)i, TEXT("RealSenseOption"))); + } + } + + rs2_stream_profile_list* ProfileList = rs2_get_stream_profiles(RsSensor, &e); + if (ProfileList) + { + const int NumProfiles = rs2_get_stream_profiles_count(ProfileList, &e); + for (int Id = 0; Id < NumProfiles; Id++) + { + const rs2_stream_profile* Profile = rs2_get_stream_profile(ProfileList, Id, &e); + if (Profile) + { + rs2_stream Stream; + rs2_format Format; + int StreamId; + int ProfileId; + int Framerate; + rs2_get_stream_profile_data(Profile, &Stream, &Format, &StreamId, &ProfileId, &Framerate, &e); + + if (e.success()) + { + if ((Stream == RS2_STREAM_DEPTH && Format == RS2_FORMAT_Z16) + || (Stream == RS2_STREAM_COLOR && Format == RS2_FORMAT_RGBA8) + || (Stream == RS2_STREAM_INFRARED && Format == RS2_FORMAT_Y8)) + { + FRealSenseStreamProfile spi; + spi.StreamType = (ERealSenseStreamType)Stream; + spi.Format = (ERealSenseFormatType)Format; + spi.Rate = Framerate; + rs2_get_video_stream_resolution(Profile, &spi.Width, &spi.Height, &e); + + if (e.success()) + { + StreamProfiles.Add(spi); + } + } + } + } + } + } + + for (auto* Option : Options) + { + Option->QueryData(); + } +} + +bool URealSenseSensor::SupportsOption(ERealSenseOptionType Option) +{ + rs2::error_ref e; + const int Value = rs2_supports_option((const rs2_options*)RsSensor, (rs2_option)Option, &e); + return (e.success() && Value == (int)true); +} + +bool URealSenseSensor::SupportsProfile(FRealSenseStreamProfile Profile) +{ + for (const auto& Iter : StreamProfiles) + { + if (Iter.StreamType == Profile.StreamType + && Iter.Format == Profile.Format + && Iter.Width == Profile.Width + && Iter.Height == Profile.Height + && Iter.Rate == Profile.Rate) + { + return true; + } + } + return false; +} + +URealSenseOption* URealSenseSensor::GetOption(ERealSenseOptionType OptionType) +{ + URealSenseOption* Result = nullptr; + + for (auto* Option : Options) + { + if (Option->Type == OptionType) + { + Result = Option; + break; + } + } + + return Result; +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Shared.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Shared.h new file mode 100755 index 0000000000..d8f6610e88 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Private/Shared.h @@ -0,0 +1,62 @@ +#pragma once + +#include "Core.h" +#include "Engine.h" + +#include +#include +#include + +#include "RealSenseNative.h" + +#pragma warning(disable: 4101) // unreferenced local variable + +DECLARE_LOG_CATEGORY_EXTERN(LogRealSense, Log, All); +#define REALSENSE_ERR(Format, ...) UE_LOG(LogRealSense, Error, Format, __VA_ARGS__) + +#if UE_BUILD_SHIPPING + #define REALSENSE_TRACE(Format, ...) +#else + #define REALSENSE_TRACE(Format, ...) UE_LOG(LogRealSense, Display, Format, __VA_ARGS__) +#endif + +#if 0 + // DEV MODE + #define PROF_ENABLED + #define PROF_CHAR TCHAR + #define PROF_TEXT _T + #define PROF_LOG(Format, ...) UE_LOG(LogRealSense, Display, Format, __VA_ARGS__) + #include "Profiler.h" +#else + #define INIT_PROFILER + #define SHUT_PROFILER + #define NAMED_PROFILER(name) + #define SCOPED_PROFILER +#endif + +inline FString uestr(const char* str) { return FString(ANSI_TO_TCHAR(str)); } +inline FString uestr(const std::string& str) { return FString(ANSI_TO_TCHAR(str.c_str())); } + +template +inline T* NewNamedObject(UObject* Owner, const TCHAR* Name) +{ + int Id = IRealSensePlugin::Get().GenId(); + auto UniqName = FString::Printf(TEXT("%s_UID%d"), Name, Id); + //REALSENSE_TRACE(TEXT("NewObject %s"), *UniqName); + auto Object = NewObject((Owner ? Owner : GetTransientPackage()), FName(*UniqName), RF_NoFlags); // RF_Standalone + return Object; +} + +class FScopedTryLock +{ +public: + FScopedTryLock() {} + ~FScopedTryLock() { Unlock(); } + bool TryLock(FCriticalSection* Mutex) { Unlock(); if (Mutex->TryLock()) { _Mutex = Mutex; return true; } return false; } + void Unlock() { if (_Mutex) { _Mutex->Unlock(); _Mutex = nullptr; } } + bool IsLocked() const { return _Mutex ? true : false; } +private: + FScopedTryLock(const FScopedTryLock&); + void operator=(const FScopedTryLock&); + FCriticalSection* _Mutex = nullptr; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseContext.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseContext.h new file mode 100755 index 0000000000..2db5215747 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseContext.h @@ -0,0 +1,39 @@ +#pragma once + +#include "RealSenseTypes.h" +#include "RealSenseContext.generated.h" + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSE_API URealSenseContext : public UObject +{ + GENERATED_UCLASS_BODY() + friend class FRealSensePlugin; + +public: + + virtual ~URealSenseContext(); + struct rs2_context* GetHandle(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + static URealSenseContext* GetRealSense(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + void QueryDevices(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + class URealSenseDevice* GetDeviceById(int Id); + + UFUNCTION(Category="RealSense", BlueprintCallable) + class URealSenseDevice* FindDeviceBySerial(FString Serial); + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + TArray Devices; + +private: + + void SetHandle(struct rs2_context* Handle); + class URealSenseDevice* NewDevice(struct rs2_device* Handle, const TCHAR* Name); + + struct rs2_context* RsContext = nullptr; + FCriticalSection DevicesMx; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseDevice.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseDevice.h new file mode 100755 index 0000000000..455854af54 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseDevice.h @@ -0,0 +1,53 @@ +#pragma once + +#include "RealSenseTypes.h" +#include "RealSenseDevice.generated.h" + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSE_API URealSenseDevice : public UObject +{ + GENERATED_UCLASS_BODY() + friend class URealSenseContext; + friend class ARealSenseInspector; + friend class FRealSenseInspectorCustomization; + +public: + + virtual ~URealSenseDevice(); + struct rs2_device* GetHandle(); + + UFUNCTION(Category = "RealSense", BlueprintCallable) + class URealSenseSensor* GetSensor(ERealSenseStreamType StreamType); + + UFUNCTION(Category="RealSense", BlueprintCallable) + TArray GetStreamProfiles(ERealSenseStreamType StreamType); + + UFUNCTION(Category="RealSense", BlueprintCallable) + bool SupportsProfile(FRealSenseStreamProfile Profile); + + UFUNCTION(Category="RealSense", BlueprintCallable) + bool LoadPreset(const FString& FileName); + + UFUNCTION(Category="RealSense", BlueprintCallable) + bool SavePreset(const FString& FileName); + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FString Name; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FString Serial; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + TArray Sensors; + + static bool LoadPreset(struct rs2_device* Handle, const FString& FileName); + static bool SavePreset(struct rs2_device* Handle, const FString& FileName); + +private: + + void SetHandle(struct rs2_device* Handle); + class URealSenseSensor* NewSensor(struct rs2_sensor* Handle, const TCHAR* Name); + void QueryData(); + + struct rs2_device* RsDevice = nullptr; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseInspector.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseInspector.h new file mode 100755 index 0000000000..f5f26afca8 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseInspector.h @@ -0,0 +1,193 @@ +#pragma once + +#include "RealSenseTypes.h" +#include "RuntimeMeshComponent.h" +#include "RealSenseInspector.generated.h" + +// DECLARE_RUNTIME_MESH_VERTEX(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) +DECLARE_RUNTIME_MESH_VERTEX(FPointCloudVertex, true, true, true, false, 1, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::HighPrecision) + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSE_API ARealSenseInspector : public AActor +{ + GENERATED_UCLASS_BODY() + friend class FRealSenseInspectorWorker; + friend class FRealSenseInspectorCustomization; + +public: + + virtual ~ARealSenseInspector(); + + UPROPERTY(Category="RealSense", BlueprintReadOnly) + class URealSenseContext* Context; + + UPROPERTY(Category="RealSense", BlueprintReadOnly) + class URealSenseDevice* ActiveDevice; + + UFUNCTION(Category="RealSense", BlueprintCallable) + virtual bool Start(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + virtual void Stop(); + + // Device + + UPROPERTY(Category="Device", BlueprintReadWrite, EditAnywhere) + FString DeviceSerial; + + UPROPERTY(Category = "Device", BlueprintReadWrite, EditAnywhere) + ERealSensePipelineMode PipelineMode = ERealSensePipelineMode::CaptureOnly; + + UPROPERTY(Category = "Device", BlueprintReadWrite, EditAnywhere) + FString CaptureFile; + + UPROPERTY(Category="Device", BlueprintReadWrite, EditAnywhere) + bool bEnablePolling = false; + + UPROPERTY(Category="Device", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.001", ClampMax="1", UIMin="0.001", UIMax="1")) + float PollFrameRate = 1.0f / 60.0f; + + UPROPERTY(Category="Device", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.001", ClampMax="10", UIMin="0.001", UIMax="10")) + float WaitFrameTimeout = 1.0f; + + // Depth + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere) + FRealSenseStreamMode DepthConfig; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere) + bool bEnableRawDepth = true; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere) + bool bEnableColorizedDepth = true; + + UPROPERTY(Category = "DepthStream", BlueprintReadWrite, EditAnywhere) + bool bAlignDepthToColor = true; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere) + bool bEqualizeHistogram = true; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0", ClampMax="10", UIMin="0", UIMax="10")) + float DepthMin = 0; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.1", ClampMax="10", UIMin="0.1", UIMax="10")) + float DepthMax = 10; + + UPROPERTY(Category="DepthStream", BlueprintReadWrite, EditAnywhere) + ERealSenseDepthColormap DepthColormap; + + UPROPERTY(Category="DepthStream", BlueprintReadOnly) + float DepthScale = 0.001f; + + UPROPERTY(Category="DepthStream", BlueprintReadOnly) + UTexture2D* DepthRawTexture; + + UPROPERTY(Category="DepthStream", BlueprintReadOnly) + UTexture2D* DepthColorizedTexture; + + // Color + + UPROPERTY(Category="ColorStream", BlueprintReadWrite, EditAnywhere) + FRealSenseStreamMode ColorConfig; + + UPROPERTY(Category="ColorStream", BlueprintReadWrite, EditAnywhere) + bool bEnableColor = true; + + UPROPERTY(Category="ColorStream", BlueprintReadOnly) + UTexture2D* ColorTexture; + + // Infrared + + UPROPERTY(Category="InfraredStream", BlueprintReadWrite, EditAnywhere) + FRealSenseStreamMode InfraredConfig; + + UPROPERTY(Category="InfraredStream", BlueprintReadWrite, EditAnywhere) + bool bEnableInfrared = true; + + UPROPERTY(Category="InfraredStream", BlueprintReadOnly) + UTexture2D* InfraredTexture; + + // PointCloud + + UFUNCTION(Category="PointCloud", BlueprintCallable) + void SetPointCloudMaterial(int SectionId, UMaterialInterface* Material); + + UPROPERTY(Category="PointCloud", BlueprintReadWrite, EditAnywhere) + bool bEnablePcl = false; + + UPROPERTY(Category="PointCloud", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.0", UIMin="0.0")) + float PclScale = 1.0f; + + UPROPERTY(Category="PointCloud", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.0001", ClampMax="10", UIMin="0.0001", UIMax="10")) + float PclVoxelSize = 1.0f; + + UPROPERTY(Category="PointCloud", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.0", ClampMax="1.0", UIMin="0.0", UIMax="1.0")) + float PclDensity = 0.2f; + + UPROPERTY(Category="PointCloud", BlueprintReadWrite, EditAnywhere, meta=(ClampMin="0.016", ClampMax="100.0", UIMin="0.016", UIMax="100.0")) + float PclRenderRate = 5; + + UPROPERTY(Category="PointCloud", BlueprintReadOnly) + class URuntimeMeshComponent* PclMesh; + + UPROPERTY(Category = "PointCloud", BlueprintReadOnly) + class UMaterialInterface* PclMaterial; + +protected: + + // AActor + virtual void Tick(float DeltaSeconds) override; + +private: + + void ThreadProc(); + void PollFrames(); + void WaitFrames(); + void ProcessFrameset(class rs2::frameset* Frameset); + void UpdatePointCloud(); + void EnsureProfileSupported(class URealSenseDevice* Device, ERealSenseStreamType StreamType, ERealSenseFormatType Format, FRealSenseStreamMode Mode); + + FCriticalSection StateMx; + FCriticalSection PointCloudMx; + + TUniquePtr DepthRawDtex; + TUniquePtr DepthColorizedDtex; + TUniquePtr ColorDtex; + TUniquePtr InfraredDtex; + + TUniquePtr RsPipeline; + TUniquePtr RsDevice; + TUniquePtr RsAlign; + + struct FMeshSection + { + TArray PclVertices; + TArray PclIndices; + }; + + TUniquePtr RsPointCloud; + TUniquePtr RsPoints; + TMap< int32, TUniquePtr > PclMeshData; + int PclFramesetId = 0; + float PclRenderAccum = 0; + volatile int PclCalculateFlag = false; + volatile int PclReadyFlag = false; + + TUniquePtr Worker; + TUniquePtr Thread; + volatile int StartedFlag = false; + volatile int FramesetId = 0; +}; + +class FRealSenseInspectorWorker : public FRunnable +{ +public: + FRealSenseInspectorWorker(ARealSenseInspector* Context) { this->Context = Context; } + virtual ~FRealSenseInspectorWorker() {} + virtual bool Init() { return true; } + virtual uint32 Run() { Context->ThreadProc(); return 0; } + virtual void Stop() { Context->StartedFlag = false; } + +private: + ARealSenseInspector* Context = nullptr; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseNative.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseNative.h new file mode 100755 index 0000000000..5dee0be137 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseNative.h @@ -0,0 +1,33 @@ +#pragma once + +#pragma warning(push) +#pragma warning(disable: 4456) +#pragma warning(disable: 4458) +#pragma warning(disable: 4577) +#include +#pragma warning(pop) + +namespace rs2 { + +inline void release_context_ref(rs2_context* Handle) {} // do nothing + +class context_ref : public context { +public: + context_ref(rs2_context* Handle) : context(std::shared_ptr(Handle, release_context_ref)) { } +}; + +class error_ref { +public: + inline error_ref() : m_error(nullptr) {} + inline ~error_ref() { release(); } + inline void release() { if (m_error) { rs2_free_error(m_error); m_error = nullptr; } } + inline rs2_error** operator&() { release(); return &m_error; } + + inline bool success() const { return m_error ? false : true; } + inline const char* get_message() const { return rs2_get_error_message(m_error); } + inline rs2_exception_type get_type() const { return rs2_get_librealsense_exception_type(m_error); } +private: + rs2_error* m_error; +}; + +} // namespace diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseOption.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseOption.h new file mode 100755 index 0000000000..7d512e20d9 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseOption.h @@ -0,0 +1,45 @@ +#pragma once + +#include "RealSenseTypes.h" +#include "RealSenseOption.generated.h" + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSE_API URealSenseOption : public UObject +{ + GENERATED_UCLASS_BODY() + friend class URealSenseSensor; + +public: + + virtual ~URealSenseOption(); + struct rs2_options* GetHandle(); + + float GetCachedValue() const { return Value; } + + UFUNCTION(Category="RealSense", BlueprintCallable) + float QueryValue(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + void SetValue(float Value); + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + ERealSenseOptionType Type; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FString Name; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FString Description; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FRealSenseOptionRange Range; + +private: + + void SetHandle(struct rs2_options* Handle); + void SetType(ERealSenseOptionType Type); + void QueryData(); + + struct rs2_options* RsOptions = nullptr; + float Value = 0; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSensePlugin.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSensePlugin.h new file mode 100755 index 0000000000..ce3398cb17 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSensePlugin.h @@ -0,0 +1,21 @@ +#pragma once + +#include "ModuleManager.h" + +class REALSENSE_API IRealSensePlugin : public IModuleInterface +{ +public: + + static inline IRealSensePlugin& Get() + { + return FModuleManager::LoadModuleChecked("RealSense"); + } + + static inline bool IsAvailable() + { + return FModuleManager::Get().IsModuleLoaded("RealSense"); + } + + virtual int GenId() = 0; + virtual class URealSenseContext* GetContext() = 0; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseSensor.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseSensor.h new file mode 100755 index 0000000000..a52fd06718 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseSensor.h @@ -0,0 +1,42 @@ +#pragma once + +#include "RealSenseTypes.h" +#include "RealSenseSensor.generated.h" + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSE_API URealSenseSensor : public UObject +{ + GENERATED_UCLASS_BODY() + friend class URealSenseDevice; + +public: + + virtual ~URealSenseSensor(); + struct rs2_sensor* GetHandle(); + + UFUNCTION(Category="RealSense", BlueprintCallable) + bool SupportsOption(ERealSenseOptionType Option); + + UFUNCTION(Category="RealSense", BlueprintCallable) + bool SupportsProfile(FRealSenseStreamProfile Profile); + + UFUNCTION(Category = "RealSense", BlueprintCallable) + class URealSenseOption* GetOption(ERealSenseOptionType OptionType); + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + FString Name; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + TArray Options; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + TArray StreamProfiles; + +private: + + void SetHandle(struct rs2_sensor* Handle); + class URealSenseOption* NewOption(struct rs2_options* Handle, ERealSenseOptionType Type, const TCHAR* Name); + void QueryData(); + + struct rs2_sensor* RsSensor = nullptr; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseTypes.h b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseTypes.h new file mode 100755 index 0000000000..57fa4a576e --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/Public/RealSenseTypes.h @@ -0,0 +1,174 @@ +#pragma once + +#include "RealSenseTypes.generated.h" + +namespace rs2 { + class config; + class device; + class pipeline; + class frameset; + class frame; + class align; + class pointcloud; + class points; +} + +// typedef enum rs2_stream +UENUM(Blueprintable) +enum class ERealSenseStreamType : uint8 +{ + STREAM_ANY, + STREAM_DEPTH , /**< Native stream of depth data produced by RealSense device */ + STREAM_COLOR , /**< Native stream of color data captured by RealSense device */ + STREAM_INFRARED , /**< Native stream of infrared data captured by RealSense device */ +}; + +// typedef enum rs2_format +UENUM(Blueprintable) +enum class ERealSenseFormatType : uint8 +{ + FORMAT_ANY , /**< When passed to enable stream, librealsense will try to provide best suited format */ + FORMAT_Z16 , /**< 16-bit linear depth values. The depth is meters is equal to depth scale * pixel value. */ + FORMAT_DISPARITY16 , /**< 16-bit linear disparity values. The depth in meters is equal to depth scale / pixel value. */ + FORMAT_XYZ32F , /**< 32-bit floating point 3D coordinates. */ + FORMAT_YUYV , /**< Standard YUV pixel format as described in https://en.wikipedia.org/wiki/YUV */ + FORMAT_RGB8 , /**< 8-bit red, green and blue channels */ + FORMAT_BGR8 , /**< 8-bit blue, green, and red channels -- suitable for OpenCV */ + FORMAT_RGBA8 , /**< 8-bit red, green and blue channels + constant alpha channel equal to FF */ + FORMAT_BGRA8 , /**< 8-bit blue, green, and red channels + constant alpha channel equal to FF */ + FORMAT_Y8 , /**< 8-bit per-pixel grayscale image */ + FORMAT_Y16 , /**< 16-bit per-pixel grayscale image */ + FORMAT_RAW10 , /**< Four 10-bit luminance values encoded into a 5-byte macropixel */ + FORMAT_RAW16 , /**< 16-bit raw image */ + FORMAT_RAW8 , /**< 8-bit raw image */ + FORMAT_UYVY , /**< Similar to the standard YUYV pixel format, but packed in a different order */ + FORMAT_MOTION_RAW , /**< Raw data from the motion sensor */ + FORMAT_MOTION_XYZ32F , /**< Motion data packed as 3 32-bit float values, for X, Y, and Z axis */ + FORMAT_GPIO_RAW , /**< Raw data from the external sensors hooked to one of the GPIO's */ + FORMAT_6DOF , /**< Pose data packed as floats array, containing translation vector, rotation quaternion and prediction velocities and accelerations vectors */ + FORMAT_DISPARITY32 , /**< 32-bit float-point disparity values. Depth->Disparity conversion : Disparity = Baseline*FocalLength/Depth */ +}; + +// typedef enum rs2_option +UENUM(Blueprintable) +enum class ERealSenseOptionType : uint8 +{ + BACKLIGHT_COMPENSATION , /**< Enable / disable color backlight compensation*/ + BRIGHTNESS , /**< Color image brightness*/ + CONTRAST , /**< Color image contrast*/ + EXPOSURE , /**< Controls exposure time of color camera. Setting any value will disable auto exposure*/ + GAIN , /**< Color image gain*/ + GAMMA , /**< Color image gamma setting*/ + HUE , /**< Color image hue*/ + SATURATION , /**< Color image saturation setting*/ + SHARPNESS , /**< Color image sharpness setting*/ + WHITE_BALANCE , /**< Controls white balance of color image. Setting any value will disable auto white balance*/ + ENABLE_AUTO_EXPOSURE , /**< Enable / disable color image auto-exposure*/ + ENABLE_AUTO_WHITE_BALANCE , /**< Enable / disable color image auto-white-balance*/ + VISUAL_PRESET , /**< Provide access to several recommend sets of option presets for the depth camera */ + LASER_POWER , /**< Power of the F200 / SR300 projector, with 0 meaning projector off*/ + ACCURACY , /**< Set the number of patterns projected per frame. The higher the accuracy value the more patterns projected. Increasing the number of patterns help to achieve better accuracy. Note that this control is affecting the Depth FPS */ + MOTION_RANGE , /**< Motion vs. Range trade-off, with lower values allowing for better motion sensitivity and higher values allowing for better depth range*/ + FILTER_OPTION , /**< Set the filter to apply to each depth frame. Each one of the filter is optimized per the application requirements*/ + CONFIDENCE_THRESHOLD , /**< The confidence level threshold used by the Depth algorithm pipe to set whether a pixel will get a valid range or will be marked with invalid range*/ + EMITTER_ENABLED , /**< Laser Emitter enabled */ + FRAMES_QUEUE_SIZE , /**< Number of frames the user is allowed to keep per stream. Trying to hold-on to more frames will cause frame-drops.*/ + TOTAL_FRAME_DROPS , /**< Total number of detected frame drops from all streams */ + AUTO_EXPOSURE_MODE , /**< Auto-Exposure modes: Static, Anti-Flicker and Hybrid */ + POWER_LINE_FREQUENCY , /**< Power Line Frequency control for anti-flickering Off/50Hz/60Hz/Auto */ + ASIC_TEMPERATURE , /**< Current Asic Temperature */ + ERROR_POLLING_ENABLED , /**< disable error handling */ + PROJECTOR_TEMPERATURE , /**< Current Projector Temperature */ + OUTPUT_TRIGGER_ENABLED , /**< Enable / disable trigger to be outputed from the camera to any external device on every depth frame */ + MOTION_MODULE_TEMPERATURE , /**< Current Motion-Module Temperature */ + DEPTH_UNITS , /**< Number of meters represented by a single depth unit */ + ENABLE_MOTION_CORRECTION , /**< Enable/Disable automatic correction of the motion data */ + AUTO_EXPOSURE_PRIORITY , /**< Allows sensor to dynamically ajust the frame rate depending on lighting conditions */ + COLOR_SCHEME , /**< Color scheme for data visualization */ + HISTOGRAM_EQUALIZATION_ENABLED , /**< Perform histogram equalization post-processing on the depth data */ + MIN_DISTANCE , /**< Minimal distance to the target */ + MAX_DISTANCE , /**< Maximum distance to the target */ + TEXTURE_SOURCE , /**< Texture mapping stream unique ID */ + FILTER_MAGNITUDE , /**< The 2D-filter effect. The specific interpretation is given within the context of the filter */ + FILTER_SMOOTH_ALPHA , /**< 2D-filter parameter controls the weight/radius for smoothing.*/ + FILTER_SMOOTH_DELTA , /**< 2D-filter range/validity threshold*/ + HOLES_FILL , /**< Enhance depth data post-processing with holes filling where appropriate*/ + STEREO_BASELINE , /**< The distance in mm between the first and the second imagers in stereo-based depth cameras*/ + AUTO_EXPOSURE_CONVERGE_STEP , /**< Allows dynamically ajust the converge step value of the target exposure in Auto-Exposure algorithm*/ +}; + +UENUM(Blueprintable) +enum class ERealSensePipelineMode : uint8 +{ + CaptureOnly, + RecordFile, + PlaybackFile, +}; + +UENUM(Blueprintable) +enum class ERealSenseDepthColormap : uint8 +{ + Jet, + Classic, + WhiteToBlack, + BlackToWhite, + Bio, + Cold, + Warm, + Quantized, + Pattern, +}; + +USTRUCT(BlueprintType) +struct FRealSenseStreamProfile +{ + GENERATED_BODY() + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + ERealSenseStreamType StreamType = ERealSenseStreamType::STREAM_ANY; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + ERealSenseFormatType Format = ERealSenseFormatType::FORMAT_ANY; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Width = 640; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Height = 480; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Rate = 30; +}; + +USTRUCT(BlueprintType) +struct FRealSenseStreamMode +{ + GENERATED_BODY() + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Width = 640; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Height = 480; + + UPROPERTY(Category="RealSense", BlueprintReadWrite, EditAnywhere) + int32 Rate = 30; +}; + +USTRUCT(BlueprintType) +struct FRealSenseOptionRange +{ + GENERATED_BODY() + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + float Min; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + float Max; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + float Step; + + UPROPERTY(Category="RealSense", BlueprintReadOnly, VisibleAnywhere) + float Default; +}; diff --git a/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/RealSense.Build.cs b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/RealSense.Build.cs new file mode 100755 index 0000000000..b0fd2e3039 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RealSense/Source/RealSense/RealSense.Build.cs @@ -0,0 +1,47 @@ +using UnrealBuildTool; +using System.IO; + +public class RealSense : ModuleRules +{ + public RealSense(ReadOnlyTargetRules Target) : base(Target) + { + bEnableExceptions = true; + bUseRTTI = false; + + PrivateIncludePaths.AddRange(new string[] { "RealSense/Private" }); + PublicIncludePaths.AddRange(new string[] { "RealSense/Public" }); + + PublicDependencyModuleNames.AddRange( + new string[] { + "Core", + "CoreUObject", + "Engine", + "InputCore", + "RHI", + "RenderCore", + "Slate", + "SlateCore", + "RuntimeMeshComponent" + } + ); + + if (Target.bBuildEditor) + { + PublicDependencyModuleNames.AddRange( + new string[] { + "UnrealEd", + "EditorStyle", + "DesktopWidgets", + "DesktopPlatform" + }); + } + + //string RealSenseDirectory = Environment.GetEnvironmentVariable("RSSDK_DIR"); + string RealSenseDirectory = "c:/Program Files (x86)/Intel RealSense SDK 2.0"; + + PublicIncludePaths.Add(Path.Combine(RealSenseDirectory, "include")); + PublicLibraryPaths.Add(Path.Combine(RealSenseDirectory, "lib", "x64")); + PublicLibraryPaths.Add(Path.Combine(RealSenseDirectory, "bin", "x64")); + PublicAdditionalLibraries.Add("realsense2.lib"); + } +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/.gitignore b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/.gitignore new file mode 100755 index 0000000000..1daca8b50d --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/.gitignore @@ -0,0 +1,77 @@ +# Visual Studio 2015 user specific files +.vs/ + +# Visual Studio 2015 database file +*.VC.db + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/LICENSE b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/LICENSE new file mode 100755 index 0000000000..12b215dd04 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2018 Chris Conway (Koderz) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/README.md b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/README.md new file mode 100755 index 0000000000..75ae3203ad --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/README.md @@ -0,0 +1,54 @@ +# UE4 Runtime Mesh Component + +## The RMC takes a lot of effort to build, extend, and maintain. Please consider [supporting the project!](https://github.com/Koderz/RuntimeMeshComponent/wiki/Support-the-development!) + + +**There's a Discord server for the RMC! https://discord.gg/KGvBBTv** + +**Examples project can be found here https://github.com/Koderz/RuntimeMeshComponent-Examples** + +*** + + + +**The RuntimeMeshComponent, or RMC for short, is a component designed specifically to support rendering and collision on meshes generated at runtime. This could be anything from voxel engines like Minecraft, to custom model viewers, or just supporting loading user models for things like modding. It has numerous different features to support most of the normal rendering needs of a game, as well as ability to support both static collision for things such as terrain, as well as dynamic collision for things that need to be able to move and bounce around!** + +**Now, the RMC is very similar in purpose to the ProceduralMeshComponent or CustomMeshComponent currently found in UE4, but it far surpasses both in features, and efficiency! It on average uses 1/3 the memory of the ProceduralMeshComponent, while also being more efficient to render, and far faster to update mesh data. This is shown by the ability to update a 600k+ vertex mesh in real time! The RMC is also nearly 100% compatible with the ProceduralMeshComponent, while adding many features above what the PMC offers.** + +*Current list of features* +* Full support for async collision cooking (See below for a known problem with UE4 regarding this) +* Brand new normal/tangent calculation utility that is several orders of magnitude faster +* Up to 8 UV channels +* High precision normals support +* Collision only mesh sections. +* Tessellation support +* Navigation mesh support +* Fully configurable vertex structure +* Ability to save individual sections or the entire RMC to disk +* RMC <-> StaticMesHComponent conversions. SMC -> RMC at runtime or in editor. RMC -> SMC in editor. +* Static render path for meshes that don't update frequently, this provides a slightly faster rendering performance. +* 70%+ memory reduction over the ProceduralMeshComponent and CustomMeshComponent +* Visibility and shadowing are configurable per section. +* Separate vertex positions for cases of only needing to update the position. +* Collision has lower overhead compared to ProceduralMeshComponent + + +**The RMC fully supports the cooking speed improvements of UE4.14 and UE4.17 including async cooking. As of right now, the RMC is forced to always use async cooking in a shipping build due to an engine bug which I've submitted a fix to Epic for** + + +For information on installation, usage and everything else, [please read the Wiki](https://github.com/Koderz/UE4RuntimeMeshComponent/wiki/) + +**Some features that I'm looking into now that the core has been rewritten:** +* LOD (Probably with dithering support) +* Dithered transitions for mesh updates +* Instancing support (Probably ISMC style unless there's enough demand for HISMC style support) +* Mesh replication + + +**Supported Engine Versions:** +v1.2 supports engine versions 4.10+ +v2.0 supports engine versions 4.12+ +v3.0 supports engine versions 4.17+ + +*The Runtime Mesh Component should support all UE4 platforms.* +*Collision MAY NOT be available on some platforms (HTML5)* diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Resources/Icon128.png b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Resources/Icon128.png new file mode 100755 index 0000000000000000000000000000000000000000..22f6adc5125ca733869901e2d73efc89907e1371 GIT binary patch literal 18496 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 VQN})mB#;0A002ovPDHLkV1fgun3Vtk literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/RuntimeMeshComponent.uplugin b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/RuntimeMeshComponent.uplugin new file mode 100755 index 0000000000..d882abd98c --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/RuntimeMeshComponent.uplugin @@ -0,0 +1,29 @@ +{ + "FileVersion": 3, + "Version": 32, + "VersionName": "3.2", + "FriendlyName": "Runtime Mesh Component", + "Description": "A component allowing for rendering and interacting with runtime generated geometry.", + "Category": "Rendering", + "CreatedBy": "Chris Conway (Koderz)", + "CreatedByURL": "https://forums.unrealengine.com/member.php?141752-Koderz", + "DocsURL": "https://github.com/Koderz/UE4RuntimeMeshComponent/wiki", + "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/ad0b45a6a31e462aba7cf7c790a9c125", + "SupportURL": "https://github.com/Koderz/UE4RuntimeMeshComponent/issues", + "EnabledByDefault": true, + "CanContainContent": false, + "IsBetaVersion": true, + "Installed": false, + "Modules": [ + { + "Name": "RuntimeMeshComponent", + "Type": "Runtime", + "LoadingPhase": "Default" + }, + { + "Name": "RuntimeMeshComponentEditor", + "Type": "Editor", + "LoadingPhase": "Default" + } + ] +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMesh.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMesh.cpp new file mode 100755 index 0000000000..17e319cf75 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMesh.cpp @@ -0,0 +1,295 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMesh.h" +#include "RuntimeMeshComponentPlugin.h" +#include "PhysicsEngine/BodySetup.h" +#include "PhysicsEngine/PhysicsSettings.h" +#include "Physics/IPhysXCookingModule.h" +#include "RuntimeMeshComponent.h" +#include "RuntimeMeshProxy.h" +#include "RuntimeMeshBuilder.h" +#include "RuntimeMeshLibrary.h" + +DECLARE_CYCLE_STAT(TEXT("RM - Collision Update"), STAT_RuntimeMesh_CollisionUpdate, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Async Collision Cook Finish"), STAT_RuntimeMesh_AsyncCollisionFinish, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Collision Finalize"), STAT_RuntimeMesh_CollisionFinalize, STATGROUP_RuntimeMesh); + + + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshCollisionCookTickObject +void FRuntimeMeshCollisionCookTickObject::Tick(float DeltaTime) +{ + URuntimeMesh* Mesh = Owner.Get(); + if (Mesh && Mesh->bCollisionIsDirty) + { + Mesh->UpdateCollision(); + Mesh->bCollisionIsDirty = false; + } +} + +bool FRuntimeMeshCollisionCookTickObject::IsTickable() const +{ + URuntimeMesh* Mesh = Owner.Get(); + if (Mesh) + { + return Mesh->bCollisionIsDirty; + } + return false; +} + +TStatId FRuntimeMeshCollisionCookTickObject::GetStatId() const +{ + return TStatId(); +} + + +UWorld* FRuntimeMeshCollisionCookTickObject::GetTickableGameObjectWorld() const +{ + URuntimeMesh* Mesh = Owner.Get(); + if (Mesh) + { + return Mesh->GetWorld(); + } + return nullptr; +} + +////////////////////////////////////////////////////////////////////////// +// URuntimeMesh + + +URuntimeMesh::URuntimeMesh(const FObjectInitializer& ObjectInitializer) + : UObject(ObjectInitializer) + , Data(new FRuntimeMeshData()) + , bCollisionIsDirty(false) + , bUseComplexAsSimpleCollision(true) + , bUseAsyncCooking(false) + , bShouldSerializeMeshData(true) + , CollisionMode(ERuntimeMeshCollisionCookingMode::CookingPerformance) + , BodySetup(nullptr) +{ + Data->Setup(TWeakObjectPtr(this)); +} + +void URuntimeMesh::CookCollisionNow() +{ + check(IsInGameThread()); + + if (bCollisionIsDirty) + { + UpdateCollision(true); + bCollisionIsDirty = false; + } +} +void URuntimeMesh::RegisterLinkedComponent(URuntimeMeshComponent* NewComponent) +{ + LinkedComponents.AddUnique(NewComponent); +} + +void URuntimeMesh::UnRegisterLinkedComponent(URuntimeMeshComponent* ComponentToRemove) +{ + check(LinkedComponents.Contains(ComponentToRemove)); + + LinkedComponents.RemoveSingleSwap(ComponentToRemove, true); +} + + + +bool URuntimeMesh::GetPhysicsTriMeshData(struct FTriMeshCollisionData* CollisionData, bool InUseAllTriData) +{ + CollisionData->bFastCook = CollisionMode == ERuntimeMeshCollisionCookingMode::CookingPerformance; + + return GetRuntimeMeshData()->GetPhysicsTriMeshData(CollisionData, InUseAllTriData); +} + +bool URuntimeMesh::ContainsPhysicsTriMeshData(bool InUseAllTriData) const +{ + return GetRuntimeMeshData()->ContainsPhysicsTriMeshData(InUseAllTriData); +} + + + +void URuntimeMesh::Serialize(FArchive& Ar) +{ + Super::Serialize(Ar); + + // Serialize the entire data object. + Ar.UsingCustomVersion(FRuntimeMeshVersion::GUID); + Ar << Data.Get(); +} + +void URuntimeMesh::PostLoad() +{ + Super::PostLoad(); + + UpdateLocalBounds(); + MarkCollisionDirty(); +} + +UMaterialInterface* URuntimeMesh::GetMaterialFromCollisionFaceIndex(int32 FaceIndex, int32& SectionIndex) const +{ + SectionIndex = GetRuntimeMeshData()->GetSectionFromCollisionFaceIndex(FaceIndex); + + if (Materials.IsValidIndex(SectionIndex)) + { + return Materials[SectionIndex]; + } + return nullptr; +} + +void URuntimeMesh::MarkCollisionDirty() +{ + // Flag the collision as dirty + bCollisionIsDirty = true; + + if (!CookTickObject.IsValid()) + { + CookTickObject = MakeUnique(TWeakObjectPtr(this)); + } +} + +UBodySetup* URuntimeMesh::CreateNewBodySetup() +{ + UBodySetup* NewBodySetup = NewObject(this, NAME_None, (IsTemplate() ? RF_Public : RF_NoFlags)); + NewBodySetup->BodySetupGuid = FGuid::NewGuid(); + + return NewBodySetup; +} + +void URuntimeMesh::EnsureBodySetupCreated() +{ + if (BodySetup == nullptr) + { + BodySetup = CreateNewBodySetup(); + } +} + +void URuntimeMesh::CopyCollisionElementsToBodySetup(UBodySetup* Setup) +{ + GetRuntimeMeshData()->CopyCollisionElementsToBodySetup(Setup); +} + +void URuntimeMesh::SetBasicBodySetupParameters(UBodySetup* Setup) +{ + Setup->BodySetupGuid = FGuid::NewGuid(); + + Setup->bGenerateMirroredCollision = false; + Setup->bDoubleSidedGeometry = true; + Setup->CollisionTraceFlag = bUseComplexAsSimpleCollision ? CTF_UseComplexAsSimple : CTF_UseDefault; +} + +void URuntimeMesh::UpdateCollision(bool bForceCookNow) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CollisionUpdate); + check(IsInGameThread()); + + UWorld* World = GetWorld(); + const bool bShouldCookAsync = !bForceCookNow && World && World->IsGameWorld() && bUseAsyncCooking; + + if (bShouldCookAsync) + { + UBodySetup* CurrentBodySetup = CreateNewBodySetup(); + AsyncBodySetupQueue.Add(CurrentBodySetup); + + SetBasicBodySetupParameters(CurrentBodySetup); + CopyCollisionElementsToBodySetup(CurrentBodySetup); + + CurrentBodySetup->CreatePhysicsMeshesAsync( + FOnAsyncPhysicsCookFinished::CreateUObject(this, &URuntimeMesh::FinishPhysicsAsyncCook, CurrentBodySetup)); + } + else + { + AsyncBodySetupQueue.Empty(); + UBodySetup* NewBodySetup = CreateNewBodySetup(); + + // Change body setup guid + NewBodySetup->BodySetupGuid = FGuid::NewGuid(); + + SetBasicBodySetupParameters(NewBodySetup); + CopyCollisionElementsToBodySetup(NewBodySetup); + + // Update meshes + NewBodySetup->bHasCookedCollisionData = true; + NewBodySetup->InvalidatePhysicsData(); + NewBodySetup->CreatePhysicsMeshes(); + + BodySetup = NewBodySetup; + FinalizeNewCookedData(); + } +} + +void URuntimeMesh::FinishPhysicsAsyncCook(UBodySetup* FinishedBodySetup) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_AsyncCollisionFinish); + check(IsInGameThread()); + + int32 FoundIdx; + if (AsyncBodySetupQueue.Find(FinishedBodySetup, FoundIdx)) + { + // The new body was found in the array meaning it's newer so use it + BodySetup = FinishedBodySetup; + + // Shift down all remaining body setups, removing any old setups + for (int32 Index = FoundIdx + 1; Index < AsyncBodySetupQueue.Num(); Index++) + { + AsyncBodySetupQueue[Index - (FoundIdx + 1)] = AsyncBodySetupQueue[Index]; + AsyncBodySetupQueue[Index] = nullptr; + } + AsyncBodySetupQueue.SetNum(AsyncBodySetupQueue.Num() - (FoundIdx + 1)); + + FinalizeNewCookedData(); + } +} + +void URuntimeMesh::FinalizeNewCookedData() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CollisionFinalize); + check(IsInGameThread()); + + // Alert all linked components so they can update their physics state. + DoForAllLinkedComponents([](URuntimeMeshComponent* Mesh) + { + Mesh->NewCollisionMeshReceived(); + }); + + // Call user event to notify of collision updated. + if (CollisionUpdated.IsBound()) + { + CollisionUpdated.Broadcast(); + } +} + +void URuntimeMesh::UpdateLocalBounds() +{ + DoForAllLinkedComponents([](URuntimeMeshComponent* Mesh) + { + Mesh->NewBoundsReceived(); + }); +} + +void URuntimeMesh::ForceProxyRecreate() +{ + DoForAllLinkedComponents([](URuntimeMeshComponent* Mesh) + { + Mesh->ForceProxyRecreate(); + }); +} + +void URuntimeMesh::SendSectionCreation(int32 SectionIndex) +{ + DoForAllLinkedComponents([SectionIndex](URuntimeMeshComponent* Mesh) + { + Mesh->SendSectionCreation(SectionIndex); + }); +} + +void URuntimeMesh::SendSectionPropertiesUpdate(int32 SectionIndex) +{ + DoForAllLinkedComponents([SectionIndex](URuntimeMeshComponent* Mesh) + { + Mesh->SendSectionPropertiesUpdate(SectionIndex); + }); +} + + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshActor.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshActor.cpp new file mode 100755 index 0000000000..a7eed85dd8 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshActor.cpp @@ -0,0 +1,89 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshActor.h" +#include "RuntimeMeshComponent.h" +#include "RuntimeMeshComponentPlugin.h" + + +ARuntimeMeshActor::ARuntimeMeshActor(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) + , bRunGenerateMeshesOnConstruction(true) + , bRunGenerateMeshesOnBeginPlay(false) +{ + bCanBeDamaged = false; + + RuntimeMeshComponent = CreateDefaultSubobject(TEXT("RuntimeMeshComponent0")); + RuntimeMeshComponent->SetCollisionProfileName(UCollisionProfile::BlockAll_ProfileName); + RuntimeMeshComponent->Mobility = EComponentMobility::Static; + RuntimeMeshComponent->bGenerateOverlapEvents = false; + + RootComponent = RuntimeMeshComponent; +} + +ERuntimeMeshMobility ARuntimeMeshActor::GetRuntimeMeshMobility() +{ + if (RuntimeMeshComponent) + { + return RuntimeMeshComponent->GetRuntimeMeshMobility(); + } + return ERuntimeMeshMobility::Static; +} + +void ARuntimeMeshActor::SetRuntimeMeshMobility(ERuntimeMeshMobility NewMobility) +{ + if (RuntimeMeshComponent) + { + RuntimeMeshComponent->SetRuntimeMeshMobility(NewMobility); + } +} + +void ARuntimeMeshActor::SetMobility(EComponentMobility::Type InMobility) +{ + if (RuntimeMeshComponent) + { + RuntimeMeshComponent->SetMobility(InMobility); + } +} + +EComponentMobility::Type ARuntimeMeshActor::GetMobility() +{ + if (RuntimeMeshComponent) + { + return RuntimeMeshComponent->Mobility; + } + return EComponentMobility::Static; +} + +void ARuntimeMeshActor::OnConstruction(const FTransform& Transform) +{ + if (bRunGenerateMeshesOnConstruction) + { + GenerateMeshes(); + } +} + +void ARuntimeMeshActor::BeginPlay() +{ + bool bIsGameWorld = GetWorld() && GetWorld()->IsGameWorld() && !GetWorld()->IsPreviewWorld() && !GetWorld()->IsEditorWorld(); + + bool bHadSerializedMeshData = false; + if (RuntimeMeshComponent) + { + URuntimeMesh* Mesh = RuntimeMeshComponent->GetRuntimeMesh(); + if (Mesh) + { + bHadSerializedMeshData = Mesh->HasSerializedMeshData(); + } + } + + if ((bIsGameWorld && !bHadSerializedMeshData) || bRunGenerateMeshesOnBeginPlay) + { + GenerateMeshes(); + } +} + +void ARuntimeMeshActor::GenerateMeshes_Implementation() +{ + +} + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshBuilder.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshBuilder.cpp new file mode 100755 index 0000000000..40bb01d95b --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshBuilder.cpp @@ -0,0 +1,680 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshBuilder.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMeshData.h" + + +template +FORCEINLINE static TYPE& GetStreamAccess(TArray* Data, int32 Index, int32 Stride, int32 Offset) +{ + int32 StartPosition = (Index * Stride + Offset); + return *((TYPE*)&(*Data)[StartPosition]); +} + + +template +struct FRuntimeMeshEightUV +{ + TStaticArray UVs; +}; + +static_assert(sizeof(FRuntimeMeshEightUV) == (8 * sizeof(FVector2D)), "Incorrect size for 8 UV struct"); +static_assert(sizeof(FRuntimeMeshEightUV) == (8 * sizeof(FVector2DHalf)), "Incorrect size for 8 UV struct"); + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshVerticesAccessor + +FRuntimeMeshVerticesAccessor::FRuntimeMeshVerticesAccessor(TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, bool bInIsReadonly) + : bIsInitialized(false) + , bIsReadonly(bInIsReadonly) + , PositionStream(PositionStreamData) + , TangentStream(TangentStreamData), bTangentHighPrecision(false), TangentSize(0), TangentStride(0) + , UVStream(UVStreamData), bUVHighPrecision(false), UVChannelCount(0), UVSize(0), UVStride(0) + , ColorStream(ColorStreamData) +{ +} + +FRuntimeMeshVerticesAccessor::FRuntimeMeshVerticesAccessor(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, + TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, bool bInIsReadonly) + : bIsInitialized(false) + , bIsReadonly(bInIsReadonly) + , PositionStream(PositionStreamData) + , TangentStream(TangentStreamData), bTangentHighPrecision(false), TangentSize(0), TangentStride(0) + , UVStream(UVStreamData), bUVHighPrecision(false), UVChannelCount(0), UVSize(0), UVStride(0) + , ColorStream(ColorStreamData) +{ + Initialize(bInTangentsHighPrecision, bInUVsHighPrecision, bInUVCount); +} + +FRuntimeMeshVerticesAccessor::~FRuntimeMeshVerticesAccessor() +{ +} + +void FRuntimeMeshVerticesAccessor::Initialize(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount) +{ + bIsInitialized = true; + const_cast(bTangentHighPrecision) = bInTangentsHighPrecision; + const_cast(TangentSize) = (bTangentHighPrecision ? sizeof(FPackedRGBA16N) : sizeof(FPackedNormal)); + const_cast(TangentStride) = TangentSize * 2; + + const_cast(bUVHighPrecision) = bInUVsHighPrecision; + const_cast(UVChannelCount) = bInUVCount; + const_cast(UVSize) = (bUVHighPrecision ? sizeof(FVector2D) : sizeof(FVector2DHalf)); + const_cast(UVStride) = UVSize * UVChannelCount; +} + +int32 FRuntimeMeshVerticesAccessor::NumVertices() const +{ + check(bIsInitialized); + int32 Count = PositionStream->Num() / PositionStride; + return Count; +} + +int32 FRuntimeMeshVerticesAccessor::NumUVChannels() const +{ + check(bIsInitialized); + return UVChannelCount; +} + +void FRuntimeMeshVerticesAccessor::EmptyVertices(int32 Slack /*= 0*/) +{ + check(bIsInitialized); + check(!bIsReadonly); + PositionStream->Empty(Slack * PositionStride); + TangentStream->Empty(Slack * TangentStride); + UVStream->Empty(Slack * UVSize); + ColorStream->Empty(Slack * ColorStride); +} + +void FRuntimeMeshVerticesAccessor::SetNumVertices(int32 NewNum) +{ + check(bIsInitialized); + check(!bIsReadonly); + PositionStream->SetNumZeroed(NewNum * PositionStride); + TangentStream->SetNumZeroed(NewNum * TangentStride); + UVStream->SetNumZeroed(NewNum * UVStride); + ColorStream->SetNumZeroed(NewNum * ColorStride); +} + +int32 FRuntimeMeshVerticesAccessor::AddVertex(FVector InPosition) +{ + check(bIsInitialized); + check(!bIsReadonly); + int32 NewIndex = AddSingleVertex(); + + SetPosition(NewIndex, InPosition); + + return NewIndex; +} + +FVector FRuntimeMeshVerticesAccessor::GetPosition(int32 Index) const +{ + check(bIsInitialized); + return GetStreamAccess(PositionStream, Index, PositionStride, 0); +} + +FVector4 FRuntimeMeshVerticesAccessor::GetNormal(int32 Index) const +{ + check(bIsInitialized); + if (bTangentHighPrecision) + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal.ToFVector4(); +#else + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal; +#endif + } + else + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal.ToFVector4(); +#else + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal; +#endif + } +} + +FVector FRuntimeMeshVerticesAccessor::GetTangent(int32 Index) const +{ + check(bIsInitialized); + if (bTangentHighPrecision) + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent.ToFVector4(); +#else + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent; +#endif + } + else + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent.ToFVector4(); +#else + return GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent; +#endif + } +} + +FColor FRuntimeMeshVerticesAccessor::GetColor(int32 Index) const +{ + check(bIsInitialized); + return GetStreamAccess(ColorStream, Index, ColorStride, 0); +} + +FVector2D FRuntimeMeshVerticesAccessor::GetUV(int32 Index, int32 Channel) const +{ + check(bIsInitialized); + check(Channel >= 0 && Channel < UVChannelCount); + if (bUVHighPrecision) + { + return GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[Channel]; + } + else + { + return GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[Channel]; + } +} + +void FRuntimeMeshVerticesAccessor::SetPosition(int32 Index, FVector Value) +{ + check(bIsInitialized); + GetStreamAccess(PositionStream, Index, PositionStride, 0) = Value; +} + +void FRuntimeMeshVerticesAccessor::SetNormal(int32 Index, const FVector4& Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (bTangentHighPrecision) + { + GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal = Value; + } + else + { + GetStreamAccess(TangentStream, Index, TangentStride, 0).Normal = Value; + } +} + +void FRuntimeMeshVerticesAccessor::SetTangent(int32 Index, FVector Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (bTangentHighPrecision) + { + GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent = Value; + } + else + { + GetStreamAccess(TangentStream, Index, TangentStride, 0).Tangent = Value; + } +} + +void FRuntimeMeshVerticesAccessor::SetTangent(int32 Index, FRuntimeMeshTangent Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (bTangentHighPrecision) + { + FRuntimeMeshTangentsHighPrecision& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + FVector4 NewNormal = Tangents.Normal.ToFVector4(); +#else + FVector4 NewNormal = Tangents.Normal; +#endif + NewNormal.W = Value.bFlipTangentY ? -1.0f : 1.0f; + Tangents.Normal = NewNormal; + Tangents.Tangent = Value.TangentX; + } + else + { + FRuntimeMeshTangents& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + FVector4 NewNormal = Tangents.Normal.ToFVector4(); +#else + FVector4 NewNormal = Tangents.Normal; +#endif + NewNormal.W = Value.bFlipTangentY ? -1.0f : 1.0f; + Tangents.Normal = NewNormal; + Tangents.Tangent = Value.TangentX; + } +} + +void FRuntimeMeshVerticesAccessor::SetColor(int32 Index, FColor Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + GetStreamAccess(ColorStream, Index, ColorStride, 0) = Value; +} + +void FRuntimeMeshVerticesAccessor::SetUV(int32 Index, FVector2D Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + check(UVChannelCount > 0); + if (bUVHighPrecision) + { + GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[0] = Value; + } + else + { + GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[0] = Value; + } +} + +void FRuntimeMeshVerticesAccessor::SetUV(int32 Index, int32 Channel, FVector2D Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + check(Channel >= 0 && Channel < UVChannelCount); + if (bUVHighPrecision) + { + GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[Channel] = Value; + } + else + { + GetStreamAccess>(UVStream, Index, UVStride, 0).UVs[Channel] = Value; + } +} + +void FRuntimeMeshVerticesAccessor::SetNormalTangent(int32 Index, FVector Normal, FRuntimeMeshTangent Tangent) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (bTangentHighPrecision) + { + FRuntimeMeshTangentsHighPrecision& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = FVector4(Normal, Tangent.bFlipTangentY ? -1 : 1); + Tangents.Tangent = Tangent.TangentX; + } + else + { + FRuntimeMeshTangents& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = FVector4(Normal, Tangent.bFlipTangentY ? -1 : 1); + Tangents.Tangent = Tangent.TangentX; + } +} + +void FRuntimeMeshVerticesAccessor::SetTangents(int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (bTangentHighPrecision) + { + FRuntimeMeshTangentsHighPrecision& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = FVector4(TangentZ, GetBasisDeterminantSign(TangentX, TangentY, TangentZ)); + Tangents.Tangent = TangentX; + } + else + { + FRuntimeMeshTangents& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = FVector4(TangentZ, GetBasisDeterminantSign(TangentX, TangentY, TangentZ)); + Tangents.Tangent = TangentX; + } +} + + + + + +FRuntimeMeshAccessorVertex FRuntimeMeshVerticesAccessor::GetVertex(int32 Index) const +{ + check(bIsInitialized); + FRuntimeMeshAccessorVertex Vertex; + + Vertex.Position = GetStreamAccess(PositionStream, Index, PositionStride, 0); + + if (bTangentHighPrecision) + { + FRuntimeMeshTangentsHighPrecision& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + Vertex.Normal = Tangents.Normal.ToFVector4(); + Vertex.Tangent = Tangents.Tangent.ToFVector(); +#else + Vertex.Normal = Tangents.Normal; + Vertex.Tangent = Tangents.Tangent; +#endif + } + else + { + FRuntimeMeshTangents& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + Vertex.Normal = Tangents.Normal.ToFVector4(); + Vertex.Tangent = Tangents.Tangent.ToFVector(); +#else + Vertex.Normal = Tangents.Normal; + Vertex.Tangent = Tangents.Tangent; +#endif + } + + Vertex.Color = GetStreamAccess(ColorStream, Index, ColorStride, 0); + + Vertex.UVs.SetNum(NumUVChannels()); + if (bUVHighPrecision) + { + FRuntimeMeshEightUV& UVs = GetStreamAccess>(UVStream, Index, UVStride, 0); + for (int32 UVIndex = 0; UVIndex < Vertex.UVs.Num(); UVIndex++) + { + Vertex.UVs[UVIndex] = UVs.UVs[UVIndex]; + } + } + else + { + FRuntimeMeshEightUV& UVs = GetStreamAccess>(UVStream, Index, UVStride, 0); + for (int32 UVIndex = 0; UVIndex < Vertex.UVs.Num(); UVIndex++) + { + Vertex.UVs[UVIndex] = UVs.UVs[UVIndex]; + } + } + + return Vertex; +} + +void FRuntimeMeshVerticesAccessor::SetVertex(int32 Index, const FRuntimeMeshAccessorVertex& Vertex) +{ + check(bIsInitialized); + check(!bIsReadonly); + + GetStreamAccess(PositionStream, Index, PositionStride, 0) = Vertex.Position; + + if (bTangentHighPrecision) + { + FRuntimeMeshTangentsHighPrecision& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = Vertex.Normal; + Tangents.Tangent = Vertex.Tangent; + } + else + { + FRuntimeMeshTangents& Tangents = GetStreamAccess(TangentStream, Index, TangentStride, 0); + Tangents.Normal = Vertex.Normal; + Tangents.Tangent = Vertex.Tangent; + } + + GetStreamAccess(ColorStream, Index, ColorStride, 0) = Vertex.Color; + + if (bUVHighPrecision) + { + FRuntimeMeshEightUV& UVs = GetStreamAccess>(UVStream, Index, UVStride, 0); + for (int32 UVIndex = 0; UVIndex < Vertex.UVs.Num(); UVIndex++) + { + UVs.UVs[UVIndex] = Vertex.UVs[UVIndex]; + } + } + else + { + FRuntimeMeshEightUV& UVs = GetStreamAccess>(UVStream, Index, UVStride, 0); + for (int32 UVIndex = 0; UVIndex < Vertex.UVs.Num(); UVIndex++) + { + UVs.UVs[UVIndex] = Vertex.UVs[UVIndex]; + } + } +} + +int32 FRuntimeMeshVerticesAccessor::AddVertex(const FRuntimeMeshAccessorVertex& Vertex) +{ + check(bIsInitialized); + check(!bIsReadonly); + int32 NewIndex = AddSingleVertex(); + SetVertex(NewIndex, Vertex); + return NewIndex; +} + + + +int32 FRuntimeMeshVerticesAccessor::AddSingleVertex() +{ + int32 NewIndex = NumVertices(); + + PositionStream->AddZeroed(PositionStride); + TangentStream->AddZeroed(TangentStride); + UVStream->AddZeroed(UVStride); + ColorStream->AddZeroed(ColorStride); + + return NewIndex; +} + + + + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshIndicesAccessor + +FRuntimeMeshIndicesAccessor::FRuntimeMeshIndicesAccessor(TArray* IndexStreamData, bool bInIsReadonly) + : bIsInitialized(false) + , bIsReadonly(bInIsReadonly) + , IndexStream(IndexStreamData), b32BitIndices(false) +{ +} + +FRuntimeMeshIndicesAccessor::FRuntimeMeshIndicesAccessor(bool bIn32BitIndices, TArray* IndexStreamData, bool bInIsReadonly) + : bIsInitialized(false) + , bIsReadonly(bInIsReadonly) + , IndexStream(IndexStreamData), b32BitIndices(false) +{ + Initialize(bIn32BitIndices); +} + +FRuntimeMeshIndicesAccessor::~FRuntimeMeshIndicesAccessor() +{ +} + +void FRuntimeMeshIndicesAccessor::Initialize(bool bIn32BitIndices) +{ + bIsInitialized = true; + b32BitIndices = bIn32BitIndices; + + check((IndexStream->Num() % (b32BitIndices ? 4 : 2)) == 0); +} + +int32 FRuntimeMeshIndicesAccessor::NumIndices() const +{ + check(bIsInitialized); + return IndexStream->Num() / GetIndexStride(); +} + +void FRuntimeMeshIndicesAccessor::EmptyIndices(int32 Slack) +{ + check(bIsInitialized); + check(!bIsReadonly); + IndexStream->Empty(Slack * GetIndexStride()); +} + +void FRuntimeMeshIndicesAccessor::SetNumIndices(int32 NewNum) +{ + check(bIsInitialized); + check(!bIsReadonly); + IndexStream->SetNumZeroed(NewNum * GetIndexStride()); +} + +int32 FRuntimeMeshIndicesAccessor::AddIndex(int32 NewIndex) +{ + check(bIsInitialized); + check(!bIsReadonly); + int32 NewPosition = NumIndices(); + IndexStream->AddZeroed(GetIndexStride()); + SetIndex(NewPosition, NewIndex); + return NewPosition; +} + +int32 FRuntimeMeshIndicesAccessor::AddTriangle(int32 Index0, int32 Index1, int32 Index2) +{ + check(bIsInitialized); + check(!bIsReadonly); + int32 NewPosition = NumIndices(); + IndexStream->AddZeroed(GetIndexStride() * 3); + SetIndex(NewPosition + 0, Index0); + SetIndex(NewPosition + 1, Index1); + SetIndex(NewPosition + 2, Index2); + return NewPosition; +} + +int32 FRuntimeMeshIndicesAccessor::GetIndex(int32 Index) const +{ + check(bIsInitialized); + if (b32BitIndices) + { + return GetStreamAccess(IndexStream, Index, sizeof(int32), 0); + } + else + { + return GetStreamAccess(IndexStream, Index, sizeof(uint16), 0); + } +} + +void FRuntimeMeshIndicesAccessor::SetIndex(int32 Index, int32 Value) +{ + check(bIsInitialized); + check(!bIsReadonly); + if (b32BitIndices) + { + GetStreamAccess(IndexStream, Index, sizeof(int32), 0) = Value; + } + else + { + GetStreamAccess(IndexStream, Index, sizeof(uint16), 0) = Value; + } +} + + + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshAccessor + +FRuntimeMeshAccessor::FRuntimeMeshAccessor(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices, TArray* PositionStreamData, + TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, bool bInIsReadonly) + : FRuntimeMeshVerticesAccessor(bInTangentsHighPrecision, bInUVsHighPrecision, bInUVCount, PositionStreamData, TangentStreamData, UVStreamData, ColorStreamData, bInIsReadonly) + , FRuntimeMeshIndicesAccessor(bIn32BitIndices, IndexStreamData, bInIsReadonly) +{ + +} + +FRuntimeMeshAccessor::~FRuntimeMeshAccessor() +{ +} + +FRuntimeMeshAccessor::FRuntimeMeshAccessor(TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, bool bInIsReadonly) + : FRuntimeMeshVerticesAccessor(PositionStreamData, TangentStreamData, UVStreamData, ColorStreamData, bInIsReadonly) + , FRuntimeMeshIndicesAccessor(IndexStreamData, bInIsReadonly) +{ + +} + +void FRuntimeMeshAccessor::Initialize(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices) +{ + FRuntimeMeshVerticesAccessor::Initialize(bInTangentsHighPrecision, bInUVsHighPrecision, bInUVCount); + FRuntimeMeshIndicesAccessor::Initialize(bIn32BitIndices); +} + + + + +void FRuntimeMeshAccessor::CopyTo(const TSharedPtr& Other, bool bClearDestination) const +{ + if (bClearDestination) + { + Other->EmptyVertices(NumVertices()); + Other->EmptyIndices(NumIndices()); + } + + // TODO: Make this faster using short paths when the structures are the same. + + int32 StartVertex = Other->NumVertices(); + int32 NumVerts = NumVertices(); + int32 NumUVs = FMath::Min(NumUVChannels(), Other->NumUVChannels()); + + for (int32 Index = 0; Index < NumVerts; Index++) + { + int32 NewIndex = Other->AddVertex(GetPosition(Index)); + Other->SetNormal(NewIndex, GetNormal(Index)); + Other->SetTangent(NewIndex, GetTangent(Index)); + Other->SetColor(NewIndex, GetColor(Index)); + for (int32 UVIndex = 0; UVIndex < NumUVs; UVIndex++) + { + Other->SetUV(NewIndex, UVIndex, GetUV(Index, UVIndex)); + } + } + + int32 NumInds = NumIndices(); + for (int32 Index = 0; Index < NumInds; Index++) + { + Other->AddIndex(GetIndex(Index) + StartVertex); + } +} + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshBuilder + +FRuntimeMeshBuilder::FRuntimeMeshBuilder(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices) + : FRuntimeMeshAccessor(&PositionStream, &TangentStream, &UVStream, &ColorStream, &IndexStream, false) +{ + FRuntimeMeshAccessor::Initialize(bInTangentsHighPrecision, bInUVsHighPrecision, bInUVCount, bIn32BitIndices); +} + +FRuntimeMeshBuilder::~FRuntimeMeshBuilder() +{ + +} + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshScopedUpdater + +FRuntimeMeshScopedUpdater::FRuntimeMeshScopedUpdater(const FRuntimeMeshDataPtr& InLinkedMeshData, int32 InSectionIndex, ESectionUpdateFlags InUpdateFlags, bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices, + TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, FRuntimeMeshLockProvider* InSyncObject, bool bIsReadonly) + : FRuntimeMeshAccessor(bInTangentsHighPrecision, bInUVsHighPrecision, bInUVCount, bIn32BitIndices, PositionStreamData, TangentStreamData, UVStreamData, ColorStreamData, IndexStreamData, bIsReadonly) + , FRuntimeMeshScopeLock(InSyncObject, true) + , LinkedMeshData(InLinkedMeshData), SectionIndex(InSectionIndex), UpdateFlags(InUpdateFlags) +{ + +} + +FRuntimeMeshScopedUpdater::~FRuntimeMeshScopedUpdater() +{ + Cancel(); +} + +void FRuntimeMeshScopedUpdater::Commit(bool bNeedsPositionUpdate, bool bNeedsNormalTangentUpdate, bool bNeedsColorUpdate, bool bNeedsUVUpdate, bool bNeedsIndexUpdate) +{ + check(!IsReadonly()); + + ERuntimeMeshBuffersToUpdate BuffersToUpdate; + BuffersToUpdate |= bNeedsPositionUpdate ? ERuntimeMeshBuffersToUpdate::PositionBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsNormalTangentUpdate ? ERuntimeMeshBuffersToUpdate::TangentBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsColorUpdate ? ERuntimeMeshBuffersToUpdate::ColorBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsUVUpdate ? ERuntimeMeshBuffersToUpdate::UVBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsIndexUpdate ? ERuntimeMeshBuffersToUpdate::IndexBuffer : ERuntimeMeshBuffersToUpdate::None; + + LinkedMeshData->EndSectionUpdate(this, BuffersToUpdate); + + // Release the mesh and lock. + FRuntimeMeshAccessor::Unlink(); + FRuntimeMeshScopeLock::Unlock(); +} + +void FRuntimeMeshScopedUpdater::Commit(const FBox& BoundingBox, bool bNeedsPositionUpdate, bool bNeedsNormalTangentUpdate, bool bNeedsColorUpdate, bool bNeedsUVUpdate, bool bNeedsIndexUpdate) +{ + check(!IsReadonly()); + + ERuntimeMeshBuffersToUpdate BuffersToUpdate; + BuffersToUpdate |= bNeedsPositionUpdate ? ERuntimeMeshBuffersToUpdate::PositionBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsNormalTangentUpdate ? ERuntimeMeshBuffersToUpdate::TangentBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsColorUpdate ? ERuntimeMeshBuffersToUpdate::ColorBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsUVUpdate ? ERuntimeMeshBuffersToUpdate::UVBuffer : ERuntimeMeshBuffersToUpdate::None; + BuffersToUpdate |= bNeedsIndexUpdate ? ERuntimeMeshBuffersToUpdate::IndexBuffer : ERuntimeMeshBuffersToUpdate::None; + + LinkedMeshData->EndSectionUpdate(this, BuffersToUpdate, &BoundingBox); + + // Release the mesh and lock. + FRuntimeMeshAccessor::Unlink(); + FRuntimeMeshScopeLock::Unlock(); +} + +void FRuntimeMeshScopedUpdater::Cancel() +{ + // Release the mesh and lock. + FRuntimeMeshAccessor::Unlink(); + FRuntimeMeshScopeLock::Unlock(); +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponent.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponent.cpp new file mode 100755 index 0000000000..2a8a8f9557 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponent.cpp @@ -0,0 +1,214 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshComponent.h" +#include "RuntimeMeshComponentPlugin.h" +#include "PhysicsEngine/BodySetup.h" +#include "PhysicsEngine/PhysicsSettings.h" +#include "Physics/IPhysXCookingModule.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshGenericVertex.h" +#include "RuntimeMeshUpdateCommands.h" +#include "RuntimeMeshSection.h" +#include "RuntimeMeshSectionProxy.h" +#include "RuntimeMesh.h" +#include "RuntimeMeshComponentProxy.h" +#include "RuntimeMeshLegacySerialization.h" + + + + +DECLARE_CYCLE_STAT(TEXT("RMC - New Collision Data Recieved"), STAT_RuntimeMeshComponent_NewCollisionMeshReceived, STATGROUP_RuntimeMesh); + + + + + +URuntimeMeshComponent::URuntimeMeshComponent(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + SetNetAddressable(); +} + +void URuntimeMeshComponent::EnsureHasRuntimeMesh() +{ + if (RuntimeMeshReference == nullptr) + { + SetRuntimeMesh(NewObject(this)); + } +} + +void URuntimeMeshComponent::SetRuntimeMesh(URuntimeMesh* NewMesh) +{ + // Unlink from any existing runtime mesh + if (RuntimeMeshReference) + { + RuntimeMeshReference->UnRegisterLinkedComponent(this); + RuntimeMeshReference = nullptr; + } + + if (NewMesh) + { + RuntimeMeshReference = NewMesh; + RuntimeMeshReference->RegisterLinkedComponent(this); + } + + MarkRenderStateDirty(); +} + + +void URuntimeMeshComponent::NewCollisionMeshReceived() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMeshComponent_NewCollisionMeshReceived); + + // First recreate the physics state + RecreatePhysicsState(); + + // Now update the navigation. +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + FNavigationSystem::UpdateComponentData(*this); +#else + if (UNavigationSystem::ShouldUpdateNavOctreeOnComponentChange() && IsRegistered()) + { + UWorld* MyWorld = GetWorld(); + + if (MyWorld != nullptr && MyWorld->GetNavigationSystem() != nullptr && + (MyWorld->GetNavigationSystem()->ShouldAllowClientSideNavigation() || !MyWorld->IsNetMode(ENetMode::NM_Client))) + { + UNavigationSystem::UpdateComponentInNavOctree(*this); + } + } +#endif +} + +void URuntimeMeshComponent::NewBoundsReceived() +{ + UpdateBounds(); + MarkRenderTransformDirty(); +} + +void URuntimeMeshComponent::ForceProxyRecreate() +{ + MarkRenderStateDirty(); +} + + + + + +void URuntimeMeshComponent::SendSectionCreation(int32 SectionIndex) +{ + MarkRenderStateDirty(); +} + +void URuntimeMeshComponent::SendSectionPropertiesUpdate(int32 SectionIndex) +{ + MarkRenderStateDirty(); +} + +FBoxSphereBounds URuntimeMeshComponent::CalcBounds(const FTransform& LocalToWorld) const +{ + if (GetRuntimeMesh()) + { + return GetRuntimeMesh()->GetLocalBounds().TransformBy(LocalToWorld); + } + + return FBoxSphereBounds(FSphere(FVector::ZeroVector, 1)); +} + + +FPrimitiveSceneProxy* URuntimeMeshComponent::CreateSceneProxy() +{ + return RuntimeMeshReference != nullptr ? new FRuntimeMeshComponentSceneProxy(this) : nullptr; +} + +UBodySetup* URuntimeMeshComponent::GetBodySetup() +{ + if (GetRuntimeMesh()) + { + return GetRuntimeMesh()->BodySetup; + } + + return nullptr; +} + + +int32 URuntimeMeshComponent::GetNumMaterials() const +{ + int32 RuntimeMeshSections = GetRuntimeMesh() != nullptr ? GetRuntimeMesh()->GetNumSections() : 0; + + return FMath::Max(Super::GetNumMaterials(), RuntimeMeshSections); +} + +void URuntimeMeshComponent::GetUsedMaterials(TArray& OutMaterials, bool bGetDebugMaterials) const +{ + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->GetUsedMaterials(OutMaterials); + } + + Super::GetUsedMaterials(OutMaterials, bGetDebugMaterials); +} + +UMaterialInterface* URuntimeMeshComponent::GetMaterial(int32 ElementIndex) const +{ + UMaterialInterface* Mat = Super::GetMaterial(ElementIndex); + + // Use default override material system + if (Mat != nullptr) + return Mat; + + // fallback to RM sections material + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->GetSectionMaterial(ElementIndex); + } + + // Had no RM/Section return null + return nullptr; +} + +UMaterialInterface* URuntimeMeshComponent::GetMaterialFromCollisionFaceIndex(int32 FaceIndex, int32& SectionIndex) const +{ + UMaterialInterface* Result = nullptr; + SectionIndex = 0; + + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Result = Mesh->GetMaterialFromCollisionFaceIndex(FaceIndex, SectionIndex); + } + + return Result; +} + + + +void URuntimeMeshComponent::Serialize(FArchive& Ar) +{ + Super::Serialize(Ar); + + // This is a no-op serialization handler that can read all the old data + // but does nothing with it + if (FRuntimeMeshComponentLegacySerialization::Serialize(Ar)) + { + //// If this was an old file we attempt to recover by just rerunning the construction script of the owning actor. + //if (AActor* Actor = GetOwner()) + //{ + // if (!Actor->HasAnyFlags(RF_ClassDefaultObject)) + // { + // Actor->RerunConstructionScripts(); + // } + //} + } +} + + + +void URuntimeMeshComponent::PostLoad() +{ + Super::PostLoad(); + + if (RuntimeMeshReference) + { + RuntimeMeshReference->RegisterLinkedComponent(this); + } +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentPlugin.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentPlugin.cpp new file mode 100755 index 0000000000..3bc1578b95 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentPlugin.cpp @@ -0,0 +1,31 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshComponentPlugin.h" +#include "CustomVersion.h" +#include "RuntimeMeshCore.h" + +// Register the custom version with core +FCustomVersionRegistration GRegisterRuntimeMeshCustomVersion(FRuntimeMeshVersion::GUID, FRuntimeMeshVersion::LatestVersion, TEXT("RuntimeMesh")); + + +class FRuntimeMeshComponentPlugin : public IRuntimeMeshComponentPlugin +{ + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; + +IMPLEMENT_MODULE(FRuntimeMeshComponentPlugin, RuntimeMeshComponent) + + +void FRuntimeMeshComponentPlugin::StartupModule() +{ + +} + +void FRuntimeMeshComponentPlugin::ShutdownModule() +{ + +} + +DEFINE_LOG_CATEGORY(RuntimeMeshLog); \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.cpp new file mode 100755 index 0000000000..785679640c --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.cpp @@ -0,0 +1,172 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshComponentProxy.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMeshComponent.h" +#include "RuntimeMeshProxy.h" +#include "PhysicsEngine/BodySetup.h" + +FRuntimeMeshComponentSceneProxy::FRuntimeMeshComponentSceneProxy(URuntimeMeshComponent* Component) + : FPrimitiveSceneProxy(Component) + , BodySetup(Component->GetBodySetup()) +{ + bStaticElementsAlwaysUseProxyPrimitiveUniformBuffer = true; + + check(Component->GetRuntimeMesh() != nullptr); + + RuntimeMeshProxy = Component->GetRuntimeMesh()->EnsureProxyCreated(GetScene().GetFeatureLevel()); + + // Setup our material map + + + for (auto SectionId : Component->GetRuntimeMesh()->GetSectionIds()) + { + UMaterialInterface* Mat = Component->GetMaterial(SectionId); + if (Mat == nullptr) + { + Mat = UMaterial::GetDefaultMaterial(MD_Surface); + } + + SectionRenderData.Add(SectionId, FRuntimeMeshSectionRenderData{ Mat, false }); + + MaterialRelevance |= Mat->GetRelevance(GetScene().GetFeatureLevel()); + } +} + +FRuntimeMeshComponentSceneProxy::~FRuntimeMeshComponentSceneProxy() +{ + +} + +void FRuntimeMeshComponentSceneProxy::CreateRenderThreadResources() +{ + RuntimeMeshProxy->CalculateViewRelevance(bHasStaticSections, bHasDynamicSections, bHasShadowableSections); + + for (auto& Entry : SectionRenderData) + { + if (RuntimeMeshProxy->GetSections().Contains(Entry.Key)) + { + FRuntimeMeshSectionProxyPtr Section = RuntimeMeshProxy->GetSections()[Entry.Key]; + + auto& RenderData = SectionRenderData[Entry.Key]; + + RenderData.bWantsAdjacencyInfo = RequiresAdjacencyInformation(RenderData.Material, RuntimeMeshProxy->GetSections()[Entry.Key]->GetVertexFactory()->GetType(), GetScene().GetFeatureLevel()); + } + } + + FPrimitiveSceneProxy::CreateRenderThreadResources(); +} + +FPrimitiveViewRelevance FRuntimeMeshComponentSceneProxy::GetViewRelevance(const FSceneView* View) const +{ + FPrimitiveViewRelevance Result; + Result.bDrawRelevance = IsShown(View); + Result.bShadowRelevance = IsShadowCast(View); + + bool bForceDynamicPath = !IsStaticPathAvailable() || IsRichView(*View->Family) || IsSelected() || View->Family->EngineShowFlags.Wireframe; + Result.bStaticRelevance = !bForceDynamicPath && bHasStaticSections; + Result.bDynamicRelevance = bForceDynamicPath || bHasDynamicSections; + + Result.bRenderInMainPass = ShouldRenderInMainPass(); + Result.bUsesLightingChannels = GetLightingChannelMask() != GetDefaultLightingChannelMask(); + Result.bRenderCustomDepth = ShouldRenderCustomDepth(); + MaterialRelevance.SetPrimitiveViewRelevance(Result); + return Result; +} + +void FRuntimeMeshComponentSceneProxy::CreateMeshBatch(FMeshBatch& MeshBatch, const FRuntimeMeshSectionProxyPtr& Section, const FRuntimeMeshSectionRenderData& RenderData, FMaterialRenderProxy* Material, FMaterialRenderProxy* WireframeMaterial) const +{ + bool bRenderWireframe = WireframeMaterial != nullptr; + bool bWantsAdjacency = !bRenderWireframe && RenderData.bWantsAdjacencyInfo; + + Section->CreateMeshBatch(MeshBatch, bWantsAdjacency); + MeshBatch.bWireframe = WireframeMaterial != nullptr; + MeshBatch.MaterialRenderProxy = MeshBatch.bWireframe ? WireframeMaterial : Material; + + MeshBatch.ReverseCulling = IsLocalToWorldDeterminantNegative(); + MeshBatch.bCanApplyViewModeOverrides = true; + + FMeshBatchElement& BatchElement = MeshBatch.Elements[0]; + BatchElement.PrimitiveUniformBufferResource = &GetUniformBuffer(); +} + +void FRuntimeMeshComponentSceneProxy::DrawStaticElements(FStaticPrimitiveDrawInterface* PDI) +{ + for (const auto& SectionEntry : RuntimeMeshProxy->GetSections()) + { + FRuntimeMeshSectionProxyPtr Section = SectionEntry.Value; + if (SectionRenderData.Contains(SectionEntry.Key) && Section.IsValid() && Section->ShouldRender() && Section->WantsToRenderInStaticPath()) + { + const FRuntimeMeshSectionRenderData& RenderData = SectionRenderData[SectionEntry.Key]; + FMaterialRenderProxy* Material = RenderData.Material->GetRenderProxy(false); + + FMeshBatch MeshBatch; + CreateMeshBatch(MeshBatch, Section, RenderData, Material, nullptr); + PDI->DrawMesh(MeshBatch, FLT_MAX); + } + } +} + +void FRuntimeMeshComponentSceneProxy::GetDynamicMeshElements(const TArray& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const +{ + // Set up wireframe material (if needed) + const bool bWireframe = AllowDebugViewmodes() && ViewFamily.EngineShowFlags.Wireframe; + + FColoredMaterialRenderProxy* WireframeMaterialInstance = nullptr; + if (bWireframe) + { + WireframeMaterialInstance = new FColoredMaterialRenderProxy( + GEngine->WireframeMaterial ? GEngine->WireframeMaterial->GetRenderProxy(IsSelected()) : nullptr, + FLinearColor(0, 0.5f, 1.f) + ); + + Collector.RegisterOneFrameMaterialProxy(WireframeMaterialInstance); + } + + // Iterate over sections + for (const auto& SectionEntry : RuntimeMeshProxy->GetSections()) + { + FRuntimeMeshSectionProxyPtr Section = SectionEntry.Value; + if (SectionRenderData.Contains(SectionEntry.Key) && Section.IsValid() && Section->ShouldRender()) + { + // Add the mesh batch to every view it's visible in + for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++) + { + if (VisibilityMap & (1 << ViewIndex)) + { + bool bForceDynamicPath = IsRichView(*Views[ViewIndex]->Family) || Views[ViewIndex]->Family->EngineShowFlags.Wireframe || IsSelected() || !IsStaticPathAvailable(); + + if (bForceDynamicPath || !Section->WantsToRenderInStaticPath()) + { + const FRuntimeMeshSectionRenderData& RenderData = SectionRenderData[SectionEntry.Key]; + FMaterialRenderProxy* Material = RenderData.Material->GetRenderProxy(IsSelected()); + + FMeshBatch& MeshBatch = Collector.AllocateMesh(); + CreateMeshBatch(MeshBatch, Section, RenderData, Material, WireframeMaterialInstance); + + Collector.AddMesh(ViewIndex, MeshBatch); + } + } + } + } + } + + // Draw bounds +#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) + for (int32 ViewIndex = 0; ViewIndex < Views.Num(); ViewIndex++) + { + if (VisibilityMap & (1 << ViewIndex)) + { + // Draw simple collision as wireframe if 'show collision', and collision is enabled, and we are not using the complex as the simple + if (ViewFamily.EngineShowFlags.Collision && IsCollisionEnabled() && BodySetup && BodySetup->GetCollisionTraceFlag() != ECollisionTraceFlag::CTF_UseComplexAsSimple) + { + FTransform GeomTransform(GetLocalToWorld()); + BodySetup->AggGeom.GetAggGeom(GeomTransform, GetSelectionColor(FColor(157, 149, 223, 255), IsSelected(), IsHovered()).ToFColor(true), NULL, false, false, UseEditorDepthTest(), ViewIndex, Collector); + } + + // Render bounds + RenderBounds(Collector.GetPDI(ViewIndex), ViewFamily.EngineShowFlags, GetBounds(), IsSelected()); + } + } +#endif +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.h new file mode 100755 index 0000000000..a3c5773acd --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshComponentProxy.h @@ -0,0 +1,74 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshData.h" +#include "RuntimeMeshSectionProxy.h" + +class UBodySetup; +class URuntimeMeshComponent; + +/** Runtime mesh scene proxy */ +class FRuntimeMeshComponentSceneProxy : public FPrimitiveSceneProxy +{ +private: + struct FRuntimeMeshSectionRenderData + { + UMaterialInterface* Material; + bool bWantsAdjacencyInfo; + }; + + + FRuntimeMeshProxyPtr RuntimeMeshProxy; + + TMap SectionRenderData; + + // Reference to the body setup for rendering. + UBodySetup* BodySetup; + + FMaterialRelevance MaterialRelevance; + + bool bHasStaticSections; + bool bHasDynamicSections; + bool bHasShadowableSections; + +public: + + FRuntimeMeshComponentSceneProxy(URuntimeMeshComponent* Component); + + virtual ~FRuntimeMeshComponentSceneProxy(); + + void CreateRenderThreadResources() override; + + virtual bool CanBeOccluded() const override + { + return !MaterialRelevance.bDisableDepthTest; + } + + virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView* View) const override; + + void CreateMeshBatch(FMeshBatch& MeshBatch, const FRuntimeMeshSectionProxyPtr& Section, const FRuntimeMeshSectionRenderData& RenderData, FMaterialRenderProxy* Material, FMaterialRenderProxy* WireframeMaterial) const; + + virtual void DrawStaticElements(FStaticPrimitiveDrawInterface* PDI) override; + + virtual void GetDynamicMeshElements(const TArray& Views, const FSceneViewFamily& ViewFamily, uint32 VisibilityMap, FMeshElementCollector& Collector) const override; + + virtual uint32 GetMemoryFootprint(void) const + { + return(sizeof(*this) + GetAllocatedSize()); + } + + uint32 GetAllocatedSize(void) const + { + return(FPrimitiveSceneProxy::GetAllocatedSize()); + } + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + SIZE_T GetTypeHash() const override + { + static size_t UniquePointer; + return reinterpret_cast(&UniquePointer); + } +#endif +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshCore.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshCore.cpp new file mode 100755 index 0000000000..6ee2c4dce8 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshCore.cpp @@ -0,0 +1,141 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshCore.h" +#include "RuntimeMeshComponentPlugin.h" + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshVertexStreamStructureElement + +bool FRuntimeMeshVertexStreamStructureElement::operator==(const FRuntimeMeshVertexStreamStructureElement& Other) const +{ + return Offset == Other.Offset && Stride == Other.Stride && Type == Other.Type; +} + +bool FRuntimeMeshVertexStreamStructureElement::operator!=(const FRuntimeMeshVertexStreamStructureElement& Other) const +{ + return !(*this == Other); +} + + +////////////////////////////////////////////////////////////////////////// +// FRuntimeMeshVertexStreamStructure + +bool FRuntimeMeshVertexStreamStructure::operator==(const FRuntimeMeshVertexStreamStructure& Other) const +{ + // First check the UVs + if (UVs.Num() != Other.UVs.Num()) + { + return false; + } + + for (int32 Index = 0; Index < UVs.Num(); Index++) + { + if (UVs[Index] != Other.UVs[Index]) + { + return false; + } + } + + // Then check the other components + return Position == Other.Position && + Normal == Other.Normal && + Tangent == Other.Tangent && + Color == Other.Color; +} + +bool FRuntimeMeshVertexStreamStructure::operator!=(const FRuntimeMeshVertexStreamStructure& Other) const +{ + return !(*this == Other); +} + +bool FRuntimeMeshVertexStreamStructure::HasAnyElements() const +{ + static const auto IsElementValid = [](const FRuntimeMeshVertexStreamStructureElement& Element) -> bool + { + return Element.Type != EVertexElementType::VET_None; + }; + + for (const auto& Elem : UVs) + { + if (IsElementValid(Elem)) + { + return true; + } + } + + return IsElementValid(Position) || IsElementValid(Normal) || IsElementValid(Tangent) || IsElementValid(Color); +} + +bool FRuntimeMeshVertexStreamStructure::HasUVs() const +{ + return UVs.Num() > 0; +} + +uint8 FRuntimeMeshVertexStreamStructure::CalculateStride() const +{ + uint8 MaxStride = 0; + const auto AddElement = [&MaxStride](const FRuntimeMeshVertexStreamStructureElement& Element) + { + if (Element.Type != EVertexElementType::VET_None) + { + check(MaxStride == 0 || Element.Stride == MaxStride || Element.Stride == 0); + MaxStride = FMath::Max(MaxStride, Element.Stride); + } + }; + + AddElement(Position); + AddElement(Normal); + AddElement(Tangent); + for (const auto& Elem : UVs) + { + AddElement(Elem); + } + AddElement(Color); + + + return MaxStride; +} + +bool FRuntimeMeshVertexStreamStructure::IsValid() const +{ + static const auto IsElementValid = [](const FRuntimeMeshVertexStreamStructureElement& Element) -> bool + { + return Element.Type == EVertexElementType::VET_None || Element.Stride > 0; + }; + + for (const auto& Elem : UVs) + { + if (!IsElementValid(Elem)) + { + return false; + } + } + + return IsElementValid(Position) && IsElementValid(Normal) && IsElementValid(Tangent) && IsElementValid(Color); +} + +bool FRuntimeMeshVertexStreamStructure::HasNoOverlap(const FRuntimeMeshVertexStreamStructure& Other) const +{ + static const auto HasNoOverlap = [](const FRuntimeMeshVertexStreamStructureElement& Left, const FRuntimeMeshVertexStreamStructureElement& Right) -> bool + { + return Left.Type == EVertexElementType::VET_None || Right.Type == EVertexElementType::VET_None; + }; + + // two streams can't have UVs + if (UVs.Num() > 0 && Other.UVs.Num() > 0) + { + return false; + } + + // Now check overlap of the other components + return HasNoOverlap(Position, Other.Position) && HasNoOverlap(Normal, Other.Normal) && HasNoOverlap(Tangent, Other.Tangent) && HasNoOverlap(Color, Other.Color); +} + +bool FRuntimeMeshVertexStreamStructure::ValidTripleStream(const FRuntimeMeshVertexStreamStructure& Stream1, const FRuntimeMeshVertexStreamStructure& Stream2, const FRuntimeMeshVertexStreamStructure& Stream3) +{ + return Stream1.IsValid() && Stream2.IsValid() && Stream3.IsValid() && + Stream1.HasNoOverlap(Stream2) && Stream1.HasNoOverlap(Stream3) && Stream2.HasNoOverlap(Stream3) && + Stream1.HasAnyElements() && Stream1.Position.IsValid() && + (!Stream3.HasAnyElements() || Stream2.HasAnyElements()); +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshData.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshData.cpp new file mode 100755 index 0000000000..dd870cdafe --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshData.cpp @@ -0,0 +1,1538 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshData.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMesh.h" +#include "RuntimeMeshLibrary.h" +#include "RuntimeMeshCollision.h" +#include "PhysicsEngine/BodySetup.h" +#include "PhysicsEngine/PhysicsSettings.h" +#include "RuntimeMeshProxy.h" + + +DECLARE_CYCLE_STAT(TEXT("RM - Validation - Create"), STAT_RuntimeMesh_CheckCreate, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Validation - Update"), STAT_RuntimeMesh_CheckUpdate, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Validation - BoundingBox"), STAT_RuntimeMesh_CheckBoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - MeshBuilder"), STAT_RuntimeMesh_CreateMeshSection_MeshData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - MeshBuilder - Move"), STAT_RuntimeMesh_CreateMeshSection_MeshData_Move, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - MeshBuilder"), STAT_RuntimeMesh_UpdateMeshSection_MeshData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - MeshBuilder - Move"), STAT_RuntimeMesh_UpdateMeshSection_MeshData_Move, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - Component Buffers"), STAT_RuntimeMesh_CreateMeshSectionFromComponents, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - Component Buffers"), STAT_RuntimeMesh_UpdateMeshSectionFromComponents, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - Blueprint Packed Buffer"), STAT_RuntimeMesh_CreateMeshSectionPacked_Blueprint, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - Blueprint Packed Buffer"), STAT_RuntimeMesh_UpdateMeshSectionPacked_Blueprint, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Get Readonly Section Accessor"), STAT_RuntimeMesh_GetReadonlyMeshAccessor, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Clear Mesh Section"), STAT_RuntimeMesh_ClearMeshSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Clear All Mesh Sections"), STAT_RuntimeMesh_ClearAllMeshSections, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Get Section Bounding Box"), STAT_RuntimeMesh_GetSectionBoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Set Mesh Section Visible"), STAT_RuntimeMesh_SetMeshSectionVisible, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Is Mesh Section Visible"), STAT_RuntimeMesh_IsMeshSectionVisible, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Set Mesh Section Casts Shadow"), STAT_RuntimeMesh_SetMeshSectionCastsShadow, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Is Mesh Section Casting Shadows"), STAT_RuntimeMesh_IsMeshSectionCastingShadows, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Set Mesh Section Collision Enabled"), STAT_RuntimeMesh_SetMeshSectionCollisionEnabled, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Is Mesh Section Collision Enabled"), STAT_RuntimeMesh_IsMeshSectionCollisionEnabled, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Get Available Section Index"), STAT_RuntimeMesh_GetAvailableSectionIndex, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Get Section Ids"), STAT_RuntimeMesh_GetSectionIds, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Set Mesh Collision Section"), STAT_RuntimeMesh_SetMeshCollisionSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Clear Mesh Collision Section"), STAT_RuntimeMesh_ClearMeshCollisionSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Clear All Mesh Collision Sections"), STAT_RuntimeMesh_ClearAllMeshCollisionSections, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Add Convex Collision Section"), STAT_RuntimeMesh_AddConvexCollisionSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Set Convex Collision Section"), STAT_RuntimeMesh_SetConvexCollisionSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Clear Convex Collision Section"), STAT_RuntimeMesh_ClearConvexCollisionSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Clear All Convex Collision Sections"), STAT_RuntimeMesh_ClearAllConvexCollisionSections, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - Internal"), STAT_RuntimeMesh_CreateSectionInternal, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - Internal"), STAT_RuntimeMesh_UpdateSectionInternal, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Handle Common Section Update Flags"), STAT_RuntimeMesh_HandleCommonSectionUpdateFlags, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Handle Common Section Update Flags - Calculate Tangents"), STAT_RuntimeMesh_HandleCommonSectionUpdateFlags_CalculateTangents, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Handle Common Section Update Flags - Calculate Tessellation Indices"), STAT_RuntimeMesh_HandleCommonSectionUpdateFlags_CalculateTessellationIndices, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Section Properties Internal"), STAT_RuntimeMesh_UpdateSectionPropertiesInternal, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Local Bounds"), STAT_RuntimeMesh_UpdateLocalBounds, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Initialize"), STAT_RuntimeMesh_Initialize, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Contains Physics Triangle Mesh Data"), STAT_RuntimeMesh_ContainsPhysicsTriMeshData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Get Physics Triangle Mesh Data"), STAT_RuntimeMesh_GetPhysicsTriMeshData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Copy Collision Elements to Body Setup"), STAT_RuntimeMesh_CopyCollisionElementsToBodySetup, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Get Section From Collision Face Index"), STAT_RuntimeMesh_GetSectionFromCollisionFaceIndex, STATGROUP_RuntimeMesh); + +FRuntimeMeshData::FRuntimeMeshData() + : SyncRoot(new FRuntimeMeshNullLockProvider()) +{ +} + +FRuntimeMeshData::~FRuntimeMeshData() +{ +} + +void FRuntimeMeshData::Setup(TWeakObjectPtr InParentMeshObject) +{ + ParentMeshObject = InParentMeshObject; +} + +void FRuntimeMeshData::CheckCreate(int32 NumUVs, bool bIndexIsValid) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CheckCreate); +#if DO_CHECK + + if (NumUVs < 1 || NumUVs > 8) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("UV Channel Count must be between 1 and 8 inclusive")); + } + + // Check indices + if (!bIndexIsValid) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Indices can only be of type uint16, int32, or uint32.")); + } +#endif +} + +void FRuntimeMeshData::CheckCreateLegacyInternal(const FRuntimeMeshVertexStreamStructure& Stream0Structure, const FRuntimeMeshVertexStreamStructure& Stream1Structure, const FRuntimeMeshVertexStreamStructure& Stream2Structure, bool bIsIndexValid) const +{ +#if DO_CHECK + + // Check stream 0 contains the position element + if (!Stream0Structure.Position.IsValid()) + { + + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Position element must always be in stream 0.")); + } + + // Check the 3 streams are valid when combined + if (!FRuntimeMeshVertexStreamStructure::ValidTripleStream(Stream0Structure, Stream1Structure, Stream2Structure)) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Streams cannot have overlapping elements, and all elements must be present.")); + } + + // Check indices + if (!bIsIndexValid) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Indices can only be of type uint16, int32, or uint32.")); + } +#endif +} + +void FRuntimeMeshData::CheckUpdate(bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs, int32 NumUVs, bool b32BitIndices, int32 SectionIndex, bool bShouldCheckIndexType, + bool bCheckTangentVertexStream, bool bCheckUVVertexStream) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CheckUpdate); +#if DO_CHECK + if (!MeshSections.IsValidIndex(SectionIndex) || !MeshSections[SectionIndex].IsValid()) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Mesh Section %d does not exist in RMC."), SectionIndex); + } + + FRuntimeMeshSectionPtr Section = MeshSections[SectionIndex]; + + if (bCheckTangentVertexStream && !Section->CheckTangentBuffer(bUseHighPrecisionTangents)) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Supplied vertex type does not match stream 1 for mesh section %d."), SectionIndex); + } + + if (bCheckUVVertexStream && !Section->CheckUVBuffer(bUseHighPrecisionUVs, NumUVs)) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Supplied vertex type does not match stream 2 for mesh section %d."), SectionIndex); + } + + if (bShouldCheckIndexType && !Section->CheckIndexBufferSize(b32BitIndices)) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Supplied index type do not match mesh section %d."), SectionIndex); + } +#endif +} + +void FRuntimeMeshData::CheckBoundingBox(const FBox& Box) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CheckBoundingBox); +#if DO_CHECK + if (!Box.IsValid || Box.GetVolume() <= 0) + { + UE_LOG(RuntimeMeshLog, Fatal, TEXT("Supplied bounding invalid was invalid.")); + } +#endif +} + + + +void FRuntimeMeshData::CreateMeshSection(int32 SectionIndex, bool bWantsHighPrecisionTangents, bool bWantsHighPrecisionUVs, int32 NumUVs, bool bWants32BitIndices, bool bCreateCollision, EUpdateFrequency UpdateFrequency /*= EUpdateFrequency::Average*/) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSection_NoData); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreate(NumUVs, true); + + auto NewSection = CreateOrResetSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bWants32BitIndices, UpdateFrequency); + + // Track collision status and update collision information if necessary + NewSection->SetCollisionEnabled(bCreateCollision); + + // Finalize section. + CreateSectionInternal(SectionIndex, ESectionUpdateFlags::None); +} + +void FRuntimeMeshData::CreateMeshSection(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision /*= false*/, EUpdateFrequency UpdateFrequency /*= EUpdateFrequency::Average*/, ESectionUpdateFlags UpdateFlags /*= ESectionUpdateFlags::None*/) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSection_MeshData); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreate(MeshData->NumUVChannels(), true); + + + auto NewSection = CreateOrResetSection(SectionId, MeshData->IsUsingHighPrecisionTangents(), MeshData->IsUsingHighPrecisionUVs(), MeshData->NumUVChannels(), MeshData->IsUsing32BitIndices(), UpdateFrequency); + + NewSection->UpdatePositionBuffer(MeshData->GetPositionStream(), false); + NewSection->UpdateTangentsBuffer(MeshData->GetTangentStream(), false); + NewSection->UpdateUVsBuffer(MeshData->GetUVStream(), false); + NewSection->UpdateColorBuffer(MeshData->GetColorStream(), false); + NewSection->UpdateIndexBuffer(MeshData->GetIndexStream(), false); + + // Track collision status and update collision information if necessary + NewSection->SetCollisionEnabled(bCreateCollision); + + // Finalize section. + CreateSectionInternal(SectionId, UpdateFlags); +} + +void FRuntimeMeshData::CreateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision /*= false*/, EUpdateFrequency UpdateFrequency /*= EUpdateFrequency::Average*/, ESectionUpdateFlags UpdateFlags /*= ESectionUpdateFlags::None*/) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSection_MeshData_Move); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreate(MeshData->NumUVChannels(), true); + + auto NewSection = CreateOrResetSection(SectionId, MeshData->IsUsingHighPrecisionTangents(), MeshData->IsUsingHighPrecisionUVs(), MeshData->NumUVChannels(), MeshData->IsUsing32BitIndices(), UpdateFrequency); + + NewSection->UpdatePositionBuffer(MeshData->GetPositionStream(), true); + NewSection->UpdateTangentsBuffer(MeshData->GetTangentStream(), true); + NewSection->UpdateUVsBuffer(MeshData->GetUVStream(), true); + NewSection->UpdateColorBuffer(MeshData->GetColorStream(), true); + NewSection->UpdateIndexBuffer(MeshData->GetIndexStream(), true); + + // Track collision status and update collision information if necessary + NewSection->SetCollisionEnabled(bCreateCollision); + + // Finalize section. + CreateSectionInternal(SectionId, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSection(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags /*= ESectionUpdateFlags::None*/) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection_MeshData); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdate(MeshData->IsUsingHighPrecisionTangents(), MeshData->IsUsingHighPrecisionUVs(), MeshData->NumUVChannels(), MeshData->IsUsing32BitIndices(), SectionId, true, true, true); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + ERuntimeMeshBuffersToUpdate BuffersToUpdate = ERuntimeMeshBuffersToUpdate::AllVertexBuffers | ERuntimeMeshBuffersToUpdate::IndexBuffer; + + Section->UpdatePositionBuffer(MeshData->GetPositionStream(), false); + Section->UpdateTangentsBuffer(MeshData->GetTangentStream(), false); + Section->UpdateUVsBuffer(MeshData->GetUVStream(), false); + Section->UpdateColorBuffer(MeshData->GetColorStream(), false); + Section->UpdateIndexBuffer(MeshData->GetIndexStream(), false); + + UpdateSectionInternal(SectionId, BuffersToUpdate, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags /*= ESectionUpdateFlags::None*/) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection_MeshData_Move); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdate(MeshData->IsUsingHighPrecisionTangents(), MeshData->IsUsingHighPrecisionUVs(), MeshData->NumUVChannels(), MeshData->IsUsing32BitIndices(), SectionId, true, true, true); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + ERuntimeMeshBuffersToUpdate BuffersToUpdate = ERuntimeMeshBuffersToUpdate::AllVertexBuffers | ERuntimeMeshBuffersToUpdate::IndexBuffer; + + Section->UpdatePositionBuffer(MeshData->GetPositionStream(), true); + Section->UpdateTangentsBuffer(MeshData->GetTangentStream(), true); + Section->UpdateUVsBuffer(MeshData->GetUVStream(), true); + Section->UpdateColorBuffer(MeshData->GetColorStream(), true); + Section->UpdateIndexBuffer(MeshData->GetIndexStream(), true); + + UpdateSectionInternal(SectionId, BuffersToUpdate, UpdateFlags); +} + + + + +TUniquePtr FRuntimeMeshData::BeginSectionUpdate(int32 SectionId, ESectionUpdateFlags UpdateFlags /*= ESectionUpdateFlags::None*/) +{ + check(DoesSectionExist(SectionId)); + + // Enter the lock and then hand this lock to the updater + SyncRoot->Lock(); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + return Section->GetSectionMeshUpdater(this->AsShared(), SectionId, UpdateFlags, SyncRoot.Get(), false); +} + +TUniquePtr FRuntimeMeshData::GetSectionReadonly(int32 SectionId) +{ + check(DoesSectionExist(SectionId)); + + // Enter the lock and then hand this lock to the updater + SyncRoot->Lock(); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + return Section->GetSectionMeshUpdater(this->AsShared(), SectionId, ESectionUpdateFlags::None, SyncRoot.Get(), true); +} + +void FRuntimeMeshData::EndSectionUpdate(FRuntimeMeshScopedUpdater* Updater, ERuntimeMeshBuffersToUpdate BuffersToUpdate, const FBox* BoundingBox /*= nullptr*/) +{ + check(DoesSectionExist(Updater->SectionIndex)); + + FRuntimeMeshSectionPtr Section = MeshSections[Updater->SectionIndex]; + + if (BoundingBox) + { + Section->SetBoundingBox(*BoundingBox); + } + else + { + Section->UpdateBoundingBox(); + } + + UpdateSectionInternal(Updater->SectionIndex, BuffersToUpdate, Updater->UpdateFlags); +} + +void FRuntimeMeshData::CreateMeshSectionFromComponents(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, TFunction ColorAccessor, int32 NumColors, + const TArray& Tangents, bool bCreateCollision, EUpdateFrequency UpdateFrequency, ESectionUpdateFlags UpdateFlags, + bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs, bool bWantsSecondUV) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionFromComponents); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // Create the section + auto NewSection = CreateOrResetSectionForBlueprint(SectionIndex, false, bUseHighPrecisionTangents, bUseHighPrecisionUVs, UpdateFrequency); + + TSharedPtr MeshData = NewSection->GetSectionMeshAccessor(); + + // We base the size of the mesh data off the vertices/positions + MeshData->SetNumVertices(Vertices.Num()); + + for (int32 Index = 0; Index < Vertices.Num(); Index++) + { + MeshData->SetPosition(Index, Vertices[Index]); + MeshData->SetNormalTangent(Index, + Normals.Num() > Index ? Normals[Index] : FVector(0.0f, 0.0f, 1.0f), + Tangents.Num() > Index ? Tangents[Index] : FRuntimeMeshTangent(0, 0, 1.0f)); + MeshData->SetColor(Index, NumColors > Index ? ColorAccessor(Index) : FColor::White); + MeshData->SetUV(Index, 0, UV0.Num() > Index ? UV0[Index] : FVector2D::ZeroVector); + if (bWantsSecondUV) + { + MeshData->SetUV(Index, 1, UV1.Num() > Index ? UV1[Index] : FVector2D::ZeroVector); + } + } + + NewSection->UpdateIndexBuffer(Triangles); + + NewSection->UpdateBoundingBox(); + + // Track collision status and update collision information if necessary + NewSection->SetCollisionEnabled(bCreateCollision); + + // Finalize section. + CreateSectionInternal(SectionIndex, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSectionFromComponents(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, TFunction ColorAccessor, int32 NumColors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionFromComponents); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // We only check stream 0 and 2 since stream 1 can change based on config, this is potentially dangerous to assume but probably not in practice. +// CheckUpdate(GetStreamStructure(), GetStreamStructure(), GetStreamStructure(), true, SectionIndex, true, true, false, true); + + FRuntimeMeshSectionPtr& Section = MeshSections[SectionIndex]; + + ERuntimeMeshBuffersToUpdate BuffersToUpdate = ERuntimeMeshBuffersToUpdate::None; + if (Vertices.Num() > 0) + { + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::PositionBuffer; + } + if (Normals.Num() > 0 || Tangents.Num() > 0) + { + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::TangentBuffer; + } + if (UV0.Num() > 0 || UV1.Num() > 0) + { + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::UVBuffer; + } + if (NumColors > 0) + { + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::ColorBuffer; + } + + if (BuffersToUpdate != ERuntimeMeshBuffersToUpdate::None) + { + TSharedPtr MeshData = Section->GetSectionMeshAccessor(); + + int32 OldVertexCount = FMath::Min(MeshData->NumVertices(), Vertices.Num()); + + // We base the size of the mesh data off the vertices/positions + MeshData->SetNumVertices(Vertices.Num()); + + bool bHasSecondUV = MeshData->NumUVChannels() > 1; + + // Overwrite existing data + for (int32 Index = 0; Index < OldVertexCount; Index++) + { + if (Vertices.Num() > Index) MeshData->SetPosition(Index, Vertices[Index]); + if (Normals.Num() > Index) MeshData->SetNormal(Index, Normals[Index]); + if (Tangents.Num() > Index) MeshData->SetTangent(Index, FVector4(Tangents[Index].TangentX, Tangents[Index].bFlipTangentY ? -1.0f : 1.0f)); + if (NumColors > Index) MeshData->SetColor(Index, ColorAccessor(Index)); + if (UV0.Num() > Index) MeshData->SetUV(Index, 0, UV0[Index]); + if (bHasSecondUV && UV1.Num() > Index) MeshData->SetUV(Index, 1, UV1[Index]); + } + + // Fill remaining mesh data + for (int32 Index = OldVertexCount; Index < Vertices.Num(); Index++) + { + MeshData->SetPosition(Index, Vertices[Index]); + MeshData->SetNormalTangent(Index, + Normals.Num() > Index ? Normals[Index] : FVector(0.0f, 0.0f, 1.0f), + Tangents.Num() > Index ? Tangents[Index] : FRuntimeMeshTangent(0, 0, 1.0f)); + MeshData->SetColor(Index, NumColors > Index ? ColorAccessor(Index) : FColor::White); + MeshData->SetUV(Index, 0, UV0.Num() > Index ? UV0[Index] : FVector2D::ZeroVector); + if (bHasSecondUV) + MeshData->SetUV(Index, 1, UV1.Num() > Index ? UV1[Index] : FVector2D::ZeroVector); + } + } + + if (Vertices.Num() > 0) + { + Section->UpdateBoundingBox(); + } + + if (Triangles.Num() > 0) + { + Section->UpdateIndexBuffer(Triangles); + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::IndexBuffer; + } + + // Finalize section. + UpdateSectionInternal(SectionIndex, BuffersToUpdate, UpdateFlags); +} + + + +void FRuntimeMeshData::CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, bool bCreateCollision, EUpdateFrequency UpdateFrequency, + ESectionUpdateFlags UpdateFlags, bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs) +{ + CreateMeshSectionFromComponents(SectionIndex, Vertices, Triangles, Normals, UV0, TArray(), [&Colors](int32 Index) -> FColor { return Colors[Index]; }, + Colors.Num(), Tangents, bCreateCollision, UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs, false); +} + +void FRuntimeMeshData::CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, + bool bCreateCollision, EUpdateFrequency UpdateFrequency, ESectionUpdateFlags UpdateFlags, bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs) +{ + CreateMeshSectionFromComponents(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, [&Colors](int32 Index) -> FColor { return Colors[Index]; }, + Colors.Num(), Tangents, bCreateCollision, UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs, true); +} + +void FRuntimeMeshData::UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags) +{ + UpdateMeshSectionFromComponents(SectionIndex, Vertices, TArray(), Normals, UV0, TArray(), + [&Colors](int32 Index) -> FColor { return Colors[Index]; }, Colors.Num(), Tangents, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags) +{ + UpdateMeshSectionFromComponents(SectionIndex, Vertices, TArray(), Normals, UV0, UV1, + [&Colors](int32 Index) -> FColor { return Colors[Index]; }, Colors.Num(), Tangents, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags) +{ + UpdateMeshSectionFromComponents(SectionIndex, Vertices, Triangles, Normals, UV0, TArray(), + [&Colors](int32 Index) -> FColor { return Colors[Index]; }, Colors.Num(), Tangents, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags) +{ + UpdateMeshSectionFromComponents(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, + [&Colors](int32 Index) -> FColor { return Colors[Index]; }, Colors.Num(), Tangents, UpdateFlags); +} + +void FRuntimeMeshData::CreateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& VertexColors, bool bCreateCollision, + bool bCalculateNormalTangent, bool bShouldCreateHardTangents, bool bGenerateTessellationTriangles, EUpdateFrequency UpdateFrequency, bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs) +{ + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None; + UpdateFlags |= bCalculateNormalTangent && !bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangent : ESectionUpdateFlags::None; + UpdateFlags |= bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangentHard : ESectionUpdateFlags::None; + UpdateFlags |= bGenerateTessellationTriangles ? ESectionUpdateFlags::CalculateTessellationIndices : ESectionUpdateFlags::None; + + CreateMeshSectionFromComponents(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, [&VertexColors](int32 Index) -> FColor { return VertexColors[Index].ToFColor(false); }, + VertexColors.Num(), Tangents, bCreateCollision, UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs, UV1.Num() > 0); +} + +void FRuntimeMeshData::UpdateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, const TArray& Tangents, + const TArray& UV0, const TArray& UV1, const TArray& VertexColors, bool bCalculateNormalTangent, bool bShouldCreateHardTangents, bool bGenerateTessellationTriangles) +{ + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None; + UpdateFlags |= bCalculateNormalTangent && !bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangent : ESectionUpdateFlags::None; + UpdateFlags |= bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangentHard : ESectionUpdateFlags::None; + UpdateFlags |= bGenerateTessellationTriangles ? ESectionUpdateFlags::CalculateTessellationIndices : ESectionUpdateFlags::None; + + UpdateMeshSectionFromComponents(SectionIndex, Vertices, TArray(), Normals, UV0, UV1, + [&VertexColors](int32 Index) -> FColor { return VertexColors[Index].ToFColor(false); }, VertexColors.Num(), Tangents, UpdateFlags); +} + + + +void FRuntimeMeshData::CreateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCreateCollision, bool bCalculateNormalTangent, bool bShouldCreateHardTangents, bool bGenerateTessellationTriangles, EUpdateFrequency UpdateFrequency, bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionPacked_Blueprint); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // Create the section + auto NewSection = CreateOrResetSectionForBlueprint(SectionIndex, false, bUseHighPrecisionTangents, bUseHighPrecisionUVs, UpdateFrequency); + + TSharedPtr MeshData = NewSection->GetSectionMeshAccessor(); + + // We base the size of the mesh data off the vertices/positions + MeshData->SetNumVertices(Vertices.Num()); + + for (int32 Index = 0; Index < Vertices.Num(); Index++) + { + MeshData->SetPosition(Index, Vertices[Index].Position); + MeshData->SetNormal(Index, Vertices[Index].Normal); + MeshData->SetTangent(Index, FVector4(Vertices[Index].Tangent.TangentX, Vertices[Index].Tangent.bFlipTangentY ? -1.0f : 1.0f)); + MeshData->SetColor(Index, Vertices[Index].Color.ToFColor(false)); + MeshData->SetUV(Index, 0, Vertices[Index].UV0); + } + + NewSection->UpdateIndexBuffer(Triangles); + + NewSection->UpdateBoundingBox(); + + // Track collision status and update collision information if necessary + NewSection->SetCollisionEnabled(bCreateCollision); + + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None; + UpdateFlags |= bCalculateNormalTangent && !bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangent : ESectionUpdateFlags::None; + UpdateFlags |= bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangentHard : ESectionUpdateFlags::None; + UpdateFlags |= bGenerateTessellationTriangles ? ESectionUpdateFlags::CalculateTessellationIndices : ESectionUpdateFlags::None; + + // Finalize section. + CreateSectionInternal(SectionIndex, UpdateFlags); +} + +void FRuntimeMeshData::UpdateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCalculateNormalTangent, bool bShouldCreateHardTangents, bool bGenerateTessellationTriangles) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionPacked_Blueprint); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // We only check stream 0 and 2 since stream 1 can change based on config, this is potentially dangerous to assume but probably not in practice. +// CheckUpdate(GetStreamStructure(), GetStreamStructure(), GetStreamStructure(), true, SectionIndex, true, true, false, true); + + FRuntimeMeshSectionPtr& Section = MeshSections[SectionIndex]; + + ERuntimeMeshBuffersToUpdate BuffersToUpdate = ERuntimeMeshBuffersToUpdate::None; + if (Vertices.Num() > 0) + { + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::AllVertexBuffers; + + TSharedPtr MeshData = Section->GetSectionMeshAccessor(); + + // We base the size of the mesh data off the vertices/positions + MeshData->SetNumVertices(Vertices.Num()); + + // Copy mesh data + for (int32 Index = 0; Index < Vertices.Num(); Index++) + { + MeshData->SetPosition(Index, Vertices[Index].Position); + MeshData->SetNormal(Index, Vertices[Index].Normal); + MeshData->SetTangent(Index, FVector4(Vertices[Index].Tangent.TangentX, Vertices[Index].Tangent.bFlipTangentY ? -1.0f : 1.0f)); + MeshData->SetColor(Index, Vertices[Index].Color.ToFColor(false)); + MeshData->SetUV(Index, 0, Vertices[Index].UV0); + } + + Section->UpdateBoundingBox(); + } + + + if (Triangles.Num() > 0) + { + Section->UpdateIndexBuffer(Triangles); + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::IndexBuffer; + } + + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None; + UpdateFlags |= bCalculateNormalTangent && !bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangent : ESectionUpdateFlags::None; + UpdateFlags |= bShouldCreateHardTangents ? ESectionUpdateFlags::CalculateNormalTangentHard : ESectionUpdateFlags::None; + UpdateFlags |= bGenerateTessellationTriangles ? ESectionUpdateFlags::CalculateTessellationIndices : ESectionUpdateFlags::None; + + // Finalize section. + UpdateSectionInternal(SectionIndex, BuffersToUpdate, UpdateFlags); +} + + + +TSharedPtr FRuntimeMeshData::GetReadonlyMeshAccessor(int32 SectionId) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetReadonlyMeshAccessor); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + check(DoesSectionExist(SectionId)); + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + return ConstCastSharedPtr(Section->GetSectionMeshAccessor()); +} + +void FRuntimeMeshData::ClearMeshSection(int32 SectionId) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearMeshSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionId)) + { + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + bool bHadCollision = Section->IsCollisionEnabled(); + bool bWasStaticSection = Section->GetUpdateFrequency() == EUpdateFrequency::Infrequent; + + MeshSections[SectionId].Reset(); + + if (RenderProxy.IsValid()) + { + RenderProxy->DeleteSection_GameThread(SectionId); + } + + // Strip tailing invalid sections + int32 LastValidIndex = GetLastSectionIndex(); + MeshSections.SetNum(LastValidIndex + 1); + + UpdateLocalBounds(); + MarkRenderStateDirty(); + + if (bHadCollision) + { + MarkCollisionDirty(); + } + } +} + +void FRuntimeMeshData::ClearAllMeshSections() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearAllMeshSections); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + MeshSections.Empty(); + + if (RenderProxy.IsValid()) + { + RenderProxy->DeleteSection_GameThread(INDEX_NONE); + } + + UpdateLocalBounds(); + MarkRenderStateDirty(); + MarkCollisionDirty(); +} + +FBox FRuntimeMeshData::GetSectionBoundingBox(int32 SectionIndex) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetSectionBoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + return MeshSections[SectionIndex]->GetBoundingBox(); + } + + return FBox(); +} + +void FRuntimeMeshData::SetMeshSectionVisible(int32 SectionIndex, bool bNewVisibility) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetMeshSectionVisible); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + MeshSections[SectionIndex]->SetVisible(bNewVisibility); + + // Finish the update + UpdateSectionPropertiesInternal(SectionIndex, false); + } +} + +bool FRuntimeMeshData::IsMeshSectionVisible(int32 SectionIndex) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_IsMeshSectionVisible); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + return MeshSections[SectionIndex]->IsVisible(); + } + + return false; +} + + +void FRuntimeMeshData::SetMeshSectionCastsShadow(int32 SectionIndex, bool bNewCastsShadow) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetMeshSectionCastsShadow); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + MeshSections[SectionIndex]->SetCastsShadow(bNewCastsShadow); + + // Finish the update + UpdateSectionPropertiesInternal(SectionIndex, true); + } +} + +bool FRuntimeMeshData::IsMeshSectionCastingShadows(int32 SectionIndex) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_IsMeshSectionCastingShadows); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + return MeshSections[SectionIndex]->CastsShadow(); + } + + return false; +} + + +void FRuntimeMeshData::SetMeshSectionCollisionEnabled(int32 SectionIndex, bool bNewCollisionEnabled) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetMeshSectionCollisionEnabled); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + bool bWasCollisionEnabled = MeshSections[SectionIndex]->IsCollisionEnabled(); + + if (bWasCollisionEnabled != bNewCollisionEnabled) + { + MeshSections[SectionIndex]->SetCollisionEnabled(bNewCollisionEnabled); + + MarkCollisionDirty(); + } + } +} + +bool FRuntimeMeshData::IsMeshSectionCollisionEnabled(int32 SectionIndex) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_IsMeshSectionCollisionEnabled); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + if (DoesSectionExist(SectionIndex)) + { + return MeshSections[SectionIndex]->IsCollisionEnabled(); + } + + return false; +} + + +int32 FRuntimeMeshData::GetNumSections() const +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + + return MeshSections.Num(); +} + +bool FRuntimeMeshData::DoesSectionExist(int32 SectionIndex) const +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + + return MeshSections.IsValidIndex(SectionIndex) && MeshSections[SectionIndex].IsValid(); +} + +int32 FRuntimeMeshData::GetAvailableSectionIndex() const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetAvailableSectionIndex); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // TODO: Make this faster. We could do this by tracking a minimum index to search from. + for (int32 Index = 0; Index < 10000; Index++) + { + if (!DoesSectionExist(Index)) + { + return Index; + } + } + return INDEX_NONE; +} + + +int32 FRuntimeMeshData::GetLastSectionIndex() const +{ + for (int32 Index = MeshSections.Num() - 1; Index >= 0; Index--) + { + if (MeshSections[Index].IsValid()) + { + return Index; + } + } + return INDEX_NONE; +} + +TArray FRuntimeMeshData::GetSectionIds() const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetSectionIds); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + TArray Sections; + for (int32 SectionId = 0; SectionId < MeshSections.Num(); SectionId++) + { + if (MeshSections[SectionId].IsValid()) + { + Sections.Add(SectionId); + } + } + return Sections; +} + + + +void FRuntimeMeshData::SetMeshCollisionSection(int32 CollisionSectionIndex, const TArray& Vertices, const TArray& Triangles) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetMeshCollisionSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + auto& Section = MeshCollisionSections.FindOrAdd(CollisionSectionIndex); + + Section.VertexBuffer = Vertices; + Section.IndexBuffer = Triangles; + + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearMeshCollisionSection(int32 CollisionSectionIndex) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearMeshCollisionSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + MeshCollisionSections.Remove(CollisionSectionIndex); + + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearAllMeshCollisionSections() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearAllMeshCollisionSections); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + MeshCollisionSections.Empty(); + + MarkCollisionDirty(); +} + + +int32 FRuntimeMeshData::AddConvexCollisionSection(TArray ConvexVerts) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_AddConvexCollisionSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + int32 NewIndex = 0; + while (ConvexCollisionSections.Contains(NewIndex)) + { + NewIndex++; + } + + auto& Section = ConvexCollisionSections.Add(NewIndex); + + Section.VertexBuffer = ConvexVerts; + Section.BoundingBox = FBox(ConvexVerts); + + MarkCollisionDirty(); + + return NewIndex; +} + +void FRuntimeMeshData::SetConvexCollisionSection(int32 ConvexSectionIndex, TArray ConvexVerts) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetConvexCollisionSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + auto& Section = ConvexCollisionSections.FindOrAdd(ConvexSectionIndex); + + Section.VertexBuffer = ConvexVerts; + Section.BoundingBox = FBox(ConvexVerts); + + MarkCollisionDirty(); +} + +void FRuntimeMeshData::RemoveConvexCollisionSection(int32 ConvexSectionIndex) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearConvexCollisionSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // Empty simple collision info + ConvexCollisionSections.Remove(ConvexSectionIndex); + + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearConvexCollisionSections() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearAllConvexCollisionSections); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + ConvexCollisionSections.Empty(); + + MarkCollisionDirty(); +} + +void FRuntimeMeshData::SetCollisionConvexMeshes(const TArray>& ConvexMeshes) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ClearAllConvexCollisionSections); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + ConvexCollisionSections.Empty(); + + int32 Index = 0; + for (const auto& Convex : ConvexMeshes) + { + auto& Section = ConvexCollisionSections.FindOrAdd(Index++); + + Section.VertexBuffer = Convex; + Section.BoundingBox = FBox(Convex); + } + + MarkCollisionDirty(); +} + + + +int32 FRuntimeMeshData::AddCollisionBox(const FRuntimeMeshCollisionBox& NewBox) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + int32 NewIndex = CollisionBoxes.Add(NewBox); + MarkCollisionDirty(); + return NewIndex; +} + +void FRuntimeMeshData::RemoveCollisionBox(int32 Index) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionBoxes.RemoveAt(Index); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearCollisionBoxes() +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionBoxes.Empty(); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::SetCollisionBoxes(const TArray& NewBoxes) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionBoxes = NewBoxes; + MarkCollisionDirty(); +} + +int32 FRuntimeMeshData::AddCollisionSphere(const FRuntimeMeshCollisionSphere& NewSphere) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + int32 NewIndex = CollisionSpheres.Add(NewSphere); + MarkCollisionDirty(); + return NewIndex; +} + +void FRuntimeMeshData::RemoveCollisionSphere(int32 Index) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionSpheres.RemoveAt(Index); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearCollisionSpheres() +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionSpheres.Empty(); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::SetCollisionSpheres(const TArray& NewSpheres) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionSpheres = NewSpheres; + MarkCollisionDirty(); +} + +int32 FRuntimeMeshData::AddCollisionCapsule(const FRuntimeMeshCollisionCapsule& NewCapsule) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + int32 NewIndex = CollisionCapsules.Add(NewCapsule); + MarkCollisionDirty(); + return NewIndex; +} + +void FRuntimeMeshData::RemoveCollisionCapsule(int32 Index) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionCapsules.RemoveAt(Index); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::ClearCollisionCapsules() +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + CollisionCapsules.Empty(); + MarkCollisionDirty(); +} + +void FRuntimeMeshData::SetCollisionCapsules(const TArray& NewCapsules) +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + + CollisionCapsules = NewCapsules; + MarkCollisionDirty(); +} + +FBoxSphereBounds FRuntimeMeshData::GetLocalBounds() const +{ + FRuntimeMeshScopeLock Lock(SyncRoot); + return LocalBounds; +} + +FRuntimeMeshSectionPtr FRuntimeMeshData::CreateOrResetSection(int32 SectionId, bool bInUseHighPrecisionTangents, bool bInUseHighPrecisionUVs, + int32 InNumUVs, bool b32BitIndices, EUpdateFrequency UpdateFrequency) +{ + // Create new section + FRuntimeMeshSectionPtr NewSection = MakeShared(bInUseHighPrecisionTangents, bInUseHighPrecisionUVs, InNumUVs, b32BitIndices, UpdateFrequency/*, LockFactory()*/); + + // Store section at index + if (MeshSections.Num() <= SectionId) + { + MeshSections.SetNum(SectionId + 1); + } + MeshSections[SectionId] = NewSection; + + return NewSection; +} + +FRuntimeMeshSectionPtr FRuntimeMeshData::CreateOrResetSectionForBlueprint(int32 SectionId, bool bWantsSecondUV, bool bHighPrecisionTangents, bool bHighPrecisionUVs, EUpdateFrequency UpdateFrequency) +{ + return CreateOrResetSection(SectionId, bHighPrecisionTangents, bHighPrecisionUVs, bWantsSecondUV? 2 : 1, true, UpdateFrequency); +} + + + + +void FRuntimeMeshData::CreateSectionInternal(int32 SectionId, ESectionUpdateFlags UpdateFlags) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateSectionInternal); + + check(DoesSectionExist(SectionId)); + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + // Send section creation to render thread + if (RenderProxy.IsValid()) + { + RenderProxy->CreateSection_GameThread(SectionId, Section->GetSectionCreationParams()); + } + + // Update the combined local bounds + UpdateLocalBounds(); + + // Do any additional processing on the section for this update. + ERuntimeMeshBuffersToUpdate BuffersToUpdate; // This is ignored for creation as all buffers are updated. + HandleCommonSectionUpdateFlags(SectionId, UpdateFlags, BuffersToUpdate); + + + // Send the section creation notification to all linked RMC's + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [SectionId](URuntimeMesh* Mesh) + { + Mesh->SendSectionCreation(SectionId); + })); + + // Update collision if necessary + if (Section->IsCollisionEnabled()) + { + MarkCollisionDirty(true); + } + + MarkChanged(); +} + +void FRuntimeMeshData::UpdateSectionInternal(int32 SectionId, ERuntimeMeshBuffersToUpdate BuffersToUpdate, ESectionUpdateFlags UpdateFlags) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateSectionInternal); + + check(DoesSectionExist(SectionId)); + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + // Send section update to render thread + if (RenderProxy.IsValid()) + { + RenderProxy->UpdateSection_GameThread(SectionId, Section->GetSectionUpdateData(BuffersToUpdate)); + } + + // Update the combined local bounds + UpdateLocalBounds(); + + // Do any additional processing on the section for this update. + HandleCommonSectionUpdateFlags(SectionId, UpdateFlags, BuffersToUpdate); + + bool bRequireProxyRecreate = Section->GetUpdateFrequency() == EUpdateFrequency::Infrequent; + if (bRequireProxyRecreate) + { + // Send the section creation notification to all linked RMC's + + MarkRenderStateDirty(); + } + + // Update collision if necessary + if (Section->IsCollisionEnabled()) + { + MarkCollisionDirty(true); + } + + MarkChanged(); +} + +void FRuntimeMeshData::HandleCommonSectionUpdateFlags(int32 SectionIndex, ESectionUpdateFlags UpdateFlags, ERuntimeMeshBuffersToUpdate& BuffersToUpdate) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_HandleCommonSectionUpdateFlags); + + check(DoesSectionExist(SectionIndex)); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionIndex]; + + if (!!(UpdateFlags & ESectionUpdateFlags::CalculateNormalTangent) || !!(UpdateFlags & ESectionUpdateFlags::CalculateNormalTangentHard)) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_HandleCommonSectionUpdateFlags_CalculateTangents); + URuntimeMeshLibrary::CalculateTangentsForMesh(Section->GetSectionMeshAccessor(), !(UpdateFlags & ESectionUpdateFlags::CalculateNormalTangentHard)); + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::AllVertexBuffers; + } + + if (!!(UpdateFlags & ESectionUpdateFlags::CalculateTessellationIndices)) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_HandleCommonSectionUpdateFlags_CalculateTessellationIndices); + URuntimeMeshLibrary::GenerateTessellationIndexBuffer(Section->GetSectionMeshAccessor(), Section->GetTessellationIndexAccessor()); + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::AdjacencyIndexBuffer; + } +} + +void FRuntimeMeshData::UpdateSectionPropertiesInternal(int32 SectionIndex, bool bUpdateRequiresProxyRecreateIfStatic) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateSectionPropertiesInternal); + + check(DoesSectionExist(SectionIndex)); + FRuntimeMeshSectionPtr Section = MeshSections[SectionIndex]; + + if (RenderProxy.IsValid()) + { + RenderProxy->UpdateSectionProperties_GameThread(SectionIndex, Section->GetSectionPropertyUpdateData()); + } + + bool bRequiresRecreate = bUpdateRequiresProxyRecreateIfStatic && + Section->GetUpdateFrequency() == EUpdateFrequency::Infrequent; + + if (bRequiresRecreate) + { + MarkRenderStateDirty(); + } + else + { + SendSectionPropertiesUpdate(SectionIndex); + } + + MarkChanged(); +} + +void FRuntimeMeshData::UpdateLocalBounds() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateLocalBounds); + + FBox LocalBox(EForceInit::ForceInitToZero); + + for (int32 SectionId = 0; SectionId < MeshSections.Num(); SectionId++) + { + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + if (Section.IsValid() && Section->ShouldRender()) + { + LocalBox += Section->GetBoundingBox(); + } + } + + LocalBounds = LocalBox.IsValid ? FBoxSphereBounds(LocalBox) : + FBoxSphereBounds(FVector(0, 0, 0), FVector(0, 0, 0), 0); // fall back to reset box sphere bounds + + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [](URuntimeMesh* Mesh) + { + Mesh->UpdateLocalBounds(); + })); +} + +FRuntimeMeshProxyPtr FRuntimeMeshData::EnsureProxyCreated(ERHIFeatureLevel::Type InFeatureLevel) +{ + if (!RenderProxy.IsValid()) + { + RenderProxy = MakeShareable(new FRuntimeMeshProxy(InFeatureLevel), FRuntimeMeshRenderThreadDeleter()); + Initialize(); + } + + // Sanity check that all RMC's are on the same feature level. Not sure any reason they wouldn't be. + check(RenderProxy->GetFeatureLevel() == InFeatureLevel); + + return RenderProxy; +} + + + + +void FRuntimeMeshData::Initialize() +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_Initialize); + + check(RenderProxy.IsValid()); + for (int32 SectionId = 0; SectionId < MeshSections.Num(); SectionId++) + { + if (MeshSections[SectionId].IsValid()) + { + RenderProxy->CreateSection_GameThread(SectionId, MeshSections[SectionId]->GetSectionCreationParams()); + } + } +} + +bool FRuntimeMeshData::ContainsPhysicsTriMeshData(bool InUseAllTriData) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_ContainsPhysicsTriMeshData); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + for (int32 SectionId = 0; SectionId < MeshSections.Num(); SectionId++) + { + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + if (Section.IsValid() && Section->HasValidMeshData() && Section->IsCollisionEnabled()) + { + return true; + } + } + + for (const auto& Section : MeshCollisionSections) + { + if (Section.Value.VertexBuffer.Num() > 0 && Section.Value.IndexBuffer.Num() > 0) + { + return true; + } + } + + return false; +} + +bool FRuntimeMeshData::GetPhysicsTriMeshData(struct FTriMeshCollisionData* CollisionData, bool InUseAllTriData) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetPhysicsTriMeshData); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + // Base vertex index for current section + + bool bHadCollision = false; + + // See if we should copy UVs + bool bCopyUVs = UPhysicsSettings::Get()->bSupportUVFromHitResults; + + for (int32 SectionId = 0; SectionId < MeshSections.Num(); SectionId++) + { + if (MeshSections[SectionId].IsValid() && MeshSections[SectionId]->IsCollisionEnabled()) + { + TArray UVs; + int32 NumTriangles = MeshSections[SectionId]->GetCollisionData(CollisionData->Vertices, CollisionData->Indices, UVs); + + if (bCopyUVs) + { + CollisionData->UVs.Add(MoveTemp(UVs)); + } + + for (int32 Index = 0; Index < NumTriangles; Index++) + { + CollisionData->MaterialIndices.Add(SectionId); + } + + // Update the vertex base index + bHadCollision = true; + } + } + + int32 VertexBase = CollisionData->Vertices.Num(); + + for (const auto& SectionEntry : MeshCollisionSections) + { + const auto& Section = SectionEntry.Value; + if (Section.VertexBuffer.Num() > 0 && Section.IndexBuffer.Num() > 0) + { + CollisionData->Vertices.Append(Section.VertexBuffer); + + const int32 NumTriangles = Section.IndexBuffer.Num() / 3; + for (int32 TriIdx = 0; TriIdx < NumTriangles; TriIdx++) + { + // Add the triangle + FTriIndices& Triangle = *new (CollisionData->Indices) FTriIndices; + Triangle.v0 = Section.IndexBuffer[(TriIdx * 3) + 0] + VertexBase; + Triangle.v1 = Section.IndexBuffer[(TriIdx * 3) + 1] + VertexBase; + Triangle.v2 = Section.IndexBuffer[(TriIdx * 3) + 2] + VertexBase; + + // Add material info + CollisionData->MaterialIndices.Add(SectionEntry.Key); + } + + + VertexBase = CollisionData->Vertices.Num(); + bHadCollision = true; + } + } + + CollisionData->bFlipNormals = true; + + return bHadCollision; +} + +void FRuntimeMeshData::CopyCollisionElementsToBodySetup(UBodySetup* Setup) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CopyCollisionElementsToBodySetup); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + check(IsInGameThread()); + + auto& ConvexElems = Setup->AggGeom.ConvexElems; + ConvexElems.Empty(); + for (const auto& Section : ConvexCollisionSections) + { + FKConvexElem& NewConvexElem = *new(ConvexElems) FKConvexElem(); + NewConvexElem.VertexData = Section.Value.VertexBuffer; + // TODO: Store this on the section so we don't have to compute it on each cook + NewConvexElem.ElemBox = Section.Value.BoundingBox; + } + + auto& BoxElems = Setup->AggGeom.BoxElems; + BoxElems.Empty(); + for (const FRuntimeMeshCollisionBox& Box : CollisionBoxes) + { + FKBoxElem& NewBox = *new(BoxElems) FKBoxElem(); + NewBox.Center = Box.Center; + NewBox.Rotation = Box.Rotation; + NewBox.X = Box.Extents.X; + NewBox.Y = Box.Extents.Y; + NewBox.Z = Box.Extents.Z; + } + + auto& SphereElems = Setup->AggGeom.SphereElems; + SphereElems.Empty(); + for (const FRuntimeMeshCollisionSphere& Sphere : CollisionSpheres) + { + FKSphereElem& NewSphere = *new(SphereElems)FKSphereElem(); + NewSphere.Center = Sphere.Center; + NewSphere.Radius = Sphere.Radius; + } + + auto& SphylElems = Setup->AggGeom.SphylElems; + SphylElems.Empty(); + for (const FRuntimeMeshCollisionCapsule& Capsule : CollisionCapsules) + { + FKSphylElem& NewSphyl = *new(SphylElems)FKSphylElem(); + NewSphyl.Center = Capsule.Center; + NewSphyl.Rotation = Capsule.Rotation; + NewSphyl.Radius = Capsule.Radius; + NewSphyl.Length = Capsule.Length; + } +} + +void FRuntimeMeshData::MarkCollisionDirty(bool bSkipChangedFlag) +{ + if (bSkipChangedFlag) + { + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [](URuntimeMesh* Mesh) + { + Mesh->MarkCollisionDirty(); + })); + } + else + { + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [](URuntimeMesh* Mesh) + { + Mesh->MarkCollisionDirty(); + Mesh->MarkChanged(); + })); + } +} + + +void FRuntimeMeshData::MarkRenderStateDirty() +{ + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [](URuntimeMesh* Mesh) + { + Mesh->ForceProxyRecreate(); + })); +} + +void FRuntimeMeshData::SendSectionPropertiesUpdate(int32 SectionIndex) +{ + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda( + [SectionIndex](URuntimeMesh* Mesh) + { + Mesh->SendSectionPropertiesUpdate(SectionIndex); + })); +} + +int32 FRuntimeMeshData::GetSectionFromCollisionFaceIndex(int32 FaceIndex) const +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_GetSectionFromCollisionFaceIndex); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + int32 SectionIndex = 0; + + // Look for element that corresponds to the supplied face + int32 TotalFaceCount = 0; + + for (int32 SectionIdx = 0; SectionIdx < MeshSections.Num(); SectionIdx++) + { + const FRuntimeMeshSectionPtr& Section = MeshSections[SectionIdx]; + + if (Section.IsValid() && Section->IsCollisionEnabled()) + { + int32 NumFaces = Section->GetNumIndices() / 3; + TotalFaceCount += NumFaces; + + if (FaceIndex < TotalFaceCount) + { + // Grab the material + SectionIndex = SectionIdx; + break; + } + } + } + + return SectionIndex; +} + +class FRuntimeMeshGameThreadTask +{ + TWeakObjectPtr RuntimeMesh; + FRuntimeMeshGameThreadTaskDelegate Delegate; +public: + + FRuntimeMeshGameThreadTask(TWeakObjectPtr InRuntimeMesh, FRuntimeMeshGameThreadTaskDelegate InDelegate) + : RuntimeMesh(InRuntimeMesh), Delegate(InDelegate) + { + } + + FORCEINLINE TStatId GetStatId() const + { + RETURN_QUICK_DECLARE_CYCLE_STAT(FRuntimeMeshGameThreadTask, STATGROUP_TaskGraphTasks); + } + + static ENamedThreads::Type GetDesiredThread() + { + return ENamedThreads::GameThread; + } + + static ESubsequentsMode::Type GetSubsequentsMode() + { + return ESubsequentsMode::FireAndForget; + } + + void DoTask(ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) + { + if (URuntimeMesh* Comp = RuntimeMesh.Get()) + { + Delegate.Execute(Comp); + } + } +}; + + +void FRuntimeMeshData::DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate Func) +{ + if (IsInGameThread()) + { + if (URuntimeMesh* Comp = ParentMeshObject.Get()) + { + Func.Execute(Comp); + } + else + { + check(false); + } + } + else + { + TGraphTask::CreateTask().ConstructAndDispatchWhenReady(ParentMeshObject, Func); + } +} + +void FRuntimeMeshData::MarkChanged() +{ +#if WITH_EDITOR + DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate::CreateLambda([](URuntimeMesh* Mesh) + { + Mesh->MarkChanged(); + })); +#endif +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshInternalUtilities.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshInternalUtilities.h new file mode 100755 index 0000000000..360ace0d6d --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshInternalUtilities.h @@ -0,0 +1,166 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + +struct FRuntimeMeshVertexSortingElement +{ + float Value; + int32 Index; + + FRuntimeMeshVertexSortingElement() {} + + FRuntimeMeshVertexSortingElement(int32 InIndex, FVector Vector) + { + Value = 0.30f * Vector.X + 0.33f * Vector.Y + 0.37f * Vector.Z; + Index = InIndex; + } +}; + +struct FRuntimeMeshVertexSortingFunction +{ + FORCEINLINE bool operator()(FRuntimeMeshVertexSortingElement const& Left, FRuntimeMeshVertexSortingElement const& Right) const + { + return Left.Value < Right.Value; + } +}; + + + + +struct FRuntimeMeshInternalUtilities +{ + static TMultiMap FindDuplicateVerticesMap(TFunction VertexAccessor, int32 NumVertices, float Tollerance = 0.0) + { + TArray VertexSorter; + VertexSorter.Empty(NumVertices); + for (int32 Index = 0; Index < NumVertices; Index++) + { + new (VertexSorter)FRuntimeMeshVertexSortingElement(Index, VertexAccessor(Index)); + } + + // Sort the list + VertexSorter.Sort(FRuntimeMeshVertexSortingFunction()); + + // Clear the index map. + TMultiMap IndexMap; + + // Map out the duplicates. + for (int32 Index = 0; Index < NumVertices; Index++) + { + uint32 SrcVertIdx = VertexSorter[Index].Index; + float Value = VertexSorter[Index].Value; + + // Search forward adding pairs both ways + for (int32 SubIndex = Index + 1; SubIndex < NumVertices; SubIndex++) + { + if (FMath::Abs(VertexSorter[SubIndex].Value - Value) > THRESH_POINTS_ARE_SAME * 4.01f) + { + // No more possible duplicates + break; + } + + uint32 OtherVertIdx = VertexSorter[SubIndex].Index; + if (VertexAccessor(SrcVertIdx).Equals(VertexAccessor(OtherVertIdx), Tollerance)) + { + IndexMap.AddUnique(SrcVertIdx, OtherVertIdx); + IndexMap.AddUnique(OtherVertIdx, SrcVertIdx); + } + } + } + + return IndexMap; + } + + static TMultiMap FindDuplicateVerticesMap(const TArray& Vertices, float Tollerance = 0.0) + { + int32 NumVertices = Vertices.Num(); + + TArray VertexSorter; + VertexSorter.Empty(NumVertices); + for (int32 Index = 0; Index < NumVertices; Index++) + { + new (VertexSorter)FRuntimeMeshVertexSortingElement(Index, Vertices[Index]); + } + + // Sort the list + VertexSorter.Sort(FRuntimeMeshVertexSortingFunction()); + + // Clear the index map. + TMultiMap IndexMap; + + // Map out the duplicates. + for (int32 Index = 0; Index < NumVertices; Index++) + { + uint32 SrcVertIdx = VertexSorter[Index].Index; + float Value = VertexSorter[Index].Value; + + // Search forward adding pairs both ways + for (int32 SubIndex = Index + 1; SubIndex < NumVertices; SubIndex++) + { + if (FMath::Abs(VertexSorter[SubIndex].Value - Value) > THRESH_POINTS_ARE_SAME * 4.01f) + { + // No more possible duplicates + break; + } + + uint32 OtherVertIdx = VertexSorter[SubIndex].Index; + if (Vertices[SrcVertIdx].Equals(Vertices[OtherVertIdx], Tollerance)) + { + IndexMap.AddUnique(SrcVertIdx, OtherVertIdx); + IndexMap.AddUnique(OtherVertIdx, SrcVertIdx); + } + } + } + + return IndexMap; + } + + static TArray FindDuplicateVertices(const TArray& Vertices, float Tollerance = 0.0) + { + int32 NumVertices = Vertices.Num(); + + TArray VertexSorter; + VertexSorter.Empty(NumVertices); + for (int32 Index = 0; Index < NumVertices; Index++) + { + new (VertexSorter)FRuntimeMeshVertexSortingElement(Index, Vertices[Index]); + } + + // Sort the list + VertexSorter.Sort(FRuntimeMeshVertexSortingFunction()); + + // Clear the index map. + TArray IndexMap; + IndexMap.AddUninitialized(NumVertices); + FMemory::Memset(IndexMap.GetData(), 0xFF, NumVertices * sizeof(uint32)); + + // Map out the duplicates. + for (int32 Index = 0; Index < NumVertices; Index++) + { + uint32 SrcVertIdx = VertexSorter[Index].Index; + float Value = VertexSorter[Index].Value; + IndexMap[SrcVertIdx] = FMath::Min(IndexMap[SrcVertIdx], SrcVertIdx); + + // Search forward adding pairs both ways + for (int32 SubIndex = Index + 1; SubIndex < NumVertices; SubIndex++) + { + if (FMath::Abs(VertexSorter[SubIndex].Value - Value) > THRESH_POINTS_ARE_SAME * 4.01f) + { + // No more possible duplicates + break; + } + + uint32 OtherVertIdx = VertexSorter[SubIndex].Index; + if (Vertices[SrcVertIdx].Equals(Vertices[OtherVertIdx], Tollerance)) + { + IndexMap[SrcVertIdx] = FMath::Min(IndexMap[SrcVertIdx], OtherVertIdx); + IndexMap[OtherVertIdx] = FMath::Min(IndexMap[OtherVertIdx], SrcVertIdx); + } + } + } + + return IndexMap; + } +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.cpp new file mode 100755 index 0000000000..40b5cb552b --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.cpp @@ -0,0 +1,216 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshLegacySerialization.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMeshCore.h" + + +struct FRuntimeMeshCollisionSection_OLD +{ + TArray VertexBuffer; + TArray IndexBuffer; + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionSection_OLD& Section) + { + Ar << Section.VertexBuffer; + Ar << Section.IndexBuffer; + return Ar; + } +}; + +struct FRuntimeConvexCollisionSection_OLD +{ + TArray VertexBuffer; + FBox BoundingBox; + + friend FArchive& operator <<(FArchive& Ar, FRuntimeConvexCollisionSection_OLD& Section) + { + Ar << Section.VertexBuffer; + Ar << Section.BoundingBox; + return Ar; + } +}; + + +bool FRuntimeMeshComponentLegacySerialization::Serialize(FArchive& Ar) +{ + + Ar.UsingCustomVersion(FRuntimeMeshVersion::GUID); + + // We bail here if this is a v3 file as the RMC doesn't serialize anything here + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::RuntimeMeshComponentV3) + { + return false; + } + + check(Ar.IsLoading()); + + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::SerializationV2) + { + SerializeV2(Ar); + } + else + { + SerializeV1(Ar); + } + + return true; +} + + +void FRuntimeMeshComponentLegacySerialization::SerializeV1(FArchive& Ar) +{ + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::Initial) + { + int32 SectionsCount; + Ar << SectionsCount; + + for (int32 Index = 0; Index < SectionsCount; Index++) + { + bool IsSectionValid; + Ar << IsSectionValid; + + if (IsSectionValid) + { + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::TemplatedVertexFix) + { + int32 NumUVChannels; + bool WantsHalfPrecisionUVs; + + Ar << NumUVChannels; + Ar << WantsHalfPrecisionUVs; + + + } + else + { + bool bWantsNormal; + bool bWantsTangent; + bool bWantsColor; + int32 TextureChannels; + + Ar << bWantsNormal; + Ar << bWantsTangent; + Ar << bWantsColor; + Ar << TextureChannels; + } + + SectionSerialize(Ar, false); + } + } + } + + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::SerializationOptional) + { + // Serialize the collision data + TArray MeshCollisionSections; + Ar << MeshCollisionSections; + TArray ConvexCollisionSections; + Ar << ConvexCollisionSections; + } +} + + +void FRuntimeMeshComponentLegacySerialization::SerializeV2(FArchive& Ar) +{ + bool bSerializeMeshData; + bool bUseComplexAsSimpleCollision; + + // Serialize basic settings + Ar << bSerializeMeshData; + Ar << bUseComplexAsSimpleCollision; + + // Serialize the number of sections... + int32 NumSections; + Ar << NumSections; + + // Next serialize all the sections... + for (int32 Index = 0; Index < NumSections; Index++) + { + SerializeRMCSection(Ar, Index); + } + + + // Serialize the collision data + TArray MeshCollisionSections; + Ar << MeshCollisionSections; + TArray ConvexCollisionSections; + Ar << ConvexCollisionSections; +} + + + +void FRuntimeMeshComponentLegacySerialization::SerializeRMCSection(FArchive& Ar, int32 SectionIndex) +{ + // Serialize the section validity (default it to section valid + type known for saving reasons) + bool bSectionIsValid; + Ar << bSectionIsValid; + + // If section is invalid, skip + if (!bSectionIsValid) + { + return; + } + + // Serialize section type info + FGuid TypeGuid; + bool bHasSeparatePositionBuffer; + + Ar << TypeGuid; + Ar << bHasSeparatePositionBuffer; + + // This is the raw section data, but we do nothing with it here since we don't have a good conversion path + TArray SectionData; + Ar << SectionData; +} + +void FRuntimeMeshComponentLegacySerialization::SectionSerialize(FArchive& Ar, bool bNeedsPositionOnlyBuffer) +{ + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::SerializationV2) + { + if (bNeedsPositionOnlyBuffer) + { + TArray PositionVertexBuffer; + Ar << PositionVertexBuffer; + } + TArray IndexBuffer; + Ar << IndexBuffer; + TArray TessellationIndexBuffer; + Ar << TessellationIndexBuffer; + FBox LocalBoundingBox; + Ar << LocalBoundingBox; + bool CollisionEnabled; + Ar << CollisionEnabled; + bool bIsVisible; + Ar << bIsVisible; + bool bCastsShadow; + Ar << bCastsShadow; + bool bShouldUseAdjacencyIndexBuffer; + Ar << bShouldUseAdjacencyIndexBuffer; + + // Serialize the update frequency as an int32 + int32 UpdateFreq; + Ar << UpdateFreq; + + bool bIsLegacySectionType; + Ar << bIsLegacySectionType; + } + else + { + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::DualVertexBuffer) + { + TArray PositionVertexBuffer; + Ar << PositionVertexBuffer; + } + TArray IndexBuffer; + Ar << IndexBuffer; + FBox LocalBoundingBox; + Ar << LocalBoundingBox; + bool CollisionEnabled; + Ar << CollisionEnabled; + bool bIsVisible; + Ar << bIsVisible; + int32 UpdateFreq; + Ar << UpdateFreq; + } +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.h new file mode 100755 index 0000000000..4e43788c36 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLegacySerialization.h @@ -0,0 +1,24 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + +class URuntimeMeshComponent; + +/** + * + */ +class FRuntimeMeshComponentLegacySerialization +{ +public: + static bool Serialize(FArchive& Ar); + +private: + static void SerializeV1(FArchive& Ar); + static void SerializeV2(FArchive& Ar); + + static void SerializeRMCSection(FArchive& Ar, int32 SectionIndex); + + static void SectionSerialize(FArchive& Ar, bool bNeedsPositionOnlyBuffer); +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLibrary.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLibrary.cpp new file mode 100755 index 0000000000..7916f04351 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshLibrary.cpp @@ -0,0 +1,703 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshLibrary.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMeshComponent.h" +#include "EngineGlobals.h" +#include "Logging/TokenizedMessage.h" +#include "Logging/MessageLog.h" +#include "Misc/UObjectToken.h" +#include "StaticMeshResources.h" +#include "Engine/StaticMesh.h" +#include "RuntimeMeshInternalUtilities.h" +#include "RuntimeMeshTessellationUtilities.h" +#include "PhysicsEngine/BodySetup.h" + +#define LOCTEXT_NAMESPACE "RuntimeMeshLibrary" + +DECLARE_CYCLE_STAT(TEXT("RML - Copy Static Mesh to Runtime Mesh"), STAT_RuntimeMeshLibrary_CopyStaticMeshToRuntimeMesh, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RML - Calculate Tangents For Mesh"), STAT_RuntimeMeshLibrary_CalculateTangentsForMesh, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RML - Get Static Mesh Section"), STAT_RuntimeMeshLibrary_GetStaticMeshSection, STATGROUP_RuntimeMesh); + + +void URuntimeMeshLibrary::CalculateTangentsForMesh(const TArray& Vertices, const TArray& Triangles, TArray& Normals, + const TArray& UVs, TArray& Tangents, bool bCreateSmoothNormals) +{ + Normals.SetNum(Vertices.Num()); + Tangents.SetNum(Vertices.Num()); + CalculateTangentsForMesh( + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&Vertices](int32 Index) -> FVector { return Vertices[Index]; }, + [&UVs](int32 Index) -> FVector2D { return UVs[Index]; }, + [&Normals, &Tangents](int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ) + { + Normals[Index] = TangentZ; + Tangents[Index].TangentX = TangentX; + Tangents[Index].bFlipTangentY = GetBasisDeterminantSign(TangentX, TangentY, TangentZ) < 0; + }, + Vertices.Num(), UVs.Num(), Triangles.Num(), bCreateSmoothNormals); +} + +void URuntimeMeshLibrary::CalculateTangentsForMeshPacked(TArray& Vertices, const TArray& Triangles, bool bCreateSmoothNormals) +{ + CalculateTangentsForMesh( + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&Vertices](int32 Index) -> FVector { return Vertices[Index].Position; }, + [&Vertices](int32 Index) -> FVector2D { return Vertices[Index].UV0; }, + [&Vertices](int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ) + { + Vertices[Index].Normal = TangentZ; + Vertices[Index].Tangent.TangentX = TangentX; + Vertices[Index].Tangent.bFlipTangentY = GetBasisDeterminantSign(TangentX, TangentY, TangentZ) < 0; + }, + Vertices.Num(), Vertices.Num(), Triangles.Num(), bCreateSmoothNormals); +} + +void URuntimeMeshLibrary::CalculateTangentsForMesh(TArray& Vertices, const TArray& Triangles, bool bCreateSmoothNormals) +{ + CalculateTangentsForMesh( + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&Vertices](int32 Index) -> FVector { return Vertices[Index].Position; }, + [&Vertices](int32 Index) -> FVector2D { return Vertices[Index].UV0; }, + [&Vertices](int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ) + { + Vertices[Index].Normal = TangentZ; + Vertices[Index].SetTangents(TangentX, TangentY, TangentZ); + }, + Vertices.Num(), Vertices.Num(), Triangles.Num(), bCreateSmoothNormals); +} + +void URuntimeMeshLibrary::CalculateTangentsForMesh(const TSharedPtr& MeshAccessor, bool bCreateSmoothNormals) +{ + CalculateTangentsForMesh( + [MeshAccessor](int32 Index) -> int32 { return MeshAccessor->GetIndex(Index); }, + [MeshAccessor](int32 Index) -> FVector { return MeshAccessor->GetPosition(Index); }, + [MeshAccessor](int32 Index) -> FVector2D { return MeshAccessor->GetUV(Index); }, + [MeshAccessor](int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ) + { + MeshAccessor->SetTangents(Index, TangentX, TangentY, TangentZ); + }, + MeshAccessor->NumVertices(), MeshAccessor->NumVertices(), MeshAccessor->NumIndices(), bCreateSmoothNormals); +} + + + + +TArray URuntimeMeshLibrary::GenerateTessellationIndexBuffer(const TArray& Vertices, const TArray& Triangles, TArray& Normals, const TArray& UVs, TArray& Tangents) +{ + TArray TessellationTriangles; + FTessellationUtilities::CalculateTessellationIndices(Vertices.Num(), Triangles.Num(), + [&Vertices](int32 Index) -> FVector { return Vertices[Index]; }, + [&UVs](int32 Index) -> FVector2D { return UVs.Num() > Index ? UVs[Index] : FVector2D::ZeroVector; }, + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&TessellationTriangles](int32 NewSize) { TessellationTriangles.SetNum(NewSize); }, + [&TessellationTriangles]() -> int32 { return TessellationTriangles.Num(); }, + [&TessellationTriangles](int32 Index, int32 NewValue) { TessellationTriangles[Index] = NewValue; }, + [&TessellationTriangles](int32 Index) -> int32 { return TessellationTriangles[Index]; }); + return TessellationTriangles; +} + +TArray URuntimeMeshLibrary::GenerateTessellationIndexBufferPacked(const TArray& Vertices, const TArray& Triangles) +{ + TArray TessellationTriangles; + FTessellationUtilities::CalculateTessellationIndices(Vertices.Num(), Triangles.Num(), + [&Vertices](int32 Index) -> FVector { return Vertices[Index].Position; }, + [&Vertices](int32 Index) -> FVector2D { return Vertices[Index].UV0; }, + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&TessellationTriangles](int32 NewSize) { TessellationTriangles.SetNum(NewSize); }, + [&TessellationTriangles]() -> int32 { return TessellationTriangles.Num(); }, + [&TessellationTriangles](int32 Index, int32 NewValue) { TessellationTriangles[Index] = NewValue; }, + [&TessellationTriangles](int32 Index) -> int32 { return TessellationTriangles[Index]; }); + return TessellationTriangles; +} + +TArray URuntimeMeshLibrary::GenerateTessellationIndexBuffer(const TArray& Vertices, const TArray& Triangles) +{ + TArray TessellationTriangles; + FTessellationUtilities::CalculateTessellationIndices(Vertices.Num(), Triangles.Num(), + [&Vertices](int32 Index) -> FVector { return Vertices[Index].Position; }, + [&Vertices](int32 Index) -> FVector2D { return Vertices[Index].UV0; }, + [&Triangles](int32 Index) -> int32 { return Triangles[Index]; }, + [&TessellationTriangles](int32 NewSize) { TessellationTriangles.SetNum(NewSize); }, + [&TessellationTriangles]() -> int32 { return TessellationTriangles.Num(); }, + [&TessellationTriangles](int32 Index, int32 NewValue) { TessellationTriangles[Index] = NewValue; }, + [&TessellationTriangles](int32 Index) -> int32 { return TessellationTriangles[Index]; }); + return TessellationTriangles; +} + +TArray URuntimeMeshLibrary::GenerateTessellationIndexBuffer(const TSharedPtr& MeshAccessor) +{ + TArray TessellationTriangles; + FTessellationUtilities::CalculateTessellationIndices(MeshAccessor->NumVertices(), MeshAccessor->NumIndices(), + [&MeshAccessor](int32 Index) -> FVector { return MeshAccessor->GetPosition(Index); }, + [&MeshAccessor](int32 Index) -> FVector2D { return MeshAccessor->GetUV(Index); }, + [&MeshAccessor](int32 Index) -> int32 { return MeshAccessor->GetIndex(Index); }, + [&TessellationTriangles](int32 NewSize) { TessellationTriangles.SetNum(NewSize); }, + [&TessellationTriangles]() -> int32 { return TessellationTriangles.Num(); }, + [&TessellationTriangles](int32 Index, int32 NewValue) { TessellationTriangles[Index] = NewValue; }, + [&TessellationTriangles](int32 Index) -> int32 { return TessellationTriangles[Index]; }); + return TessellationTriangles; +} + +void URuntimeMeshLibrary::GenerateTessellationIndexBuffer(const TSharedPtr& MeshAccessor, const TSharedPtr& OutTessellationIndices) +{ + OutTessellationIndices->EmptyIndices(); + FTessellationUtilities::CalculateTessellationIndices(MeshAccessor->NumVertices(), MeshAccessor->NumIndices(), + [&MeshAccessor](int32 Index) -> FVector { return MeshAccessor->GetPosition(Index); }, + [&MeshAccessor](int32 Index) -> FVector2D { return MeshAccessor->GetUV(Index); }, + [&MeshAccessor](int32 Index) -> int32 { return MeshAccessor->GetIndex(Index); }, + [&OutTessellationIndices](int32 NewSize) { OutTessellationIndices->SetNumIndices(NewSize); }, + [&OutTessellationIndices]() -> int32 { return OutTessellationIndices->NumIndices(); }, + [&OutTessellationIndices](int32 Index, int32 NewValue) { OutTessellationIndices->SetIndex(Index, NewValue); }, + [&OutTessellationIndices](int32 Index) -> int32 { return OutTessellationIndices->GetIndex(Index); }); +} + + + + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles, + TArray& Normals, TArray& UVs, TArray& Colors, TArray& Tangents) +{ + Vertices.Empty(); + Triangles.Empty(); + Normals.Empty(); + UVs.Empty(); + Colors.Empty(); + Tangents.Empty(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, 1, + [&Vertices, &Normals, &Tangents](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + int32 NewIndex = Vertices.Add(Position); + Normals.Add(TangentZ); + Tangents.Add(FRuntimeMeshTangent(TangentX, GetBasisDeterminantSign(TangentX, TangentY, TangentZ) < 0)); + return NewIndex; + }, + [&UVs](int32 Index, int32 UVIndex, FVector2D UV) + { + check(UVIndex == 0); + UVs[Index] = UV; + }, + [&Colors](int32 Index, FColor Color) + { + Colors[Index] = Color; + }, + [&Triangles](int32 Index) + { + Triangles.Add(Index); + }, + [](int32 Index) + { + }); +} + +void URuntimeMeshLibrary::GetStaticMeshSectionPacked(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(); + Triangles.Empty(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, 1, + [&Vertices](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + return Vertices.Add(FRuntimeMeshBlueprintVertexSimple(Position, TangentZ, FRuntimeMeshTangent(TangentX, GetBasisDeterminantSign(TangentX, TangentY, TangentZ) < 0), FVector2D::ZeroVector)); + }, + [&Vertices](int32 Index, int32 UVIndex, FVector2D UV) + { + check(UVIndex == 0); + Vertices[Index].UV0 = UV; + }, + [&Vertices](int32 Index, FColor Color) + { + Vertices[Index].Color = Color; + }, + [&Triangles](int32 Index) + { + Triangles.Add(Index); + }, + [](int32 Index) + { + }); +} + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(); + Triangles.Empty(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, 1, + [&Vertices](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + return Vertices.Add(FRuntimeMeshVertexSimple(Position, TangentX, TangentY, TangentZ)); + }, + [&Vertices](int32 Index, int32 UVIndex, FVector2D UV) + { + check(UVIndex == 0); + Vertices[Index].UV0 = UV; + }, + [&Vertices](int32 Index, FColor Color) + { + Vertices[Index].Color = Color; + }, + [&Triangles](int32 Index) + { + Triangles.Add(Index); + }, + [](int32 Index) + { + }); +} + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles, TArray& AdjacencyTriangles) +{ + Vertices.Empty(); + Triangles.Empty(); + AdjacencyTriangles.Empty(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, 1, + [&Vertices](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + return Vertices.Add(FRuntimeMeshVertexSimple(Position, TangentX, TangentY, TangentZ)); + }, + [&Vertices](int32 Index, int32 UVIndex, FVector2D UV) + { + check(UVIndex == 0); + Vertices[Index].UV0 = UV; + }, + [&Vertices](int32 Index, FColor Color) + { + Vertices[Index].Color = Color; + }, + [&Triangles](int32 Index) + { + Triangles.Add(Index); + }, + [&AdjacencyTriangles](int32 Index) + { + AdjacencyTriangles.Add(Index); + }); +} + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, const TSharedPtr& MeshAccessor) +{ + MeshAccessor->EmptyVertices(); + MeshAccessor->EmptyIndices(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, MeshAccessor->NumUVChannels(), + [&MeshAccessor](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + int32 NewIndex = MeshAccessor->AddVertex(Position); + MeshAccessor->SetTangents(NewIndex, TangentX, TangentY, TangentZ); + return NewIndex; + }, + [&MeshAccessor](int32 Index, int32 UVIndex, FVector2D UV) + { + MeshAccessor->SetUV(Index, UVIndex, UV); + }, + [&MeshAccessor](int32 Index, FColor Color) + { + MeshAccessor->SetColor(Index, Color); + }, + [&MeshAccessor](int32 Index) + { + MeshAccessor->AddIndex(Index); + }, + [](int32 Index) + { + }); +} + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, const TSharedPtr& MeshAccessor, const TSharedPtr& TessellationIndicesAccessor) +{ + MeshAccessor->EmptyVertices(); + MeshAccessor->EmptyIndices(); + TessellationIndicesAccessor->EmptyIndices(); + + GetStaticMeshSection(InMesh, LODIndex, SectionIndex, MeshAccessor->NumUVChannels(), + [&MeshAccessor](FVector Position, FVector TangentX, FVector TangentY, FVector TangentZ) -> int32 + { + int32 NewIndex = MeshAccessor->AddVertex(Position); + MeshAccessor->SetTangents(NewIndex, TangentX, TangentY, TangentZ); + return NewIndex; + }, + [&MeshAccessor](int32 Index, int32 UVIndex, FVector2D UV) + { + MeshAccessor->SetUV(Index, UVIndex, UV); + }, + [&MeshAccessor](int32 Index, FColor Color) + { + MeshAccessor->SetColor(Index, Color); + }, + [&MeshAccessor](int32 Index) + { + MeshAccessor->AddIndex(Index); + }, + [&TessellationIndicesAccessor](int32 Index) + { + TessellationIndicesAccessor->AddIndex(Index); + }); +} + + + + + +void URuntimeMeshLibrary::CopyStaticMeshToRuntimeMesh(UStaticMeshComponent* StaticMeshComponent, int32 LODIndex, URuntimeMesh* RuntimeMesh, bool bCreateCollision) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMeshLibrary_CopyStaticMeshToRuntimeMesh); + if (StaticMeshComponent != nullptr && + StaticMeshComponent->GetStaticMesh() != nullptr && + RuntimeMesh != nullptr) + { + UStaticMesh* StaticMesh = StaticMeshComponent->GetStaticMesh(); + + RuntimeMesh->ClearAllMeshSections(); + + //// MESH DATA + + int32 NumSections = StaticMesh->GetNumSections(LODIndex); + for (int32 SectionIndex = 0; SectionIndex < NumSections; SectionIndex++) + { + // Buffers for copying geom data + TSharedPtr MeshData = MakeRuntimeMeshBuilder(); + TArray AdjacencyTrianglesData; + TSharedPtr AdjacencyTrianglesAccessor = MakeShared(true, &AdjacencyTrianglesData); + TArray AdjacencyTriangles; + AdjacencyTriangles.SetNum(AdjacencyTrianglesData.Num() / 4); + FMemory::Memcpy(AdjacencyTriangles.GetData(), AdjacencyTrianglesData.GetData(), AdjacencyTrianglesData.Num()); + + + // TODO: Make this smarter to setup a mesh section to match the static mesh vertex configuration + // This will let it pick up the additional UVs or high pri normals/tangents/uvs + + // Get geom data from static mesh + GetStaticMeshSection(StaticMesh, LODIndex, SectionIndex, MeshData, AdjacencyTrianglesAccessor); + + // Create RuntimeMesh + RuntimeMesh->CreateMeshSection(SectionIndex, MeshData, bCreateCollision); + RuntimeMesh->SetSectionTessellationTriangles(SectionIndex, AdjacencyTriangles); + } + + //// SIMPLE COLLISION + CopyCollisionFromStaticMesh(StaticMesh, RuntimeMesh); + + + //// MATERIALS + + for (int32 MatIndex = 0; MatIndex < StaticMeshComponent->GetNumMaterials(); MatIndex++) + { + RuntimeMesh->SetSectionMaterial(MatIndex, StaticMeshComponent->GetMaterial(MatIndex)); + } + } +} + + +void URuntimeMeshLibrary::CopyStaticMeshToRuntimeMeshComponent(UStaticMeshComponent* StaticMeshComponent, int32 LODIndex, URuntimeMeshComponent* RuntimeMeshComponent, bool bCreateCollision) +{ + CopyStaticMeshToRuntimeMesh(StaticMeshComponent, LODIndex, RuntimeMeshComponent->GetOrCreateRuntimeMesh(), bCreateCollision); +} + +void URuntimeMeshLibrary::CopyCollisionFromStaticMesh(UStaticMesh* StaticMesh, URuntimeMesh* RuntimeMesh) +{ + // Clear any existing collision hulls + RuntimeMesh->ClearAllConvexCollisionSections(); + + if (StaticMesh->BodySetup != nullptr) + { + // Iterate over all convex hulls on static mesh.. + const int32 NumConvex = StaticMesh->BodySetup->AggGeom.ConvexElems.Num(); + for (int ConvexIndex = 0; ConvexIndex < NumConvex; ConvexIndex++) + { + // Copy convex verts + FKConvexElem& MeshConvex = StaticMesh->BodySetup->AggGeom.ConvexElems[ConvexIndex]; + + RuntimeMesh->AddConvexCollisionSection(MeshConvex.VertexData); + } + } +} + +void URuntimeMeshLibrary::CalculateTangentsForMesh(TFunction IndexAccessor, TFunction VertexAccessor, TFunction UVAccessor, + TFunction TangentSetter, int32 NumVertices, int32 NumUVs, int32 NumIndices, bool bCreateSmoothNormals) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMeshLibrary_CalculateTangentsForMesh); + + if (NumVertices == 0 || NumIndices == 0) + { + return; + } + + // Calculate the duplicate vertices map if we're wanting smooth normals. Don't find duplicates if we don't want smooth normals + // that will cause it to only smooth across faces sharing a common vertex, not across faces with vertices of common position + const TMultiMap DuplicateVertexMap = bCreateSmoothNormals ? FRuntimeMeshInternalUtilities::FindDuplicateVerticesMap(VertexAccessor, NumVertices) : TMultiMap(); + + + // Number of triangles + const int32 NumTris = NumIndices / 3; + + // Map of vertex to triangles in Triangles array + TMultiMap VertToTriMap; + // Map of vertex to triangles to consider for normal calculation + TMultiMap VertToTriSmoothMap; + + // Normal/tangents for each face + TArray FaceTangentX, FaceTangentY, FaceTangentZ; + FaceTangentX.AddUninitialized(NumTris); + FaceTangentY.AddUninitialized(NumTris); + FaceTangentZ.AddUninitialized(NumTris); + + // Iterate over triangles + for (int TriIdx = 0; TriIdx < NumTris; TriIdx++) + { + uint32 CornerIndex[3]; + FVector P[3]; + + for (int32 CornerIdx = 0; CornerIdx < 3; CornerIdx++) + { + // Find vert index (clamped within range) + uint32 VertIndex = FMath::Min(IndexAccessor((TriIdx * 3) + CornerIdx), NumVertices - 1); + + CornerIndex[CornerIdx] = VertIndex; + P[CornerIdx] = VertexAccessor(VertIndex); + + // Find/add this vert to index buffer + TArray VertOverlaps; + DuplicateVertexMap.MultiFind(VertIndex, VertOverlaps); + + // Remember which triangles map to this vert + VertToTriMap.AddUnique(VertIndex, TriIdx); + VertToTriSmoothMap.AddUnique(VertIndex, TriIdx); + + // Also update map of triangles that 'overlap' this vert (ie don't match UV, but do match smoothing) and should be considered when calculating normal + for (int32 OverlapIdx = 0; OverlapIdx < VertOverlaps.Num(); OverlapIdx++) + { + // For each vert we overlap.. + int32 OverlapVertIdx = VertOverlaps[OverlapIdx]; + + // Add this triangle to that vert + VertToTriSmoothMap.AddUnique(OverlapVertIdx, TriIdx); + + // And add all of its triangles to us + TArray OverlapTris; + VertToTriMap.MultiFind(OverlapVertIdx, OverlapTris); + for (int32 OverlapTriIdx = 0; OverlapTriIdx < OverlapTris.Num(); OverlapTriIdx++) + { + VertToTriSmoothMap.AddUnique(VertIndex, OverlapTris[OverlapTriIdx]); + } + } + } + + // Calculate triangle edge vectors and normal + const FVector Edge21 = P[1] - P[2]; + const FVector Edge20 = P[0] - P[2]; + const FVector TriNormal = (Edge21 ^ Edge20).GetSafeNormal(); + + // If we have UVs, use those to calculate + if (NumUVs == NumVertices) + { + const FVector2D T1 = UVAccessor(CornerIndex[0]); + const FVector2D T2 = UVAccessor(CornerIndex[1]); + const FVector2D T3 = UVAccessor(CornerIndex[2]); + +// float X1 = P[1].X - P[0].X; +// float X2 = P[2].X - P[0].X; +// float Y1 = P[1].Y - P[0].Y; +// float Y2 = P[2].Y - P[0].Y; +// float Z1 = P[1].Z - P[0].Z; +// float Z2 = P[2].Z - P[0].Z; +// +// float S1 = U1.X - U0.X; +// float S2 = U2.X - U0.X; +// float T1 = U1.Y - U0.Y; +// float T2 = U2.Y - U0.Y; +// +// float R = 1.0f / (S1 * T2 - S2 * T1); +// FaceTangentX[TriIdx] = FVector((T2 * X1 - T1 * X2) * R, (T2 * Y1 - T1 * Y2) * R, +// (T2 * Z1 - T1 * Z2) * R); +// FaceTangentY[TriIdx] = FVector((S1 * X2 - S2 * X1) * R, (S1 * Y2 - S2 * Y1) * R, +// (S1 * Z2 - S2 * Z1) * R); + + + + + FMatrix ParameterToLocal( + FPlane(P[1].X - P[0].X, P[1].Y - P[0].Y, P[1].Z - P[0].Z, 0), + FPlane(P[2].X - P[0].X, P[2].Y - P[0].Y, P[2].Z - P[0].Z, 0), + FPlane(P[0].X, P[0].Y, P[0].Z, 0), + FPlane(0, 0, 0, 1) + ); + + FMatrix ParameterToTexture( + FPlane(T2.X - T1.X, T2.Y - T1.Y, 0, 0), + FPlane(T3.X - T1.X, T3.Y - T1.Y, 0, 0), + FPlane(T1.X, T1.Y, 1, 0), + FPlane(0, 0, 0, 1) + ); + + // Use InverseSlow to catch singular matrices. Inverse can miss this sometimes. + const FMatrix TextureToLocal = ParameterToTexture.Inverse() * ParameterToLocal; + + FaceTangentX[TriIdx] = TextureToLocal.TransformVector(FVector(1, 0, 0)).GetSafeNormal(); + FaceTangentY[TriIdx] = TextureToLocal.TransformVector(FVector(0, 1, 0)).GetSafeNormal(); + } + else + { + FaceTangentX[TriIdx] = Edge20.GetSafeNormal(); + FaceTangentY[TriIdx] = (FaceTangentX[TriIdx] ^ TriNormal).GetSafeNormal(); + } + + FaceTangentZ[TriIdx] = TriNormal; + } + + + // Arrays to accumulate tangents into + TArray VertexTangentXSum, VertexTangentYSum, VertexTangentZSum; + VertexTangentXSum.AddZeroed(NumVertices); + VertexTangentYSum.AddZeroed(NumVertices); + VertexTangentZSum.AddZeroed(NumVertices); + + // For each vertex.. + for (int VertxIdx = 0; VertxIdx < NumVertices; VertxIdx++) + { + // Find relevant triangles for normal + TArray SmoothTris; + VertToTriSmoothMap.MultiFind(VertxIdx, SmoothTris); + + for (int i = 0; i < SmoothTris.Num(); i++) + { + uint32 TriIdx = SmoothTris[i]; + VertexTangentZSum[VertxIdx] += FaceTangentZ[TriIdx]; + } + + // Find relevant triangles for tangents + TArray TangentTris; + VertToTriMap.MultiFind(VertxIdx, TangentTris); + + for (int i = 0; i < TangentTris.Num(); i++) + { + uint32 TriIdx = TangentTris[i]; + VertexTangentXSum[VertxIdx] += FaceTangentX[TriIdx]; + VertexTangentYSum[VertxIdx] += FaceTangentY[TriIdx]; + } + } + + // Finally, normalize tangents and build output arrays + for (int VertxIdx = 0; VertxIdx < NumVertices; VertxIdx++) + { + FVector& TangentX = VertexTangentXSum[VertxIdx]; + FVector& TangentY = VertexTangentYSum[VertxIdx]; + FVector& TangentZ = VertexTangentZSum[VertxIdx]; + + TangentX.Normalize(); + //TangentY.Normalize(); + TangentZ.Normalize(); + + // Use Gram-Schmidt orthogonalization to make sure X is orthonormal with Z + TangentX -= TangentZ * (TangentZ | TangentX); + TangentX.Normalize(); + TangentY.Normalize(); + + + TangentSetter(VertxIdx, TangentX, TangentY, TangentZ); + } +} + +int32 URuntimeMeshLibrary::GetNewIndexForOldVertIndex(const FPositionVertexBuffer* PosBuffer, const FStaticMeshVertexBuffer* VertBuffer, const FColorVertexBuffer* ColorBuffer, + TMap& MeshToSectionVertMap, int32 VertexIndex, int32 NumUVChannels, TFunction VertexCreator, + TFunction UVSetter, TFunction ColorSetter) +{ + int32* FoundIndex = MeshToSectionVertMap.Find(VertexIndex); + if (FoundIndex != nullptr) + { + return *FoundIndex; + } + else + { + int32 NewVertexIndex = VertexCreator( + PosBuffer->VertexPosition(VertexIndex), + VertBuffer->VertexTangentX(VertexIndex), + VertBuffer->VertexTangentY(VertexIndex), + VertBuffer->VertexTangentZ(VertexIndex)); + + if (ColorBuffer && ColorBuffer->GetNumVertices() > (uint32)NewVertexIndex) + { + ColorSetter(NewVertexIndex, ColorBuffer->VertexColor(VertexIndex)); + } + + int32 NumTexCoordsToCopy = FMath::Min(NumUVChannels, (int32)VertBuffer->GetNumTexCoords()); + for (int32 Index = 0; Index < NumTexCoordsToCopy; Index++) + { + UVSetter(NewVertexIndex, Index, VertBuffer->GetVertexUV(VertexIndex, Index)); + } + + MeshToSectionVertMap.Add(VertexIndex, NewVertexIndex); + return NewVertexIndex; + } +} + +void URuntimeMeshLibrary::GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, int32 NumSupportedUVs, + TFunction VertexCreator, + TFunction UVSetter, TFunction ColorSetter, TFunction IndexCreator, TFunction AdjacencyIndexCreator) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMeshLibrary_GetStaticMeshSection); + + if (InMesh != nullptr) + { + // Log a PIE warning if this will fail in a cooked build + if (!InMesh->bAllowCPUAccess) + { + FMessageLog("PIE").Warning() + ->AddToken(FTextToken::Create(LOCTEXT("GetSectionFromStaticMeshStart", "Calling GetSectionFromStaticMesh on"))) + ->AddToken(FUObjectToken::Create(InMesh)) + ->AddToken(FTextToken::Create(LOCTEXT("GetSectionFromStaticMeshEnd", "but 'Allow CPU Access' is not enabled. This is required for converting StaticMesh to ProceduralMeshComponent in cooked builds."))); + } + + if ((InMesh->bAllowCPUAccess || GIsEditor) && InMesh->RenderData != nullptr && InMesh->RenderData->LODResources.IsValidIndex(LODIndex)) + { + const FStaticMeshLODResources& LOD = InMesh->RenderData->LODResources[LODIndex]; + if (LOD.Sections.IsValidIndex(SectionIndex)) + { + // Map from vert buffer for whole mesh to vert buffer for section of interest + TMap MeshToSectionVertMap; + + const FStaticMeshSection& Section = LOD.Sections[SectionIndex]; + const uint32 OnePastLastIndex = Section.FirstIndex + Section.NumTriangles * 3; + FIndexArrayView Indices = LOD.IndexBuffer.GetArrayView(); + + // Iterate over section index buffer, copying verts as needed + for (uint32 i = Section.FirstIndex; i < OnePastLastIndex; i++) + { + uint32 MeshVertIndex = Indices[i]; + + // See if we have this vert already in our section vert buffer, and copy vert in if not + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + int32 SectionVertIndex = GetNewIndexForOldVertIndex(&LOD.VertexBuffers.PositionVertexBuffer, &LOD.VertexBuffers.StaticMeshVertexBuffer, &LOD.VertexBuffers.ColorVertexBuffer, MeshToSectionVertMap, MeshVertIndex, NumSupportedUVs, VertexCreator, UVSetter, ColorSetter); +#else + int32 SectionVertIndex = GetNewIndexForOldVertIndex(&LOD.PositionVertexBuffer, &LOD.VertexBuffer, &LOD.ColorVertexBuffer, MeshToSectionVertMap, MeshVertIndex, NumSupportedUVs, VertexCreator, UVSetter, ColorSetter); +#endif + + // Add to index buffer + IndexCreator(SectionVertIndex); + } + + // Lets copy the adjacency information too for tessellation + // At this point all vertices should be copied so it should work to just copy/convert the indices. + if (LOD.bHasAdjacencyInfo && LOD.AdjacencyIndexBuffer.GetNumIndices() > 0) + { + FIndexArrayView AdjacencyIndices = LOD.AdjacencyIndexBuffer.GetArrayView(); + + // We multiply these by 4 as the adjacency data is 12 indices per triangle instead of the normal 3 + uint32 StartIndex = Section.FirstIndex * 4; + uint32 NumIndices = Section.NumTriangles * 3 * 4; + + for (uint32 Index = 0; Index < NumIndices; Index++) + { + AdjacencyIndexCreator(MeshToSectionVertMap[AdjacencyIndices[Index]]); + } + } + } + } + } +} + + +#undef LOCTEXT_NAMESPACE \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.cpp new file mode 100755 index 0000000000..1079f7e3e3 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.cpp @@ -0,0 +1,145 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshProxy.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMesh.h" + +FRuntimeMeshProxy::FRuntimeMeshProxy(ERHIFeatureLevel::Type InFeatureLevel) + : FeatureLevel(InFeatureLevel) +{ +} + +FRuntimeMeshProxy::~FRuntimeMeshProxy() +{ + // The mesh proxy can only be safely destroyed from the rendering thread. + // This is so that all the resources can be safely freed correctly. + check(IsInRenderingThread()); +} + +void FRuntimeMeshProxy::CreateSection_GameThread(int32 SectionId, const FRuntimeMeshSectionCreationParamsPtr& SectionData) +{ + ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER( + FRuntimeMeshProxyCreateSection, + FRuntimeMeshProxy*, MeshProxy, this, + int32, SectionId, SectionId, + FRuntimeMeshSectionCreationParamsPtr, SectionData, SectionData, + { + MeshProxy->CreateSection_RenderThread(SectionId, SectionData); + } + ); +} + +void FRuntimeMeshProxy::CreateSection_RenderThread(int32 SectionId, const FRuntimeMeshSectionCreationParamsPtr& SectionData) +{ + check(IsInRenderingThread()); + check(SectionData.IsValid()); + + FRuntimeMeshSectionProxyPtr NewSection = MakeShareable(new FRuntimeMeshSectionProxy(FeatureLevel, SectionData), + FRuntimeMeshRenderThreadDeleter()); + + // Add the section to the map, destroying any one that existed + Sections.FindOrAdd(SectionId) = NewSection; + + // Update the cached values for rendering. + UpdateCachedValues(); +} + +void FRuntimeMeshProxy::UpdateSection_GameThread(int32 SectionId, const FRuntimeMeshSectionUpdateParamsPtr& SectionData) +{ + ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER( + FRuntimeMeshProxyUpdateSection, + FRuntimeMeshProxy*, MeshProxy, this, + int32, SectionId, SectionId, + FRuntimeMeshSectionUpdateParamsPtr, SectionData, SectionData, + { + MeshProxy->UpdateSection_RenderThread(SectionId, SectionData); + } + ); +} + +void FRuntimeMeshProxy::UpdateSection_RenderThread(int32 SectionId, const FRuntimeMeshSectionUpdateParamsPtr& SectionData) +{ + check(IsInRenderingThread()); + check(SectionData.IsValid()); + + if (Sections.Contains(SectionId)) + { + FRuntimeMeshSectionProxyPtr Section = Sections[SectionId]; + Section->FinishUpdate_RenderThread(SectionData); + + // Update the cached values for rendering. + UpdateCachedValues(); + } +} + +void FRuntimeMeshProxy::UpdateSectionProperties_GameThread(int32 SectionId, const FRuntimeMeshSectionPropertyUpdateParamsPtr& SectionData) +{ + ENQUEUE_UNIQUE_RENDER_COMMAND_THREEPARAMETER( + FRuntimeMeshProxyUpdateSectionProperties, + FRuntimeMeshProxy*, MeshProxy, this, + int32, SectionId, SectionId, + FRuntimeMeshSectionPropertyUpdateParamsPtr, SectionData, SectionData, + { + MeshProxy->UpdateSectionProperties_RenderThread(SectionId, SectionData); + } + ); +} + +void FRuntimeMeshProxy::UpdateSectionProperties_RenderThread(int32 SectionId, const FRuntimeMeshSectionPropertyUpdateParamsPtr& SectionData) +{ + check(IsInRenderingThread()); + check(SectionData.IsValid()); + + if (Sections.Contains(SectionId)) + { + FRuntimeMeshSectionProxyPtr Section = Sections[SectionId]; + Section->FinishPropertyUpdate_RenderThread(SectionData); + + // Update the cached values for rendering. + UpdateCachedValues(); + } +} + +void FRuntimeMeshProxy::DeleteSection_GameThread(int32 SectionId) +{ + ENQUEUE_UNIQUE_RENDER_COMMAND_TWOPARAMETER( + FRuntimeMeshProxyDeleteSection, + FRuntimeMeshProxy*, MeshProxy, this, + int32, SectionId, SectionId, + { + MeshProxy->DeleteSection_RenderThread(SectionId); + } + ); +} + +void FRuntimeMeshProxy::DeleteSection_RenderThread(int32 SectionId) +{ + check(IsInRenderingThread()); + + bool bChangedState = false; + if (SectionId == INDEX_NONE) + { + Sections.Empty(); + bChangedState = true; + } + else + { + // Remove the section if it exists + if (Sections.Remove(SectionId) > 0) + { + bChangedState = true; + } + } + + if (bChangedState) + { + // Update the cached values for rendering. + UpdateCachedValues(); + } +} + + +void FRuntimeMeshProxy::UpdateCachedValues() +{ + check(IsInRenderingThread()); +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.h new file mode 100755 index 0000000000..92f5f2c20e --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshProxy.h @@ -0,0 +1,83 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshSectionProxy.h" +#include "RuntimeMeshUpdateCommands.h" + + +template +struct FRuntimeMeshRenderThreadDeleter +{ + void operator()(Type* Object) const + { + // This is a custom deleter to make sure the runtime mesh proxy is only ever deleted on the rendering thread. + if (IsInRenderingThread()) + { + delete Object; + } + else + { + ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER( + FRuntimeMeshProxyDeleterCommand, + void*, Object, Object, + { + delete static_cast(Object); + } + ); + } + } +}; + +/** + * + */ +class FRuntimeMeshProxy +{ + ERHIFeatureLevel::Type FeatureLevel; + + TMap Sections; + +public: + FRuntimeMeshProxy(ERHIFeatureLevel::Type InFeatureLevel); + ~FRuntimeMeshProxy(); + + ERHIFeatureLevel::Type GetFeatureLevel() const { return FeatureLevel; } + + + void CreateSection_GameThread(int32 SectionId, const FRuntimeMeshSectionCreationParamsPtr& SectionData); + void CreateSection_RenderThread(int32 SectionId, const FRuntimeMeshSectionCreationParamsPtr& SectionData); + void UpdateSection_GameThread(int32 SectionId, const FRuntimeMeshSectionUpdateParamsPtr& SectionData); + void UpdateSection_RenderThread(int32 SectionId, const FRuntimeMeshSectionUpdateParamsPtr& SectionData); + void UpdateSectionProperties_GameThread(int32 SectionId, const FRuntimeMeshSectionPropertyUpdateParamsPtr& SectionData); + void UpdateSectionProperties_RenderThread(int32 SectionId, const FRuntimeMeshSectionPropertyUpdateParamsPtr& SectionData); + void DeleteSection_GameThread(int32 SectionId); + void DeleteSection_RenderThread(int32 SectionId); + + + + TMap& GetSections() { return Sections; } + + void CalculateViewRelevance(bool& bHasStaticSections, bool& bHasDynamicSections, bool& bHasShadowableSections) + { + check(IsInRenderingThread()); + bHasStaticSections = false; + bHasDynamicSections = false; + bHasShadowableSections = false; + for (const auto& SectionEntry : Sections) + { + if (SectionEntry.Value.IsValid()) + { + bool bWantsStaticPath = SectionEntry.Value->WantsToRenderInStaticPath(); + bHasStaticSections |= bWantsStaticPath; + bHasDynamicSections |= !bWantsStaticPath; + bHasShadowableSections = SectionEntry.Value->CastsShadow(); + } + } + } +private: + void UpdateCachedValues(); + +}; + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.cpp new file mode 100755 index 0000000000..dd5bd23232 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.cpp @@ -0,0 +1,177 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshRendering.h" +#include "RuntimeMeshComponentPlugin.h" +#include "RuntimeMeshSectionProxy.h" + + +FRuntimeMeshVertexBuffer::FRuntimeMeshVertexBuffer(EUpdateFrequency InUpdateFrequency, int32 InVertexSize) + : UsageFlags(InUpdateFrequency == EUpdateFrequency::Frequent? BUF_Dynamic : BUF_Static) + , VertexSize(InVertexSize) + , NumVertices(0) + , ShaderResourceView(nullptr) +{ +} + +void FRuntimeMeshVertexBuffer::Reset(int32 InNumVertices) +{ + NumVertices = InNumVertices; + ReleaseResource(); + InitResource(); +} + +void FRuntimeMeshVertexBuffer::InitRHI() +{ + if (VertexSize > 0 && NumVertices > 0) + { + // Create the vertex buffer + FRHIResourceCreateInfo CreateInfo; + VertexBufferRHI = RHICreateVertexBuffer(GetBufferSize(), UsageFlags | BUF_ShaderResource, CreateInfo); + + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + if (RHISupportsManualVertexFetch(GMaxRHIShaderPlatform)) + { + CreateSRV(); + } +#endif + } +} + +/* Set the size of the vertex buffer */ +void FRuntimeMeshVertexBuffer::SetNum(int32 NewVertexCount) +{ + // Make sure we're not already the right size + if (NewVertexCount != NumVertices) + { + NumVertices = NewVertexCount; + + // Rebuild resource + ReleaseResource(); + InitResource(); + } +} + +/* Set the data for the vertex buffer */ +void FRuntimeMeshVertexBuffer::SetData(const TArray& Data) +{ + check(Data.Num() == GetBufferSize()); + + if (GetBufferSize() > 0) + { + check(VertexBufferRHI.IsValid()); + + // Lock the vertex buffer + void* Buffer = RHILockVertexBuffer(VertexBufferRHI, 0, Data.Num(), RLM_WriteOnly); + + // Write the vertices to the vertex buffer + FMemory::Memcpy(Buffer, Data.GetData(), Data.Num()); + + // Unlock the vertex buffer + RHIUnlockVertexBuffer(VertexBufferRHI); + } +} + + +FRuntimeMeshIndexBuffer::FRuntimeMeshIndexBuffer() + : NumIndices(0), IndexSize(-1), UsageFlags(EBufferUsageFlags::BUF_None) +{ +} + +void FRuntimeMeshIndexBuffer::Reset(int32 InIndexSize, int32 InNumIndices, EUpdateFrequency InUpdateFrequency) +{ + IndexSize = InIndexSize; + NumIndices = InNumIndices; + UsageFlags = InUpdateFrequency == EUpdateFrequency::Frequent ? BUF_Dynamic : BUF_Static; + ReleaseResource(); + InitResource(); +} + +void FRuntimeMeshIndexBuffer::InitRHI() +{ + if (IndexSize > 0 && NumIndices > 0) + { + // Create the index buffer + FRHIResourceCreateInfo CreateInfo; + IndexBufferRHI = RHICreateIndexBuffer(IndexSize, GetBufferSize(), BUF_Dynamic, CreateInfo); + } +} + +/* Set the size of the index buffer */ +void FRuntimeMeshIndexBuffer::SetNum(int32 NewIndexCount) +{ + // Make sure we're not already the right size + if (NewIndexCount != NumIndices) + { + NumIndices = NewIndexCount; + + // Rebuild resource + ReleaseResource(); + InitResource(); + } +} + +/* Set the data for the index buffer */ +void FRuntimeMeshIndexBuffer::SetData(const TArray& Data) +{ + check(Data.Num() == GetBufferSize()); + + if (GetBufferSize() > 0) + { + check(IndexBufferRHI.IsValid()); + + // Lock the index buffer + void* Buffer = RHILockIndexBuffer(IndexBufferRHI, 0, Data.Num(), RLM_WriteOnly); + + // Write the indices to the vertex buffer + FMemory::Memcpy(Buffer, Data.GetData(), Data.Num()); + + // Unlock the index buffer + RHIUnlockIndexBuffer(IndexBufferRHI); + } +} + + + + +FRuntimeMeshVertexFactory::FRuntimeMeshVertexFactory(ERHIFeatureLevel::Type InFeatureLevel, FRuntimeMeshSectionProxy* InSectionParent) + : FLocalVertexFactory( +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + InFeatureLevel, "FRuntimeMeshVertexFactory" +#endif + ) + , SectionParent(InSectionParent) +{ +} + +/** Init function that can be called on any thread, and will do the right thing (enqueue command if called on main thread) */ +void FRuntimeMeshVertexFactory::Init(FLocalVertexFactory::FDataType VertexStructure) +{ + if (IsInRenderingThread()) + { + SetData(VertexStructure); + } + else + { + // Send the command to the render thread + ENQUEUE_UNIQUE_RENDER_COMMAND_TWOPARAMETER( + InitRuntimeMeshVertexFactory, + FRuntimeMeshVertexFactory*, VertexFactory, this, + FLocalVertexFactory::FDataType, VertexStructure, VertexStructure, + { + VertexFactory->Init(VertexStructure); + }); + } +} + +/* Gets the section visibility for static sections */ + + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 +uint64 FRuntimeMeshVertexFactory::GetStaticBatchElementVisibility(const class FSceneView& View, const struct FMeshBatch* Batch, const void* InViewCustomData) const +#else +uint64 FRuntimeMeshVertexFactory::GetStaticBatchElementVisibility(const class FSceneView& View, const struct FMeshBatch* Batch) const +#endif +{ + return SectionParent->ShouldRender(); +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.h new file mode 100755 index 0000000000..cb104f4958 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshRendering.h @@ -0,0 +1,306 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshGenericVertex.h" + +class FRuntimeMeshSectionProxy; +using FRuntimeMeshSectionProxyPtr = TSharedPtr; +using FRuntimeMeshSectionProxyWeakPtr = TWeakPtr; + + +/** Single vertex buffer to hold one vertex stream within a section */ +class FRuntimeMeshVertexBuffer : public FVertexBuffer +{ +protected: + /** The buffer configuration to use */ + const EBufferUsageFlags UsageFlags; + + /** Size of a single vertex */ + const int32 VertexSize; + + /** The number of vertices this buffer is currently allocated to hold */ + int32 NumVertices; + + /** Shader Resource View for this buffer */ + FShaderResourceViewRHIRef ShaderResourceView; + +public: + + FRuntimeMeshVertexBuffer(EUpdateFrequency InUpdateFrequency, int32 InVertexSize); + + ~FRuntimeMeshVertexBuffer() {} + + void Reset(int32 InNumVertices); + + virtual void InitRHI() override; + + /** Get the size of the vertex buffer */ + int32 Num() { return NumVertices; } + + /** Gets the full allocated size of the buffer (Equal to VertexSize * NumVertices) */ + int32 GetBufferSize() const { return NumVertices * VertexSize; } + + /* Set the size of the vertex buffer */ + void SetNum(int32 NewVertexCount); + + /* Set the data for the vertex buffer */ + void SetData(const TArray& Data); + + virtual void Bind(FLocalVertexFactory::FDataType& DataType) = 0; + +protected: +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual void CreateSRV() = 0; +#endif +}; + + +class FRuntimeMeshPositionVertexBuffer : public FRuntimeMeshVertexBuffer +{ +public: + FRuntimeMeshPositionVertexBuffer(EUpdateFrequency InUpdateFrequency) + : FRuntimeMeshVertexBuffer(InUpdateFrequency, sizeof(FVector)) + { + + } + + virtual void Bind(FLocalVertexFactory::FDataType& DataType) override + { + DataType.PositionComponent = FVertexStreamComponent(this, 0, 12, VET_Float3); +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.PositionComponentSRV = ShaderResourceView; +#endif + } + +protected: +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual void CreateSRV() override + { + ShaderResourceView = RHICreateShaderResourceView(VertexBufferRHI, 4, PF_R32_FLOAT); + } +#endif +}; + +class FRuntimeMeshTangentsVertexBuffer : public FRuntimeMeshVertexBuffer +{ + /** Whether this tangent buffer is using high precision tangents */ + bool bUseHighPrecision; + +public: + FRuntimeMeshTangentsVertexBuffer(EUpdateFrequency InUpdateFrequency, bool bInUseHighPrecision) + : FRuntimeMeshVertexBuffer(InUpdateFrequency, (bInUseHighPrecision ? sizeof(FPackedRGBA16N) : sizeof(FPackedNormal)) * 2) + , bUseHighPrecision(bInUseHighPrecision) + { + + } + + virtual void Bind(FLocalVertexFactory::FDataType& DataType) override + { + uint32 TangentSizeInBytes = 0; + uint32 TangentXOffset = 0; + uint32 TangentZOffset = 0; + EVertexElementType TangentElementType = VET_None; + + if (bUseHighPrecision) + { + TangentElementType = VET_UShort4N; + TangentSizeInBytes = sizeof(FRuntimeMeshTangentsHighPrecision); + TangentXOffset = offsetof(FRuntimeMeshTangentsHighPrecision, Tangent); + TangentZOffset = offsetof(FRuntimeMeshTangentsHighPrecision, Normal); + } + else + { + TangentElementType = VET_PackedNormal; + TangentSizeInBytes = sizeof(FRuntimeMeshTangents); + TangentXOffset = offsetof(FRuntimeMeshTangents, Tangent); + TangentZOffset = offsetof(FRuntimeMeshTangents, Normal); + } + +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.TangentBasisComponents[1] = FVertexStreamComponent(this, TangentXOffset, TangentSizeInBytes, TangentElementType, EVertexStreamUsage::ManualFetch); + DataType.TangentBasisComponents[0] = FVertexStreamComponent(this, TangentZOffset, TangentSizeInBytes, TangentElementType, EVertexStreamUsage::ManualFetch); + DataType.TangentsSRV = ShaderResourceView; +#else + DataType.TangentBasisComponents[1] = FVertexStreamComponent(this, TangentXOffset, TangentSizeInBytes, TangentElementType); + DataType.TangentBasisComponents[0] = FVertexStreamComponent(this, TangentZOffset, TangentSizeInBytes, TangentElementType); +#endif + } + +protected: +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual void CreateSRV() override + { + ShaderResourceView = RHICreateShaderResourceView(VertexBufferRHI, bUseHighPrecision? 8 : 4, bUseHighPrecision? PF_A16B16G16R16 : PF_R8G8B8A8); + } +#endif +}; + +class FRuntimeMeshUVsVertexBuffer : public FRuntimeMeshVertexBuffer +{ + /** Whether this uv buffer is using high precision uvs */ + bool bUseHighPrecision; + + /** Num UV's in use */ + int32 NumUVs; + +public: + FRuntimeMeshUVsVertexBuffer(EUpdateFrequency InUpdateFrequency, bool bInUseHighPrecision, int32 InNumUVs) + : FRuntimeMeshVertexBuffer(InUpdateFrequency, (bInUseHighPrecision ? sizeof(FVector2D) : sizeof(FVector2DHalf)) * InNumUVs) + , bUseHighPrecision(bInUseHighPrecision), NumUVs(InNumUVs) + { + + } + + virtual void Bind(FLocalVertexFactory::FDataType& DataType) override + { + DataType.TextureCoordinates.Empty(); + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + DataType.NumTexCoords = NumUVs; +#endif + + + EVertexElementType UVDoubleWideVertexElementType = VET_None; + EVertexElementType UVVertexElementType = VET_None; + uint32 UVSizeInBytes = 0; + if (bUseHighPrecision) + { + UVSizeInBytes = sizeof(FVector2D); + UVDoubleWideVertexElementType = VET_Float4; + UVVertexElementType = VET_Float2; + } + else + { + UVSizeInBytes = sizeof(FVector2DHalf); + UVDoubleWideVertexElementType = VET_Half4; + UVVertexElementType = VET_Half2; + } + + uint32 UVStride = UVSizeInBytes * NumUVs; + + int32 UVIndex; + for (UVIndex = 0; UVIndex < NumUVs - 1; UVIndex += 2) + { +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.TextureCoordinates.Add(FVertexStreamComponent(this, UVSizeInBytes * UVIndex, UVStride, UVDoubleWideVertexElementType, EVertexStreamUsage::ManualFetch)); +#else + DataType.TextureCoordinates.Add(FVertexStreamComponent(this, UVSizeInBytes * UVIndex, UVStride, UVDoubleWideVertexElementType)); +#endif + } + + // possible last UV channel if we have an odd number + if (UVIndex < NumUVs) + { +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.TextureCoordinates.Add(FVertexStreamComponent(this, UVSizeInBytes * UVIndex, UVStride, UVDoubleWideVertexElementType, EVertexStreamUsage::ManualFetch)); +#else + DataType.TextureCoordinates.Add(FVertexStreamComponent(this, UVSizeInBytes * UVIndex, UVStride, UVDoubleWideVertexElementType)); +#endif + } + +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.TextureCoordinatesSRV = ShaderResourceView; +#endif + } + +protected: +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual void CreateSRV() override + { + ShaderResourceView = RHICreateShaderResourceView(VertexBufferRHI, bUseHighPrecision ? 8 : 4, bUseHighPrecision ? PF_G32R32F : PF_G16R16F); + } +#endif +}; + +class FRuntimeMeshColorVertexBuffer : public FRuntimeMeshVertexBuffer +{ +public: + FRuntimeMeshColorVertexBuffer(EUpdateFrequency InUpdateFrequency) + : FRuntimeMeshVertexBuffer(InUpdateFrequency, sizeof(FColor)) + { + + } + + virtual void Bind(FLocalVertexFactory::FDataType& DataType) override + { +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 19 + DataType.ColorComponent = FVertexStreamComponent(this, 0, 4, EVertexElementType::VET_Color, EVertexStreamUsage::ManualFetch); + DataType.ColorComponentsSRV = ShaderResourceView; +#else + DataType.ColorComponent = FVertexStreamComponent(this, 0, 4, EVertexElementType::VET_Color); +#endif + } + +protected: +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual void CreateSRV() override + { + ShaderResourceView = RHICreateShaderResourceView(VertexBufferRHI, 4, PF_R8G8B8A8); + } +#endif +}; + + + + + +/** Index Buffer */ +class FRuntimeMeshIndexBuffer : public FIndexBuffer +{ +private: + /* The number of indices this buffer is currently allocated to hold */ + int32 NumIndices; + + /* The size of a single index*/ + int32 IndexSize; + + /* The buffer configuration to use */ + EBufferUsageFlags UsageFlags; + +public: + + FRuntimeMeshIndexBuffer(); + + ~FRuntimeMeshIndexBuffer() {} + + void Reset(int32 InIndexSize, int32 InNumIndices, EUpdateFrequency InUpdateFrequency); + + virtual void InitRHI() override; + + /* Get the size of the index buffer */ + int32 Num() { return NumIndices; } + + /** Gets the full allocated size of the buffer (Equal to IndexSize * NumIndices) */ + int32 GetBufferSize() const { return NumIndices * IndexSize; } + + /* Set the size of the index buffer */ + void SetNum(int32 NewIndexCount); + + /* Set the data for the index buffer */ + void SetData(const TArray& Data); +}; + +/** Vertex Factory */ +class FRuntimeMeshVertexFactory : public FLocalVertexFactory +{ +public: + + FRuntimeMeshVertexFactory(ERHIFeatureLevel::Type InFeatureLevel, FRuntimeMeshSectionProxy* InSectionParent); + + /** Init function that can be called on any thread, and will do the right thing (enqueue command if called on main thread) */ + void Init(FLocalVertexFactory::FDataType VertexStructure); + + /* Gets the section visibility for static sections */ +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + virtual uint64 GetStaticBatchElementVisibility(const class FSceneView& View, const struct FMeshBatch* Batch, const void* InViewCustomData = nullptr) const override; +#else + virtual uint64 GetStaticBatchElementVisibility(const class FSceneView& View, const struct FMeshBatch* Batch) const override; +#endif + +private: + /* Interface to the parent section for checking visibility.*/ + FRuntimeMeshSectionProxy * SectionParent; +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSection.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSection.cpp new file mode 100755 index 0000000000..d208fc34e5 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSection.cpp @@ -0,0 +1,304 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshSection.h" +#include "RuntimeMeshComponentPlugin.h" +#include "PhysicsEngine/PhysicsSettings.h" +#include "RuntimeMeshUpdateCommands.h" + +template +struct FRuntimeMeshStreamAccessor +{ + const TArray* Data; + int32 Offset; + int32 Stride; +public: + FRuntimeMeshStreamAccessor(const TArray* InData, int32 InOffset, int32 InStride) + : Data(InData), Offset(InOffset), Stride(InStride) + { + } + virtual ~FRuntimeMeshStreamAccessor() { } + + int32 Num() const { return Data->Num() / Stride; } + + Type& Get(int32 Index) + { + int32 StartPosition = (Index * Stride + Offset); + return *((Type*)(&(*Data)[StartPosition])); + } +}; + +// Helper for accessing position element within a vertex stream +struct FRuntimeMeshVertexStreamPositionAccessor : public FRuntimeMeshStreamAccessor +{ +public: + FRuntimeMeshVertexStreamPositionAccessor(TArray* InData, const FRuntimeMeshVertexStreamStructure& StreamStructure) + : FRuntimeMeshStreamAccessor(InData, StreamStructure.Position.Offset, StreamStructure.Position.Stride) + { + check(StreamStructure.Position.IsValid()); + } +}; + +struct FRuntimeMeshVertexStreamUVAccessor +{ + virtual ~FRuntimeMeshVertexStreamUVAccessor() { } + + virtual FVector2D GetUV(int32 Index) = 0; + virtual int32 Num() = 0; +}; + +// Helper for accessing position element within a vertex stream +struct FRuntimeMeshVertexStreamUVFullPrecisionAccessor : public FRuntimeMeshStreamAccessor, public FRuntimeMeshVertexStreamUVAccessor +{ +public: + FRuntimeMeshVertexStreamUVFullPrecisionAccessor(TArray* InData, const FRuntimeMeshVertexStreamStructureElement& Element) + : FRuntimeMeshStreamAccessor(InData, Element.Offset, Element.Stride) + { + check(Element.IsValid()); + } + + virtual FVector2D GetUV(int32 Index) override + { + return Get(Index); + } + + virtual int32 Num() override + { + return FRuntimeMeshStreamAccessor::Num(); + } +}; +struct FRuntimeMeshVertexStreamUVHalfPrecisionAccessor : public FRuntimeMeshStreamAccessor, public FRuntimeMeshVertexStreamUVAccessor +{ +public: + FRuntimeMeshVertexStreamUVHalfPrecisionAccessor(TArray* InData, const FRuntimeMeshVertexStreamStructureElement& Element) + : FRuntimeMeshStreamAccessor(InData, Element.Offset, Element.Stride) + { + check(Element.IsValid()); + } + + virtual FVector2D GetUV(int32 Index) override + { + return Get(Index); + } + + virtual int32 Num() override + { + return FRuntimeMeshStreamAccessor::Num(); + } +}; + + +void FRuntimeMeshSection::FSectionVertexBuffer::FillUpdateParams(FRuntimeMeshSectionVertexBufferParams& Params) +{ + Params.Data = Data; + Params.NumVertices = GetNumVertices(); +} + +void FRuntimeMeshSection::FSectionIndexBuffer::FillUpdateParams(FRuntimeMeshSectionIndexBufferParams& Params) +{ + Params.b32BitIndices = b32BitIndices; + Params.Data = Data; + Params.NumIndices = GetNumIndices(); +} + +FRuntimeMeshSection::FRuntimeMeshSection(bool bInUseHighPrecisionTangents, bool bInUseHighPrecisionUVs, int32 InNumUVs, bool b32BitIndices, EUpdateFrequency InUpdateFrequency/*, FRuntimeMeshLockProvider* InSyncRoot*/) + : UpdateFrequency(InUpdateFrequency) + , TangentsBuffer(bInUseHighPrecisionTangents) + , UVsBuffer(bInUseHighPrecisionUVs, InNumUVs) + , IndexBuffer(b32BitIndices) + , AdjacencyIndexBuffer(b32BitIndices) + , LocalBoundingBox(EForceInit::ForceInitToZero) + , bCollisionEnabled(false) + , bIsVisible(true) + , bCastsShadow(true) +// , SyncRoot(InSyncRoot) +{ + + +} + +FRuntimeMeshSection::FRuntimeMeshSection(FArchive& Ar) + : UpdateFrequency(EUpdateFrequency::Average) + , TangentsBuffer(false) + , UVsBuffer(false, 1) + , IndexBuffer(false) + , AdjacencyIndexBuffer(false) + , LocalBoundingBox(EForceInit::ForceInitToZero) + , bCollisionEnabled(false) + , bIsVisible(true) + , bCastsShadow(true) +{ + Ar << *this; +} + +FRuntimeMeshSectionCreationParamsPtr FRuntimeMeshSection::GetSectionCreationParams() +{ + FRuntimeMeshSectionCreationParamsPtr CreationParams = MakeShared(); + + CreationParams->UpdateFrequency = UpdateFrequency; + + PositionBuffer.FillUpdateParams(CreationParams->PositionVertexBuffer); + TangentsBuffer.FillUpdateParams(CreationParams->TangentsVertexBuffer); + UVsBuffer.FillUpdateParams(CreationParams->UVsVertexBuffer); + ColorBuffer.FillUpdateParams(CreationParams->ColorVertexBuffer); + + IndexBuffer.FillUpdateParams(CreationParams->IndexBuffer); + AdjacencyIndexBuffer.FillUpdateParams(CreationParams->AdjacencyIndexBuffer); + + CreationParams->bIsVisible = bIsVisible; + CreationParams->bCastsShadow = bCastsShadow; + + return CreationParams; +} + +FRuntimeMeshSectionUpdateParamsPtr FRuntimeMeshSection::GetSectionUpdateData(ERuntimeMeshBuffersToUpdate BuffersToUpdate) +{ + FRuntimeMeshSectionUpdateParamsPtr UpdateParams = MakeShared(); + + UpdateParams->BuffersToUpdate = BuffersToUpdate; + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::PositionBuffer)) + { + PositionBuffer.FillUpdateParams(UpdateParams->PositionVertexBuffer); + } + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::TangentBuffer)) + { + TangentsBuffer.FillUpdateParams(UpdateParams->TangentsVertexBuffer); + } + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::UVBuffer)) + { + UVsBuffer.FillUpdateParams(UpdateParams->UVsVertexBuffer); + } + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::ColorBuffer)) + { + ColorBuffer.FillUpdateParams(UpdateParams->ColorVertexBuffer); + } + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::IndexBuffer)) + { + IndexBuffer.FillUpdateParams(UpdateParams->IndexBuffer); + } + + if (!!(BuffersToUpdate & ERuntimeMeshBuffersToUpdate::AdjacencyIndexBuffer)) + { + AdjacencyIndexBuffer.FillUpdateParams(UpdateParams->AdjacencyIndexBuffer); + } + + return UpdateParams; +} + +TSharedPtr FRuntimeMeshSection::GetSectionPropertyUpdateData() +{ + FRuntimeMeshSectionPropertyUpdateParamsPtr UpdateParams = MakeShared(); + + UpdateParams->bCastsShadow = bCastsShadow; + UpdateParams->bIsVisible = bIsVisible; + + return UpdateParams; +} + +void FRuntimeMeshSection::UpdateBoundingBox() +{ + FBox NewBoundingBox(reinterpret_cast(PositionBuffer.GetData().GetData()), PositionBuffer.GetNumVertices()); + + LocalBoundingBox = NewBoundingBox; +} + +int32 FRuntimeMeshSection::GetCollisionData(TArray& OutPositions, TArray& OutIndices, TArray& OutUVs) +{ + int32 StartVertexPosition = OutPositions.Num(); + OutPositions.Append(reinterpret_cast(PositionBuffer.GetData().GetData()), PositionBuffer.GetNumVertices()); + + bool bCopyUVs = UPhysicsSettings::Get()->bSupportUVFromHitResults; + + //if (bCopyUVs) + //{ + // TUniquePtr StreamAccessor = nullptr; + + // const auto SetupStreamAccessor = [](TArray* Data, const FRuntimeMeshVertexStreamStructureElement& Element) -> TUniquePtr + // { + // if (Element.Type == VET_Float2 || Element.Type == VET_Float4) + // { + // return MakeUnique(Data, Element); + // } + // else + // { + // check(Element.Type == VET_Half2 || Element.Type == VET_Half4); + // return MakeUnique(Data, Element); + // } + // }; + + // if (VertexBuffer0.GetStructure().HasUVs()) + // { + // StreamAccessor = SetupStreamAccessor(&VertexBuffer0.GetData(), VertexBuffer0.GetStructure().UVs[0]); + // } + // else if (VertexBuffer1.GetStructure().HasUVs()) + // { + // StreamAccessor = SetupStreamAccessor(&VertexBuffer1.GetData(), VertexBuffer1.GetStructure().UVs[0]); + // } + // else if (VertexBuffer2.GetStructure().HasUVs()) + // { + // StreamAccessor = SetupStreamAccessor(&VertexBuffer2.GetData(), VertexBuffer2.GetStructure().UVs[0]); + // } + // else + // { + // // Add blank entries since we can't get UV's for this section + // OutUVs.AddZeroed(PositionAccessor.Num()); + // } + + // if (StreamAccessor.IsValid()) + // { + // OutUVs.Reserve(OutUVs.Num() + StreamAccessor->Num()); + // for (int32 Index = 0; Index < StreamAccessor->Num(); Index++) + // { + // OutUVs.Add(StreamAccessor->GetUV(Index)); + // } + // } + //} + + TArray& IndexData = IndexBuffer.GetData(); + + if (IndexBuffer.Is32BitIndices()) + { + int32 NumIndices = IndexBuffer.GetNumIndices(); + for (int32 Index = 0; Index < NumIndices; Index += 3) + { + // Add the triangle + FTriIndices& Triangle = *new (OutIndices) FTriIndices; + Triangle.v0 = (*((int32*)&IndexData[(Index + 0) * 4])) + StartVertexPosition; + Triangle.v1 = (*((int32*)&IndexData[(Index + 1) * 4])) + StartVertexPosition; + Triangle.v2 = (*((int32*)&IndexData[(Index + 2) * 4])) + StartVertexPosition; + } + } + else + { + int32 NumIndices = IndexBuffer.GetNumIndices(); + for (int32 Index = 0; Index < NumIndices; Index += 3) + { + // Add the triangle + FTriIndices& Triangle = *new (OutIndices) FTriIndices; + Triangle.v0 = (*((uint16*)&IndexData[(Index + 0) * 2])) + StartVertexPosition; + Triangle.v1 = (*((uint16*)&IndexData[(Index + 1) * 2])) + StartVertexPosition; + Triangle.v2 = (*((uint16*)&IndexData[(Index + 2) * 2])) + StartVertexPosition; + } + } + + + return IndexBuffer.GetNumIndices() / 3; +} + + +void FRuntimeMeshSection::FSectionTangentsVertexBuffer::FillUpdateParams(FRuntimeMeshSectionTangentVertexBufferParams& Params) +{ + Params.bUsingHighPrecision = bUseHighPrecision; + FSectionVertexBuffer::FillUpdateParams(Params); +} + +void FRuntimeMeshSection::FSectionUVsVertexBuffer::FillUpdateParams(FRuntimeMeshSectionUVVertexBufferParams& Params) +{ + Params.bUsingHighPrecision = bUseHighPrecision; + Params.NumUVs = UVCount; + FSectionVertexBuffer::FillUpdateParams(Params); +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.cpp new file mode 100755 index 0000000000..59d1e4c62a --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.cpp @@ -0,0 +1,186 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshSectionProxy.h" +#include "RuntimeMeshComponentPlugin.h" + + + + +FRuntimeMeshSectionProxy::FRuntimeMeshSectionProxy(ERHIFeatureLevel::Type InFeatureLevel, FRuntimeMeshSectionCreationParamsPtr CreationData) + : UpdateFrequency(CreationData->UpdateFrequency) + , VertexFactory(InFeatureLevel, this) + , PositionBuffer(CreationData->UpdateFrequency) + , TangentsBuffer(CreationData->UpdateFrequency, CreationData->TangentsVertexBuffer.bUsingHighPrecision) + , UVsBuffer(CreationData->UpdateFrequency, CreationData->UVsVertexBuffer.bUsingHighPrecision, CreationData->UVsVertexBuffer.NumUVs) + , ColorBuffer(CreationData->UpdateFrequency) + , bIsVisible(CreationData->bIsVisible) + , bCastsShadow(CreationData->bCastsShadow) +{ + check(IsInRenderingThread()); + + PositionBuffer.Reset(CreationData->PositionVertexBuffer.NumVertices); + PositionBuffer.SetData(CreationData->PositionVertexBuffer.Data); + + TangentsBuffer.Reset(CreationData->TangentsVertexBuffer.NumVertices); + TangentsBuffer.SetData(CreationData->TangentsVertexBuffer.Data); + + UVsBuffer.Reset(CreationData->UVsVertexBuffer.NumVertices); + UVsBuffer.SetData(CreationData->UVsVertexBuffer.Data); + + ColorBuffer.Reset(CreationData->ColorVertexBuffer.NumVertices); + ColorBuffer.SetData(CreationData->ColorVertexBuffer.Data); + + + IndexBuffer.Reset(CreationData->IndexBuffer.b32BitIndices ? 4 : 2, CreationData->IndexBuffer.NumIndices, UpdateFrequency); + IndexBuffer.SetData(CreationData->IndexBuffer.Data); + + AdjacencyIndexBuffer.Reset(CreationData->IndexBuffer.b32BitIndices ? 4 : 2, CreationData->AdjacencyIndexBuffer.NumIndices, UpdateFrequency); + AdjacencyIndexBuffer.SetData(CreationData->AdjacencyIndexBuffer.Data); + + + + + FLocalVertexFactory::FDataType DataType; + BuildVertexDataType(DataType); + + VertexFactory.Init(DataType); + VertexFactory.InitResource(); +} + +FRuntimeMeshSectionProxy::~FRuntimeMeshSectionProxy() +{ + check(IsInRenderingThread()); + + PositionBuffer.ReleaseResource(); + TangentsBuffer.ReleaseResource(); + UVsBuffer.ReleaseResource(); + ColorBuffer.ReleaseResource(); + IndexBuffer.ReleaseResource(); + AdjacencyIndexBuffer.ReleaseResource(); + VertexFactory.ReleaseResource(); +} + +bool FRuntimeMeshSectionProxy::ShouldRender() +{ + if (!bIsVisible) + return false; + + if (IndexBuffer.Num() <= 0) + return false; + + if (PositionBuffer.Num() <= 0) + return false; + + return true; +} + +bool FRuntimeMeshSectionProxy::WantsToRenderInStaticPath() const +{ + return UpdateFrequency == EUpdateFrequency::Infrequent; +} + +bool FRuntimeMeshSectionProxy::CastsShadow() const +{ + return bCastsShadow; +} + + +void FRuntimeMeshSectionProxy::CreateMeshBatch(FMeshBatch& MeshBatch, bool bWantsAdjacencyInfo) +{ + MeshBatch.VertexFactory = &VertexFactory; + + MeshBatch.Type = bWantsAdjacencyInfo ? PT_12_ControlPointPatchList : PT_TriangleList; + + MeshBatch.DepthPriorityGroup = SDPG_World; + MeshBatch.CastShadow = bCastsShadow; + + // Make sure that if the material wants adjacency information, that you supply it + check(!bWantsAdjacencyInfo || AdjacencyIndexBuffer.Num() > 0); + + FRuntimeMeshIndexBuffer* CurrentIndexBuffer = bWantsAdjacencyInfo ? &AdjacencyIndexBuffer : &IndexBuffer; + + int32 NumIndicesPerTriangle = bWantsAdjacencyInfo ? 12 : 3; + int32 NumPrimitives = CurrentIndexBuffer->Num() / NumIndicesPerTriangle; + + FMeshBatchElement& BatchElement = MeshBatch.Elements[0]; + BatchElement.IndexBuffer = CurrentIndexBuffer; + BatchElement.FirstIndex = 0; + BatchElement.NumPrimitives = NumPrimitives; + BatchElement.MinVertexIndex = 0; + BatchElement.MaxVertexIndex = PositionBuffer.Num() - 1; +} + +void FRuntimeMeshSectionProxy::BuildVertexDataType(FLocalVertexFactory::FDataType& DataType) +{ + PositionBuffer.Bind(DataType); + TangentsBuffer.Bind(DataType); + UVsBuffer.Bind(DataType); + ColorBuffer.Bind(DataType); +} + +void FRuntimeMeshSectionProxy::FinishUpdate_RenderThread(FRuntimeMeshSectionUpdateParamsPtr UpdateData) +{ + check(IsInRenderingThread()); + + // Update position buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::PositionBuffer)) + { + PositionBuffer.Reset(UpdateData->PositionVertexBuffer.NumVertices); + PositionBuffer.SetData(UpdateData->PositionVertexBuffer.Data); + } + + // Update tangent buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::TangentBuffer)) + { + TangentsBuffer.SetNum(UpdateData->TangentsVertexBuffer.NumVertices); + TangentsBuffer.SetData(UpdateData->TangentsVertexBuffer.Data); + } + + // Update uv buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::UVBuffer)) + { + UVsBuffer.SetNum(UpdateData->UVsVertexBuffer.NumVertices); + UVsBuffer.SetData(UpdateData->UVsVertexBuffer.Data); + } + + // Update color buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::ColorBuffer)) + { + ColorBuffer.SetNum(UpdateData->ColorVertexBuffer.NumVertices); + ColorBuffer.SetData(UpdateData->ColorVertexBuffer.Data); + } + + // Update index buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::IndexBuffer)) + { + IndexBuffer.SetNum(UpdateData->IndexBuffer.NumIndices); + IndexBuffer.SetData(UpdateData->IndexBuffer.Data); + } + + // Update index buffer + if (!!(UpdateData->BuffersToUpdate & ERuntimeMeshBuffersToUpdate::AdjacencyIndexBuffer)) + { + AdjacencyIndexBuffer.SetNum(UpdateData->AdjacencyIndexBuffer.NumIndices); + AdjacencyIndexBuffer.SetData(UpdateData->AdjacencyIndexBuffer.Data); + } + +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 19 + // If this platform uses manual vertex fetch, we need to update the SRVs + if (RHISupportsManualVertexFetch(GMaxRHIShaderPlatform)) + { + FLocalVertexFactory::FDataType DataType; + BuildVertexDataType(DataType); + + VertexFactory.Init(DataType); + VertexFactory.ReleaseResource(); + VertexFactory.InitResource(); + } +#endif +} + +void FRuntimeMeshSectionProxy::FinishPropertyUpdate_RenderThread(FRuntimeMeshSectionPropertyUpdateParamsPtr UpdateData) +{ + // Copy visibility/shadow + bIsVisible = UpdateData->bIsVisible; + bCastsShadow = UpdateData->bCastsShadow; +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.h new file mode 100755 index 0000000000..6f1f396704 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSectionProxy.h @@ -0,0 +1,81 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "Components/MeshComponent.h" +#include "RuntimeMeshRendering.h" +#include "RuntimeMeshUpdateCommands.h" + + +struct FRuntimeMeshSectionNullBufferElement +{ + FPackedNormal Normal; + FPackedNormal Tangent; + FColor Color; + FVector2DHalf UV0; + + FRuntimeMeshSectionNullBufferElement() + : Normal(FVector(0.0f, 0.0f, 1.0f)) + , Tangent(FVector(1.0f, 0.0f, 0.0f)) + , Color(FColor::Transparent) + , UV0(FVector2D::ZeroVector) + { } +}; + + +class FRuntimeMeshSectionProxy : public TSharedFromThis +{ + /** Update frequency of this section */ + EUpdateFrequency UpdateFrequency; + + /** Vertex factory for this section */ + FRuntimeMeshVertexFactory VertexFactory; + + /** Vertex buffer containing the positions for this section */ + FRuntimeMeshPositionVertexBuffer PositionBuffer; + + /** Vertex buffer containing the tangents for this section */ + FRuntimeMeshTangentsVertexBuffer TangentsBuffer; + + /** Vertex buffer containing the UVs for this section */ + FRuntimeMeshUVsVertexBuffer UVsBuffer; + + /** Vertex buffer containing the colors for this section */ + FRuntimeMeshColorVertexBuffer ColorBuffer; + + /** Index buffer for this section */ + FRuntimeMeshIndexBuffer IndexBuffer; + + /** Index buffer for this section */ + FRuntimeMeshIndexBuffer AdjacencyIndexBuffer; + + /** Whether this section is currently visible */ + bool bIsVisible; + + /** Should this section cast a shadow */ + bool bCastsShadow; + +public: + FRuntimeMeshSectionProxy(ERHIFeatureLevel::Type InFeatureLevel, FRuntimeMeshSectionCreationParamsPtr CreationData); + + ~FRuntimeMeshSectionProxy(); + + bool ShouldRender(); + + bool WantsToRenderInStaticPath() const; + + bool CastsShadow() const; + + FRuntimeMeshVertexFactory* GetVertexFactory() { return &VertexFactory; } + + void CreateMeshBatch(FMeshBatch& MeshBatch, bool bWantsAdjacencyInfo); + + void BuildVertexDataType(FLocalVertexFactory::FDataType& DataType); + + void FinishUpdate_RenderThread(FRuntimeMeshSectionUpdateParamsPtr UpdateData); + + void FinishPropertyUpdate_RenderThread(FRuntimeMeshSectionPropertyUpdateParamsPtr UpdateData); +}; + + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshShapeGenerator.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshShapeGenerator.cpp new file mode 100755 index 0000000000..b933c9bf69 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshShapeGenerator.cpp @@ -0,0 +1,360 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshShapeGenerator.h" +#include "RuntimeMeshComponentPlugin.h" + + + +void URuntimeMeshShapeGenerator::ConvertQuadToTriangles(TArray& Triangles, int32 Vert0, int32 Vert1, int32 Vert2, int32 Vert3) +{ + Triangles.Add(Vert0); + Triangles.Add(Vert1); + Triangles.Add(Vert3); + + Triangles.Add(Vert1); + Triangles.Add(Vert2); + Triangles.Add(Vert3); +} + + +#define CREATEBOX_NUMVERTS 24 +#define CREATEBOX_NUMTRIS 36 +#define CREATEGRIDMESHTRIANGLES_NUMVERTS(NumX, NumY) (((NumX) + 1) * ((NumY) + 1)) +#define CREATEGRIDMESHTRIANGLES_NUMTRIS(NumX, NumY) ((NumX) * (NumY) * 2 * 3) + + + +void URuntimeMeshShapeGenerator::CreateBoxMesh(FVector BoxRadius, TArray& Vertices, TArray& Triangles, TArray& Normals, TArray& UVs, TArray& Tangents) +{ + Vertices.Empty(CREATEBOX_NUMVERTS); + Triangles.Empty(CREATEBOX_NUMTRIS); + Normals.Empty(CREATEBOX_NUMVERTS); + UVs.Empty(CREATEBOX_NUMVERTS); + Tangents.Empty(CREATEBOX_NUMVERTS); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(Position); + Normals.Add(Normal); + Tangents.Add(Tangent); + UVs.Add(UV0); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateBoxMesh(BoxRadius, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateBoxMeshPacked(FVector BoxRadius, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(CREATEBOX_NUMVERTS); + Triangles.Empty(CREATEBOX_NUMTRIS); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(FRuntimeMeshBlueprintVertexSimple(Position, Normal, Tangent, UV0)); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateBoxMesh(BoxRadius, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateBoxMesh(FVector BoxRadius, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(CREATEBOX_NUMVERTS); + Triangles.Empty(CREATEBOX_NUMTRIS); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(FRuntimeMeshVertexSimple(Position, Normal, Tangent, UV0)); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateBoxMesh(BoxRadius, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateBoxMesh(FVector BoxRadius, const TSharedPtr& MeshBuilder) +{ + MeshBuilder->EmptyVertices(CREATEBOX_NUMVERTS); + MeshBuilder->EmptyIndices(CREATEBOX_NUMTRIS); + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + int32 NewVertex = MeshBuilder->AddVertex(Position); + MeshBuilder->SetNormalTangent(NewVertex, Normal, Tangent); + MeshBuilder->SetUV(NewVertex, UV0); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + MeshBuilder->AddIndex(Index); + }; + + CreateBoxMesh(BoxRadius, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateBoxMesh(FVector BoxRadius, FRuntimeMeshAccessor& MeshBuilder) +{ + MeshBuilder.EmptyVertices(CREATEBOX_NUMVERTS); + MeshBuilder.EmptyIndices(CREATEBOX_NUMTRIS); + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + int32 NewVertex = MeshBuilder.AddVertex(Position); + MeshBuilder.SetNormalTangent(NewVertex, Normal, Tangent); + MeshBuilder.SetUV(NewVertex, UV0); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + MeshBuilder.AddIndex(Index); + }; + + CreateBoxMesh(BoxRadius, VerticesBuilder, TrianglesBuilder); +} + + +void URuntimeMeshShapeGenerator::CreateGridMeshTriangles(int32 NumX, int32 NumY, bool bWinding, TArray& Triangles) +{ + Triangles.Reset(CREATEGRIDMESHTRIANGLES_NUMTRIS(NumX - 1, NumY - 1)); + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateGridMeshTriangles(NumX, NumY, bWinding, TrianglesBuilder); +} + + + +void URuntimeMeshShapeGenerator::CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles, TArray& Normals, TArray& UVs, TArray& Tangents) +{ + Vertices.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + Triangles.Empty(CREATEGRIDMESHTRIANGLES_NUMTRIS(NumSubdivisionsX, NumSubdivisionsY)); + Normals.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + UVs.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + Tangents.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(Position); + Normals.Add(Normal); + Tangents.Add(Tangent); + UVs.Add(UV0); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateGridMesh(Width, Height, NumSubdivisionsX, NumSubdivisionsY, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateGridMeshPacked(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + Triangles.Empty(CREATEGRIDMESHTRIANGLES_NUMTRIS(NumSubdivisionsX, NumSubdivisionsY)); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(FRuntimeMeshBlueprintVertexSimple(Position, Normal, Tangent, UV0)); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateGridMesh(Width, Height, NumSubdivisionsX, NumSubdivisionsY, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles) +{ + Vertices.Empty(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + Triangles.Empty(CREATEGRIDMESHTRIANGLES_NUMTRIS(NumSubdivisionsX, NumSubdivisionsY)); + + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + Vertices.Add(FRuntimeMeshVertexSimple(Position, Normal, Tangent, UV0)); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + Triangles.Add(Index); + }; + + CreateGridMesh(Width, Height, NumSubdivisionsX, NumSubdivisionsY, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, const TSharedPtr& MeshBuilder) +{ + MeshBuilder->EmptyVertices(CREATEGRIDMESHTRIANGLES_NUMVERTS(NumSubdivisionsX, NumSubdivisionsY)); + MeshBuilder->EmptyIndices(CREATEGRIDMESHTRIANGLES_NUMTRIS(NumSubdivisionsX, NumSubdivisionsY)); + FVerticesBuilderFunction VerticesBuilder = [&](const FVector& Position, const FVector& Normal, const FRuntimeMeshTangent& Tangent, const FVector2D& UV0) + { + int32 NewVertex = MeshBuilder->AddVertex(Position); + MeshBuilder->SetNormalTangent(NewVertex, Normal, Tangent); + MeshBuilder->SetUV(NewVertex, UV0); + }; + + FTrianglesBuilderFunction TrianglesBuilder = [&](int32 Index) + { + MeshBuilder->AddIndex(Index); + }; + + CreateGridMesh(Width, Height, NumSubdivisionsX, NumSubdivisionsY, VerticesBuilder, TrianglesBuilder); +} + +void URuntimeMeshShapeGenerator::ConvertQuadToTriangles(TFunction TrianglesBuilder, int32 Vert0, int32 Vert1, int32 Vert2, int32 Vert3) +{ + TrianglesBuilder(Vert0); + TrianglesBuilder(Vert1); + TrianglesBuilder(Vert3); + + TrianglesBuilder(Vert1); + TrianglesBuilder(Vert2); + TrianglesBuilder(Vert3); +} + +void URuntimeMeshShapeGenerator::CreateBoxMesh(FVector BoxRadius, FVerticesBuilderFunction VerticesBuilder, FTrianglesBuilderFunction TrianglesBuilder) +{ + // Generate verts + FVector BoxVerts[8]; + BoxVerts[0] = FVector(-BoxRadius.X, BoxRadius.Y, BoxRadius.Z); + BoxVerts[1] = FVector(BoxRadius.X, BoxRadius.Y, BoxRadius.Z); + BoxVerts[2] = FVector(BoxRadius.X, -BoxRadius.Y, BoxRadius.Z); + BoxVerts[3] = FVector(-BoxRadius.X, -BoxRadius.Y, BoxRadius.Z); + + BoxVerts[4] = FVector(-BoxRadius.X, BoxRadius.Y, -BoxRadius.Z); + BoxVerts[5] = FVector(BoxRadius.X, BoxRadius.Y, -BoxRadius.Z); + BoxVerts[6] = FVector(BoxRadius.X, -BoxRadius.Y, -BoxRadius.Z); + BoxVerts[7] = FVector(-BoxRadius.X, -BoxRadius.Y, -BoxRadius.Z); + + FVector Normal; + FRuntimeMeshTangent Tangent; + + // Pos Z + Normal = FVector(0.0f, 0.0f, 1.0f); + Tangent.TangentX = FVector(0.0f, -1.0f, 0.0f); + VerticesBuilder(BoxVerts[0], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[1], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[2], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[3], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 0, 1, 2, 3); + + // Neg X + Normal = FVector(-1.0f, 0.0f, 0.0f); + Tangent.TangentX = FVector(0.0f, -1.0f, 0.0f); + VerticesBuilder(BoxVerts[4], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[0], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[3], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[7], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 4, 5, 6, 7); + + // Pos Y + Normal = FVector(0.0f, 1.0f, 0.0f); + Tangent.TangentX = FVector(-1.0f, 0.0f, 0.0f); + VerticesBuilder(BoxVerts[5], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[1], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[0], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[4], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 8, 9, 10, 11); + + // Pos X + Normal = FVector(1.0f, 0.0f, 0.0f); + Tangent.TangentX = FVector(0.0f, 1.0f, 0.0f); + VerticesBuilder(BoxVerts[6], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[2], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[1], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[5], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 12, 13, 14, 15); + + // Neg Y + Normal = FVector(0.0f, -1.0f, 0.0f); + Tangent.TangentX = FVector(1.0f, 0.0f, 0.0f); + VerticesBuilder(BoxVerts[7], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[3], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[2], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[6], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 16, 17, 18, 19); + + // Neg Z + Normal = FVector(0.0f, 0.0f, -1.0f); + Tangent.TangentX = FVector(0.0f, 1.0f, 0.0f); + VerticesBuilder(BoxVerts[7], Normal, Tangent, FVector2D(0.0f, 0.0f)); + VerticesBuilder(BoxVerts[6], Normal, Tangent, FVector2D(0.0f, 1.0f)); + VerticesBuilder(BoxVerts[5], Normal, Tangent, FVector2D(1.0f, 1.0f)); + VerticesBuilder(BoxVerts[4], Normal, Tangent, FVector2D(1.0f, 0.0f)); + ConvertQuadToTriangles(TrianglesBuilder, 20, 21, 22, 23); +} + +void URuntimeMeshShapeGenerator::CreateGridMeshTriangles(int32 NumX, int32 NumY, bool bWinding, FTrianglesBuilderFunction TrianglesBuilder) +{ + if (NumX >= 2 && NumY >= 2) + { + // Build Quads + for (int XIdx = 0; XIdx < NumX - 1; XIdx++) + { + for (int YIdx = 0; YIdx < NumY - 1; YIdx++) + { + const int32 I0 = (XIdx + 0)*NumY + (YIdx + 0); + const int32 I1 = (XIdx + 1)*NumY + (YIdx + 0); + const int32 I2 = (XIdx + 1)*NumY + (YIdx + 1); + const int32 I3 = (XIdx + 0)*NumY + (YIdx + 1); + + if (bWinding) + { + ConvertQuadToTriangles(TrianglesBuilder, I0, I1, I2, I3); + } + else + { + ConvertQuadToTriangles(TrianglesBuilder, I0, I3, I2, I1); + } + } + } + } +} + +void URuntimeMeshShapeGenerator::CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, FVerticesBuilderFunction VerticesBuilder, FTrianglesBuilderFunction TrianglesBuilder) +{ + static const FVector Normal(0.0f, 0.0f, 1.0f); + static const FVector Tangent(0.0f, -1.0f, 0.0f); + + + const float HalfX = Width * 0.5f; + const float HalfY = Height * 0.5f; + + int32 NumVerticesX = NumSubdivisionsX + 1; + int32 NumVerticesY = NumSubdivisionsY + 1; + + for (int32 X = 0; X < NumVerticesX; X++) + { + for (int32 Y = 0; Y < NumVerticesY; Y++) + { + FVector2D Position; + Position.X = -HalfX + ((X / (float)NumSubdivisionsX) * Width); + Position.Y = -HalfY + ((Y / (float)NumSubdivisionsY) * Height); + + FVector2D UV; + UV.X = X / (float)NumSubdivisionsX; + UV.Y = Y / (float)NumSubdivisionsY; + + VerticesBuilder(FVector(Position, 0.0f), Normal, Tangent, UV); + } + } + + CreateGridMeshTriangles(NumVerticesX, NumVerticesY, false, TrianglesBuilder); +} + + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSlicer.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSlicer.cpp new file mode 100755 index 0000000000..4e79103d85 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshSlicer.cpp @@ -0,0 +1,740 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshSlicer.h" +#include "RuntimeMeshComponentPlugin.h" +#include "GeomTools.h" +#include "RuntimeMesh.h" +#include "RuntimeMeshData.h" +#include "RuntimeMeshComponent.h" +#include "PhysicsEngine/BodySetup.h" + + +int32 URuntimeMeshSlicer::CompareBoxPlane(const FBox& InBox, const FPlane& InPlane) +{ + FVector BoxCenter, BoxExtents; + InBox.GetCenterAndExtents(BoxCenter, BoxExtents); + + // Find the distance from the plane to the center of the box + float BoxCenterDist = InPlane.PlaneDot(BoxCenter); + + // Find the size of the box in direction of plane normal + float BoxSize = FVector::BoxPushOut(InPlane, BoxExtents); + + return (BoxCenterDist > BoxSize) ? 1 : ((BoxCenterDist < -BoxSize) ? -1 : 0); +} + +FRuntimeMeshAccessorVertex URuntimeMeshSlicer::InterpolateVert(const FRuntimeMeshAccessorVertex& V0, const FRuntimeMeshAccessorVertex& V1, float Alpha) +{ + FRuntimeMeshAccessorVertex Result; + + // Handle bad alpha + if (FMath::IsNaN(Alpha) || !FMath::IsFinite(Alpha)) + { + Result = V1; + return Result; + } + + Result.Position = FMath::Lerp(V0.Position, V1.Position, Alpha); + + // We assume the sign of the binormal (W component of Normal) doesn't change + Result.Normal = FMath::Lerp(V0.Normal, V1.Normal, Alpha); + Result.Tangent = FMath::Lerp(V0.Tangent, V1.Tangent, Alpha); + + Result.Color.R = FMath::Clamp(FMath::TruncToInt(FMath::Lerp(float(V0.Color.R), float(V1.Color.R), Alpha)), 0, 255); + Result.Color.G = FMath::Clamp(FMath::TruncToInt(FMath::Lerp(float(V0.Color.G), float(V1.Color.G), Alpha)), 0, 255); + Result.Color.B = FMath::Clamp(FMath::TruncToInt(FMath::Lerp(float(V0.Color.B), float(V1.Color.B), Alpha)), 0, 255); + Result.Color.A = FMath::Clamp(FMath::TruncToInt(FMath::Lerp(float(V0.Color.A), float(V1.Color.A), Alpha)), 0, 255); + + // We should never have a different number of UVs between the vertices + check(V0.UVs.Num() == V1.UVs.Num()); + + Result.UVs.SetNum(V0.UVs.Num()); + for (int32 Index = 0; Index < Result.UVs.Num(); Index++) + { + Result.UVs[Index] = FMath::Lerp(V0.UVs[Index], V1.UVs[Index], Alpha); + } + + return Result; +} + + +void URuntimeMeshSlicer::Transform2DPolygonTo3D(const FUtilPoly2D& InPoly, const FMatrix& InMatrix, TSharedPtr OutMesh) +{ + // Set the W component to 1 to not flip the binormal + FVector4 PolyNormal = FVector4(-InMatrix.GetUnitAxis(EAxis::Z), 1.0f); + FVector PolyTangent = InMatrix.GetUnitAxis(EAxis::X); + + int32 NumUVs = OutMesh->NumUVChannels(); + + for (int32 VertexIndex = 0; VertexIndex < InPoly.Verts.Num(); VertexIndex++) + { + const FUtilVertex2D& InVertex = InPoly.Verts[VertexIndex]; + + FRuntimeMeshAccessorVertex NewVert; + + int32 NewIndex = OutMesh->AddVertex(InMatrix.TransformPosition(FVector(InVertex.Pos.X, InVertex.Pos.Y, 0.f))); + OutMesh->SetNormal(NewIndex, PolyNormal); + OutMesh->SetTangent(NewIndex, PolyTangent); + OutMesh->SetColor(NewIndex, InVertex.Color); + + NewVert.UVs.SetNum(NumUVs); + for (int32 Index = 0; Index < NumUVs; Index++) + { + OutMesh->SetUV(NewIndex, Index, InVertex.UV); + } + } +} + +bool URuntimeMeshSlicer::TriangulatePoly(TSharedPtr Mesh, int32 VertBase, const FVector& PolyNormal) +{ + // Bail if we don't have enough vertices + int32 NumVerts = Mesh->NumVertices() - VertBase; + if (NumVerts <= 3) + { + Mesh->AddIndex(FMath::Clamp(0 + VertBase, 0, NumVerts)); + Mesh->AddIndex(FMath::Clamp(2 + VertBase, 0, NumVerts)); + Mesh->AddIndex(FMath::Clamp(1 + VertBase, 0, NumVerts)); + + return true; + } + + // Store the starting size of the indices. + const int32 OriginalNumIndices = Mesh->NumIndices(); + + // Initialize starting array of indices + TArray VertIndices; + VertIndices.SetNumUninitialized(NumVerts); + for (int VertIndex = 0; VertIndex < NumVerts; VertIndex++) + { + VertIndices[VertIndex] = VertBase + VertIndex; + } + + // Find ears until there are no vertices + while (VertIndices.Num() >= 3) + { + // Look for an 'ear' triangle + bool bFoundEar = false; + for (int32 EarVertexIndex = 0; EarVertexIndex < VertIndices.Num(); EarVertexIndex++) + { + // Triangle is 'this' vert plus the one before and after it + const int32 Index1 = (EarVertexIndex == 0) ? VertIndices.Num() - 1 : EarVertexIndex - 1; + const int32 Index2 = EarVertexIndex; + const int32 Index3 = (EarVertexIndex + 1) % VertIndices.Num(); + + const FRuntimeMeshAccessorVertex Vert1 = Mesh->GetVertex(VertIndices[Index1]); + const FRuntimeMeshAccessorVertex Vert2 = Mesh->GetVertex(VertIndices[Index2]); + const FRuntimeMeshAccessorVertex Vert3 = Mesh->GetVertex(VertIndices[Index3]); + + // Check that this vertex is convex (cross product must be positive) + const FVector Edge12 = Vert2.Position - Vert1.Position; + const FVector Edge13 = Vert3.Position - Vert1.Position; + const float Determinant = (Edge12 ^ Edge13) | PolyNormal; + if (Determinant > 0.f) + { + continue; + } + + bool bFoundVertInside = false; + // Look through all verts before this in array to see if any are inside triangle + for (int32 VertexIndex = 0; VertexIndex < VertIndices.Num(); VertexIndex++) + { + const FRuntimeMeshAccessorVertex& TestVert = Mesh->GetVertex(VertIndices[VertexIndex]); + + if (VertexIndex != Index1 && + VertexIndex != Index2 && + VertexIndex != Index3 && + FGeomTools::PointInTriangle(Vert1.Position, Vert2.Position, Vert3.Position, TestVert.Position)) + { + bFoundVertInside = true; + break; + } + } + + // Triangle with no verts inside - its an 'ear'! + if (!bFoundVertInside) + { + Mesh->AddIndex(VertIndices[Index1]); + Mesh->AddIndex(VertIndices[Index3]); + Mesh->AddIndex(VertIndices[Index2]); + + // And remove vertex from polygon + VertIndices.RemoveAt(EarVertexIndex); + + bFoundEar = true; + break; + } + } + + // If we couldn't find an 'ear' it indicates something is bad with this polygon - discard triangles and return. + if (!bFoundEar) + { + Mesh->SetNumIndices(OriginalNumIndices); + return false; + } + } + + return true; +} + +void URuntimeMeshSlicer::SliceConvexElem(const FKConvexElem& InConvex, const FPlane& SlicePlane, TArray& OutConvexVerts) +{ + FPlane SlicePlaneFlipped = SlicePlane.Flip(); + + // Get set of planes that make up hull + TArray ConvexPlanes; + InConvex.GetPlanes(ConvexPlanes); + + if (ConvexPlanes.Num() >= 4) + { + // Add on the slicing plane (need to flip as it culls geom in the opposite sense to our geom culling code) + ConvexPlanes.Add(SlicePlaneFlipped); + + // Create output convex based on new set of planes + FKConvexElem SlicedElem; + bool bSuccess = SlicedElem.HullFromPlanes(ConvexPlanes, InConvex.VertexData); + if (bSuccess) + { + OutConvexVerts = SlicedElem.VertexData; + } + } +} + + +void URuntimeMeshSlicer::SliceRuntimeMeshConvexCollision(URuntimeMesh* InRuntimeMesh, URuntimeMesh* OutOtherHalf, FVector PlanePosition, FVector PlaneNormal) +{ + bool bCreateOtherHalf = OutOtherHalf != nullptr; + + PlaneNormal.Normalize(); + FPlane SlicePlane(PlanePosition, PlaneNormal); + + // Array of sliced collision shapes + TArray> SlicedCollision; + TArray> OtherSlicedCollision; + + UBodySetup* BodySetup = InRuntimeMesh->GetBodySetup(); + + for (int32 ConvexIndex = 0; ConvexIndex < BodySetup->AggGeom.ConvexElems.Num(); ConvexIndex++) + { + FKConvexElem& BaseConvex = BodySetup->AggGeom.ConvexElems[ConvexIndex]; + + int32 BoxCompare = CompareBoxPlane(BaseConvex.ElemBox, SlicePlane); + + // If box totally clipped, add to other half (if desired) + if (BoxCompare == -1) + { + if (bCreateOtherHalf) + { + OtherSlicedCollision.Add(BaseConvex.VertexData); + } + } + // If box totally valid, just keep mesh as is + else if (BoxCompare == 1) + { + SlicedCollision.Add(BaseConvex.VertexData); + } + // Need to actually slice the convex shape + else + { + TArray SlicedConvexVerts; + SliceConvexElem(BaseConvex, SlicePlane, SlicedConvexVerts); + // If we got something valid, add it + if (SlicedConvexVerts.Num() >= 4) + { + SlicedCollision.Add(SlicedConvexVerts); + } + + // Slice again to get the other half of the collision, if desired + if (bCreateOtherHalf) + { + TArray OtherSlicedConvexVerts; + SliceConvexElem(BaseConvex, SlicePlane.Flip(), OtherSlicedConvexVerts); + if (OtherSlicedConvexVerts.Num() >= 4) + { + OtherSlicedCollision.Add(OtherSlicedConvexVerts); + } + } + } + } + + // Update collision of runtime mesh + InRuntimeMesh->SetCollisionConvexMeshes(SlicedCollision); + + // Set collision for other mesh + if (bCreateOtherHalf) + { + OutOtherHalf->SetCollisionConvexMeshes(OtherSlicedCollision); + } +} + +void URuntimeMeshSlicer::SliceRuntimeMeshSection(const FRuntimeMeshDataPtr& InRuntimeMesh, const FRuntimeMeshDataPtr& OutOtherHalf, int32 SectionIndex, const FPlane& SlicePlane, TArray& ClipEdges) +{ + bool bShouldCreateOtherHalf = OutOtherHalf.IsValid(); + + auto SourceMeshData = InRuntimeMesh->GetSectionReadonly(SectionIndex); + TSharedPtr NewMeshData = MakeRuntimeMeshBuilder(*SourceMeshData.Get()); + TSharedPtr OtherMeshData = bShouldCreateOtherHalf ? MakeRuntimeMeshBuilder(*SourceMeshData.Get()) : TSharedPtr(nullptr); + + // Map of base vert index to sliced vert index + TMap BaseToSlicedVertIndex; + TMap BaseToOtherSlicedVertIndex; + + const int32 NumBaseVerts = SourceMeshData->NumVertices(); + + // Distance of each base vert from slice plane + TArray VertDistance; + VertDistance.SetNumUninitialized(NumBaseVerts); + + // Build vertex buffer + for (int32 BaseVertIndex = 0; BaseVertIndex < NumBaseVerts; BaseVertIndex++) + { + FRuntimeMeshAccessorVertex BaseVert = SourceMeshData->GetVertex(BaseVertIndex); + + // Calculate distance from plane + VertDistance[BaseVertIndex] = SlicePlane.PlaneDot(BaseVert.Position); + + // See if vert is being kept in this section + if (VertDistance[BaseVertIndex] > 0.f) + { + // Copy to sliced v buffer + int32 SlicedVertIndex = NewMeshData->AddVertex(BaseVert); + + // Add to map + BaseToSlicedVertIndex.Add(BaseVertIndex, SlicedVertIndex); + } + // Or add to other half if desired + else if (bShouldCreateOtherHalf) + { + int32 SlicedVertIndex = OtherMeshData->AddVertex(BaseVert); + + BaseToOtherSlicedVertIndex.Add(BaseVertIndex, SlicedVertIndex); + } + } + + + // Iterate over base triangles (IE. 3 indices at a time) + int32 NumBaseIndices = SourceMeshData->NumIndices(); + for (int32 BaseIndex = 0; BaseIndex < NumBaseIndices; BaseIndex += 3) + { + int32 BaseV[3]; // Triangle vert indices in original mesh + int32* SlicedV[3]; // Pointers to vert indices in new v buffer + int32* SlicedOtherV[3]; // Pointers to vert indices in new 'other half' v buffer + + // For each vertex.. + for (int32 i = 0; i < 3; i++) + { + // Get triangle vert index + BaseV[i] = SourceMeshData->GetIndex(BaseIndex + i); + // Look up in sliced v buffer + SlicedV[i] = BaseToSlicedVertIndex.Find(BaseV[i]); + // Look up in 'other half' v buffer (if desired) + if (bShouldCreateOtherHalf) + { + SlicedOtherV[i] = BaseToOtherSlicedVertIndex.Find(BaseV[i]); + // Each base vert _must_ exist in either BaseToSlicedVertIndex or BaseToOtherSlicedVertIndex + check((SlicedV[i] != nullptr) != (SlicedOtherV[i] != nullptr)); + } + } + + // If all verts survived plane cull, keep the triangle + if (SlicedV[0] != nullptr && SlicedV[1] != nullptr && SlicedV[2] != nullptr) + { + NewMeshData->AddIndex(*SlicedV[0]); + NewMeshData->AddIndex(*SlicedV[1]); + NewMeshData->AddIndex(*SlicedV[2]); + } + // If all verts were removed by plane cull + else if (SlicedV[0] == nullptr && SlicedV[1] == nullptr && SlicedV[2] == nullptr) + { + // If creating other half, add all verts to that + if (bShouldCreateOtherHalf) + { + OtherMeshData->AddIndex(*SlicedOtherV[0]); + OtherMeshData->AddIndex(*SlicedOtherV[1]); + OtherMeshData->AddIndex(*SlicedOtherV[2]); + } + } + // If partially culled, clip to create 1 or 2 new triangles + else + { + int32 FinalVerts[4]; + int32 NumFinalVerts = 0; + + int32 OtherFinalVerts[4]; + int32 NumOtherFinalVerts = 0; + + FUtilEdge3D NewClipEdge; + int32 ClippedEdges = 0; + + float PlaneDist[3]; + PlaneDist[0] = VertDistance[BaseV[0]]; + PlaneDist[1] = VertDistance[BaseV[1]]; + PlaneDist[2] = VertDistance[BaseV[2]]; + + for (int32 EdgeIdx = 0; EdgeIdx < 3; EdgeIdx++) + { + int32 ThisVert = EdgeIdx; + + // If start vert is inside, add it. + if (SlicedV[ThisVert] != nullptr) + { + check(NumFinalVerts < 4); + FinalVerts[NumFinalVerts++] = *SlicedV[ThisVert]; + } + // If not, add to other side + else if (bShouldCreateOtherHalf) + { + check(NumOtherFinalVerts < 4); + OtherFinalVerts[NumOtherFinalVerts++] = *SlicedOtherV[ThisVert]; + } + + // If start and next vert are on opposite sides, add intersection + int32 NextVert = (EdgeIdx + 1) % 3; + + if ((SlicedV[EdgeIdx] == nullptr) != (SlicedV[NextVert] == nullptr)) + { + // Find distance along edge that plane is + float Alpha = -PlaneDist[ThisVert] / (PlaneDist[NextVert] - PlaneDist[ThisVert]); + // Interpolate vertex params to that point + FRuntimeMeshAccessorVertex InterpVert = InterpolateVert( + SourceMeshData->GetVertex(BaseV[ThisVert]), + SourceMeshData->GetVertex(BaseV[NextVert]), + FMath::Clamp(Alpha, 0.0f, 1.0f)); + + // Add to vertex buffer + int32 InterpVertIndex = NewMeshData->AddVertex(InterpVert); + + // Save vert index for this poly + check(NumFinalVerts < 4); + FinalVerts[NumFinalVerts++] = InterpVertIndex; + + // If desired, add to the poly for the other half as well + if (bShouldCreateOtherHalf) + { + int32 OtherInterpVertIndex = OtherMeshData->AddVertex(InterpVert); + + check(NumOtherFinalVerts < 4); + OtherFinalVerts[NumOtherFinalVerts++] = OtherInterpVertIndex; + } + + // When we make a new edge on the surface of the clip plane, save it off. + check(ClippedEdges < 2); + if (ClippedEdges == 0) + { + NewClipEdge.V0 = InterpVert.Position; + } + else + { + NewClipEdge.V1 = InterpVert.Position; + } + + ClippedEdges++; + } + } + + // Triangulate the clipped polygon. + for (int32 VertexIndex = 2; VertexIndex < NumFinalVerts; VertexIndex++) + { + NewMeshData->AddIndex(FinalVerts[0]); + NewMeshData->AddIndex(FinalVerts[VertexIndex - 1]); + NewMeshData->AddIndex(FinalVerts[VertexIndex]); + } + + // If we are making the other half, triangulate that as well + if (bShouldCreateOtherHalf) + { + for (int32 VertexIndex = 2; VertexIndex < NumOtherFinalVerts; VertexIndex++) + { + OtherMeshData->AddIndex(OtherFinalVerts[0]); + OtherMeshData->AddIndex(OtherFinalVerts[VertexIndex - 1]); + OtherMeshData->AddIndex(OtherFinalVerts[VertexIndex]); + } + } + + check(ClippedEdges != 1); // Should never clip just one edge of the triangle + + // If we created a new edge, save that off here as well + if (ClippedEdges == 2) + { + ClipEdges.Add(NewClipEdge); + } + } + } + + // Add the mesh data to the other mesh if we're building the other mesh and have valid geometry. + if (bShouldCreateOtherHalf && OtherMeshData->NumVertices() > 0 && OtherMeshData->NumIndices() > 0) + { + OutOtherHalf->CreateMeshSection(SectionIndex, MoveTemp(OtherMeshData)); + } + + // Update this runtime mesh, or clear it if we have no geometry + if (NewMeshData->NumVertices() > 0 && NewMeshData->NumIndices() > 0) + { + InRuntimeMesh->UpdateMeshSection(SectionIndex, MoveTemp(NewMeshData)); + } + else + { + InRuntimeMesh->ClearMeshSection(SectionIndex); + } +} + +int32 URuntimeMeshSlicer::CapMeshSlice(const FRuntimeMeshDataPtr& InRuntimeMesh, const FRuntimeMeshDataPtr& OutOtherHalf, TArray& ClipEdges, const FPlane& SlicePlane, FVector PlaneNormal, ERuntimeMeshSlicerCapOption CapOption) +{ + bool bShouldCreateOtherHalf = OutOtherHalf.IsValid(); + + int32 NewCapSectionIndex = InRuntimeMesh->GetLastSectionIndex() + 1; + if (bShouldCreateOtherHalf) + { + NewCapSectionIndex = FMath::Max(NewCapSectionIndex, OutOtherHalf->GetLastSectionIndex() + 1); + } + + // Create cap geometry (if some edges to create it from) + if (CapOption != ERuntimeMeshSlicerCapOption::NoCap && ClipEdges.Num() > 0) + { + TSharedPtr CapSection; + int32 CapSectionIndex = INDEX_NONE; + + // If using an existing section, copy that info first + if (CapOption == ERuntimeMeshSlicerCapOption::UseLastSectionForCap) + { + CapSectionIndex = InRuntimeMesh->GetLastSectionIndex(); + auto ExistingMesh = InRuntimeMesh->GetSectionReadonly(NewCapSectionIndex); + CapSection = MakeRuntimeMeshBuilder(*ExistingMesh.Get()); + ExistingMesh->CopyTo(CapSection); + } + // Adding new section for cap + else + { + CapSection = MakeRuntimeMeshBuilder(); + CapSectionIndex = NewCapSectionIndex; + } + + // Project 3D edges onto slice plane to form 2D edges + TArray Edges2D; + FUtilPoly2DSet PolySet; + FGeomTools::ProjectEdges(Edges2D, PolySet.PolyToWorld, ClipEdges, SlicePlane); + + // Find 2D closed polygons from this edge soup + FGeomTools::Buid2DPolysFromEdges(PolySet.Polys, Edges2D, FColor(255, 255, 255, 255)); + + // Remember start point for vert and index buffer before adding and cap geom + int32 CapVertBase = CapSection->NumVertices(); + int32 CapIndexBase = CapSection->NumIndices(); + + // Triangulate each poly + for (int32 PolyIdx = 0; PolyIdx < PolySet.Polys.Num(); PolyIdx++) + { + // Generate UVs for the 2D polygon. + FGeomTools::GeneratePlanarTilingPolyUVs(PolySet.Polys[PolyIdx], 64.f); + + // Remember start of vert buffer before adding triangles for this poly + int32 PolyVertBase = CapSection->NumVertices(); + + // Transform from 2D poly verts to 3D + Transform2DPolygonTo3D(PolySet.Polys[PolyIdx], PolySet.PolyToWorld, CapSection); + + // Triangulate this polygon + TriangulatePoly(CapSection, PolyVertBase, PlaneNormal); + } + + // Set geom for cap section + if (CapOption == ERuntimeMeshSlicerCapOption::UseLastSectionForCap) + { + InRuntimeMesh->UpdateMeshSection(CapSectionIndex, MoveTemp(CapSection)); + } + else + { + InRuntimeMesh->CreateMeshSection(CapSectionIndex, MoveTemp(CapSection)); + } + + // If creating the other half, copy cap geom into other half sections + if (bShouldCreateOtherHalf) + { + TSharedPtr OtherCapSection; + int32 OtherCapSectionIndex = INDEX_NONE; + + // If using an existing section, copy that info first + if (CapOption == ERuntimeMeshSlicerCapOption::UseLastSectionForCap) + { + OtherCapSectionIndex = OutOtherHalf->GetLastSectionIndex(); + auto ExistingMesh = OutOtherHalf->GetSectionReadonly(CapSectionIndex); + OtherCapSection = MakeRuntimeMeshBuilder(*ExistingMesh.Get()); + ExistingMesh->CopyTo(OtherCapSection); + } + // Adding new section for cap + else + { + OtherCapSection = MakeRuntimeMeshBuilder(); + OtherCapSectionIndex = NewCapSectionIndex; + } + + // Remember current base index for verts in 'other cap section' + int32 OtherCapVertBase = OtherCapSection->NumVertices(); + + // Copy verts from cap section into other cap section + int32 CapSectionLength = CapSection->NumVertices(); + for (int32 VertIdx = CapVertBase; VertIdx < CapSectionLength; VertIdx++) + { + FRuntimeMeshAccessorVertex OtherCapVert = CapSection->GetVertex(VertIdx); + + // Flip normal and tangent TODO: FlipY? + float Sign = OtherCapVert.Normal.W; + OtherCapVert.Normal *= -1.f; + OtherCapVert.Normal.W = Sign; + OtherCapVert.Tangent *= -1.f; + + // Add to other cap v buffer + OtherCapSection->AddVertex(OtherCapVert); + } + + // Find offset between main cap verts and other cap verts + int32 VertOffset = OtherCapVertBase - CapVertBase; + + // Copy indices over as well + int32 NumCapIndices = CapSection->NumIndices(); + for (int32 IndexIdx = CapIndexBase; IndexIdx < NumCapIndices; IndexIdx += 3) + { + // Need to offset and change winding + OtherCapSection->AddIndex(CapSection->GetIndex(IndexIdx + 0) + VertOffset); + OtherCapSection->AddIndex(CapSection->GetIndex(IndexIdx + 2) + VertOffset); + OtherCapSection->AddIndex(CapSection->GetIndex(IndexIdx + 1) + VertOffset); + } + + // Set geom for cap section + if (CapOption == ERuntimeMeshSlicerCapOption::UseLastSectionForCap) + { + OutOtherHalf->UpdateMeshSection(OtherCapSectionIndex, MoveTemp(OtherCapSection)); + } + else + { + OutOtherHalf->CreateMeshSection(OtherCapSectionIndex, MoveTemp(OtherCapSection)); + } + } + } + return NewCapSectionIndex; +} + + +void URuntimeMeshSlicer::SliceRuntimeMesh(URuntimeMesh* InRuntimeMesh, FVector PlanePosition, FVector PlaneNormal, URuntimeMesh* OutOtherHalf, ERuntimeMeshSlicerCapOption CapOption, UMaterialInterface* CapMaterial) +{ + if (InRuntimeMesh) + { + FRuntimeMeshDataPtr InMeshData = InRuntimeMesh->GetRuntimeMeshData(); + FRuntimeMeshDataPtr OtherHalfData = OutOtherHalf ? OutOtherHalf->GetRuntimeMeshData() : FRuntimeMeshDataPtr(nullptr); + + + PlaneNormal.Normalize(); + FPlane SlicePlane(PlanePosition, PlaneNormal); + + bool bShouldCreateOtherHalf = OutOtherHalf != nullptr; + + // Set of new edges created by clipping polys by plane + TArray ClipEdges; + + for (int32 SectionIndex = 0; SectionIndex < InRuntimeMesh->GetNumSections(); SectionIndex++) + { + // Skip if the section doesn't exist + if (!InRuntimeMesh->DoesSectionExist(SectionIndex)) + { + continue; + } + + auto MeshData = InRuntimeMesh->GetSectionReadonly(SectionIndex); + + // Skip if we don't have mesh data + if (MeshData->NumVertices() < 3 || MeshData->NumIndices() < 3) + { + continue; + } + + // Compare bounding box of section with slicing plane + int32 BoxCompare = CompareBoxPlane(InRuntimeMesh->GetSectionBoundingBox(SectionIndex), SlicePlane); + + if (BoxCompare == 1) + { + // Box totally on the close side of the plane, do nothing + continue; + } + + if (BoxCompare == -1) + { + // Box totally on the far side of the plane, move the entire section to the other RMC if it exists + if (bShouldCreateOtherHalf) + { + auto SourceMeshData = InRuntimeMesh->GetSectionReadonly(SectionIndex); + + auto NewBuilder = MakeRuntimeMeshBuilder(*SourceMeshData.Get()); + SourceMeshData->CopyTo(NewBuilder); + + OutOtherHalf->CreateMeshSection(SectionIndex, MoveTemp(NewBuilder)); + } + + InRuntimeMesh->ClearMeshSection(SectionIndex); + continue; + } + + check(BoxCompare == 0); + + UMaterialInterface* Material = InRuntimeMesh->GetSectionMaterial(SectionIndex); + + SliceRuntimeMeshSection(InMeshData, OtherHalfData, SectionIndex, SlicePlane, ClipEdges); + + if (bShouldCreateOtherHalf && OtherHalfData->DoesSectionExist(SectionIndex)) + { + OutOtherHalf->SetSectionMaterial(SectionIndex, Material); + } + } + + int32 CapSectionIndex = CapMeshSlice(InMeshData, OtherHalfData, ClipEdges, SlicePlane, PlaneNormal, CapOption); + + if (CapOption == ERuntimeMeshSlicerCapOption::CreateNewSectionForCap) + { + InRuntimeMesh->SetSectionMaterial(CapSectionIndex, CapMaterial); + if (bShouldCreateOtherHalf) + { + OutOtherHalf->SetSectionMaterial(CapSectionIndex, CapMaterial); + } + } + + // Slice the collision + SliceRuntimeMeshConvexCollision(InRuntimeMesh, OutOtherHalf, PlanePosition, PlaneNormal); + } +} + +void URuntimeMeshSlicer::SliceRuntimeMeshComponent(URuntimeMeshComponent* InRuntimeMesh, FVector PlanePosition, FVector PlaneNormal, bool bCreateOtherHalf, URuntimeMeshComponent*& OutOtherHalf, ERuntimeMeshSlicerCapOption CapOption, UMaterialInterface* CapMaterial) +{ + if (InRuntimeMesh && InRuntimeMesh->GetRuntimeMesh()) + { + // Transform plane from world to local space + FTransform ComponentToWorld = InRuntimeMesh->GetComponentToWorld(); + FVector LocalPlanePos = ComponentToWorld.InverseTransformPosition(PlanePosition); + FVector LocalPlaneNormal = ComponentToWorld.InverseTransformVectorNoScale(PlaneNormal); + LocalPlaneNormal = LocalPlaneNormal.GetSafeNormal(); // Ensure normalized + + + if (bCreateOtherHalf) + { + OutOtherHalf = NewObject(InRuntimeMesh->GetOuter()); + OutOtherHalf->SetWorldTransform(InRuntimeMesh->GetComponentTransform()); + } + + SliceRuntimeMesh(InRuntimeMesh->GetRuntimeMesh(), LocalPlanePos, LocalPlaneNormal, bCreateOtherHalf ? OutOtherHalf->GetOrCreateRuntimeMesh() : nullptr, CapOption, CapMaterial); + + + if (bCreateOtherHalf) + { + if (OutOtherHalf->GetNumSections() > 0) + { + OutOtherHalf->SetCollisionProfileName(InRuntimeMesh->GetCollisionProfileName()); + OutOtherHalf->SetCollisionEnabled(InRuntimeMesh->GetCollisionEnabled()); + OutOtherHalf->SetCollisionUseComplexAsSimple(InRuntimeMesh->IsCollisionUsingComplexAsSimple()); + + OutOtherHalf->RegisterComponent(); + } + else + { + OutOtherHalf->DestroyComponent(); + } + } + + } +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.cpp new file mode 100755 index 0000000000..1ec3704889 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.cpp @@ -0,0 +1,161 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshTessellationUtilities.h" +#include "RuntimeMeshComponentPlugin.h" + +const uint32 EdgesPerTriangle = 3; +const uint32 IndicesPerTriangle = 3; +const uint32 VerticesPerTriangle = 3; +const uint32 DuplicateIndexCount = 3; + +const uint32 PnAenDomCorner_IndicesPerPatch = 12; + +DECLARE_CYCLE_STAT(TEXT("RML - Calculate Tessellation Indices"), STAT_RuntimeMeshLibrary_CalculateTessellationIndices, STATGROUP_RuntimeMesh); + +void FTessellationUtilities::AddIfLeastUV(PositionDictionary& PosDict, const Vertex& Vert, uint32 Index) +{ + auto* Pos = PosDict.Find(Vert.Position); + if (Pos == nullptr) + { + PosDict.Add(Vert.Position, Corner(Index, Vert.TexCoord)); + } + else if (Vert.TexCoord < Pos->TexCoord) + { + PosDict[Vert.Position] = Corner(Index, Vert.TexCoord); + } +} + + +void FTessellationUtilities::CalculateTessellationIndices(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader) +{ + SCOPE_CYCLE_COUNTER(STAT_RuntimeMeshLibrary_CalculateTessellationIndices); + + EdgeDictionary EdgeDict; + EdgeDict.Reserve(NumIndices); + PositionDictionary PosDict; + PosDict.Reserve(NumIndices); + + OutIndicesSizeSetter(PnAenDomCorner_IndicesPerPatch * (NumIndices / IndicesPerTriangle)); + + ExpandIB(NumVertices, NumIndices, PositionAccessor, UVAccessor, IndexAccessor, OutIndicesSizeSetter, OutIndicesSizeGetter, OutIndicesWriter, OutIndicesReader, EdgeDict, PosDict); + + ReplacePlaceholderIndices(NumVertices, NumIndices, PositionAccessor, UVAccessor, IndexAccessor, OutIndicesSizeSetter, OutIndicesSizeGetter, OutIndicesWriter, OutIndicesReader, EdgeDict, PosDict); +} + + +void FTessellationUtilities::ExpandIB(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader, + EdgeDictionary& OutEdgeDict, PositionDictionary& OutPosDict) +{ + const uint32 TriangleCount = NumIndices / IndicesPerTriangle; + + for (uint32 U = 0; U < TriangleCount; U++) + { + const uint32 StartInIndex = U * IndicesPerTriangle; + const uint32 StartOutIndex = U * PnAenDomCorner_IndicesPerPatch; + + const uint32 Index0 = IndexAccessor(U * 3 + 0); + const uint32 Index1 = IndexAccessor(U * 3 + 1); + const uint32 Index2 = IndexAccessor(U * 3 + 2); + + const Vertex Vertex0(PositionAccessor(Index0), UVAccessor(Index0)); + const Vertex Vertex1(PositionAccessor(Index1), UVAccessor(Index1)); + const Vertex Vertex2(PositionAccessor(Index2), UVAccessor(Index2)); + + Triangle Tri(Index0, Index1, Index2, Vertex0, Vertex1, Vertex2); + + if ((uint32)OutIndicesSizeGetter() <= (StartOutIndex + PnAenDomCorner_IndicesPerPatch)) + { + OutIndicesSizeSetter((StartOutIndex + PnAenDomCorner_IndicesPerPatch) + 1); + } + + OutIndicesWriter(StartOutIndex + 0, Tri.GetIndex(0)); + OutIndicesWriter(StartOutIndex + 1, Tri.GetIndex(1)); + OutIndicesWriter(StartOutIndex + 2, Tri.GetIndex(2)); + + OutIndicesWriter(StartOutIndex + 3, Tri.GetIndex(0)); + OutIndicesWriter(StartOutIndex + 4, Tri.GetIndex(1)); + + OutIndicesWriter(StartOutIndex + 5, Tri.GetIndex(1)); + OutIndicesWriter(StartOutIndex + 6, Tri.GetIndex(2)); + + OutIndicesWriter(StartOutIndex + 7, Tri.GetIndex(2)); + OutIndicesWriter(StartOutIndex + 8, Tri.GetIndex(0)); + + OutIndicesWriter(StartOutIndex + 9, Tri.GetIndex(0)); + OutIndicesWriter(StartOutIndex + 10, Tri.GetIndex(1)); + OutIndicesWriter(StartOutIndex + 11, Tri.GetIndex(2)); + + + Edge Rev0 = Tri.GetEdge(0).GetReverse(); + Edge Rev1 = Tri.GetEdge(1).GetReverse(); + Edge Rev2 = Tri.GetEdge(2).GetReverse(); + + OutEdgeDict.Add(Rev0, Rev0); + OutEdgeDict.Add(Rev1, Rev1); + OutEdgeDict.Add(Rev2, Rev2); + + AddIfLeastUV(OutPosDict, Vertex0, Index0); + AddIfLeastUV(OutPosDict, Vertex1, Index1); + AddIfLeastUV(OutPosDict, Vertex2, Index2); + } +} + + + +void FTessellationUtilities::ReplacePlaceholderIndices(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader, + EdgeDictionary& EdgeDict, PositionDictionary& PosDict) +{ + const uint32 TriangleCount = NumIndices / PnAenDomCorner_IndicesPerPatch; + + for (uint32 U = 0; U < TriangleCount; U++) + { + const uint32 StartOutIndex = U * PnAenDomCorner_IndicesPerPatch; + + const uint32 Index0 = OutIndicesReader(StartOutIndex + 0); + const uint32 Index1 = OutIndicesReader(StartOutIndex + 1); + const uint32 Index2 = OutIndicesReader(StartOutIndex + 2); + + const Vertex Vertex0(PositionAccessor(Index0), UVAccessor(Index0)); + const Vertex Vertex1(PositionAccessor(Index1), UVAccessor(Index1)); + const Vertex Vertex2(PositionAccessor(Index2), UVAccessor(Index2)); + + Triangle Tri(Index0, Index1, Index2, Vertex0, Vertex1, Vertex2); + + Edge* Ed = EdgeDict.Find(Tri.GetEdge(0)); + if (Ed != nullptr) + { + OutIndicesWriter(StartOutIndex + 3, Ed->GetIndex(0)); + OutIndicesWriter(StartOutIndex + 4, Ed->GetIndex(1)); + } + + Ed = EdgeDict.Find(Tri.GetEdge(1)); + if (Ed != nullptr) + { + OutIndicesWriter(StartOutIndex + 5, Ed->GetIndex(0)); + OutIndicesWriter(StartOutIndex + 6, Ed->GetIndex(1)); + } + + Ed = EdgeDict.Find(Tri.GetEdge(2)); + if (Ed != nullptr) + { + OutIndicesWriter(StartOutIndex + 7, Ed->GetIndex(0)); + OutIndicesWriter(StartOutIndex + 8, Ed->GetIndex(1)); + } + + // Deal with dominant positions. + for (uint32 V = 0; V < VerticesPerTriangle; V++) + { + Corner* Corn = PosDict.Find(Tri.GetEdge(V).GetVertex(0).Position); + if (Corn != nullptr) + { + OutIndicesWriter(StartOutIndex + 9 + V, Corn->Index); + } + } + } +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.h new file mode 100755 index 0000000000..b3ef16a960 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshTessellationUtilities.h @@ -0,0 +1,185 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshBuilder.h" + + +/** +* +*/ +class FTessellationUtilities +{ +public: + static void CalculateTessellationIndices(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader); + + + + +private: + struct Vertex + { + FVector Position; + FVector2D TexCoord; + + Vertex() { } + Vertex(const FVector& InPosition, const FVector2D& InTexCoord) + : Position(InPosition), TexCoord(InTexCoord) + { } + + FORCEINLINE bool operator==(const Vertex& Other) const + { + return Position == Other.Position; + } + FORCEINLINE bool operator<(const Vertex& Other) const + { + return Position.X < Other.Position.X + || Position.Y < Other.Position.Y + || Position.Z < Other.Position.Z; + } + }; + + static FORCEINLINE uint32 HashValue(const FVector& Vec) + { + return 31337 * GetTypeHash(Vec.X) + 13 * GetTypeHash(Vec.Y) + 3 * GetTypeHash(Vec.Z); + } + + static FORCEINLINE uint32 HashValue(const Vertex& Vert) + { + return HashValue(Vert.Position); + } + + struct Edge + { + private: + uint32 IndexFrom; + uint32 IndexTo; + + Vertex VertexFrom; + Vertex VertexTo; + + uint32 CachedHash; + + public: + Edge() : CachedHash(0) { } + Edge(uint32 InIndexFrom, uint32 InIndexTo, const Vertex& InVertexFrom, const Vertex& InVertexTo) + : IndexFrom(InIndexFrom), IndexTo(InIndexTo), VertexFrom(InVertexFrom), VertexTo(InVertexTo) + { + // Hash should only consider position, not index. + // We want values with different indices to compare true. + CachedHash = 7 * HashValue(VertexFrom) + 2 * HashValue(VertexTo); + } + + Vertex GetVertex(uint32 I) const + { + switch (I) + { + case 0: + return VertexFrom; + case 1: + return VertexTo; + default: + checkNoEntry(); + return Vertex(); + } + } + + uint32 GetIndex(uint32 I) const + { + switch (I) + { + case 0: + return IndexFrom; + case 1: + return IndexTo; + default: + checkNoEntry(); + return 0; + } + } + + Edge GetReverse() const + { + return Edge(IndexTo, IndexFrom, VertexTo, VertexFrom); + } + + FORCEINLINE bool operator<(const Edge& Other) const + { + // Quick out, otherwise we have to compare vertices + if (IndexFrom == Other.IndexFrom && IndexTo == Other.IndexTo) + { + return false; + } + + return VertexFrom < Other.VertexFrom || VertexTo < Other.VertexTo; + } + + FORCEINLINE bool operator==(const Edge& Other) const + { + return (IndexFrom == Other.IndexFrom && IndexTo == Other.IndexTo) || + (VertexFrom == Other.VertexFrom && VertexTo == Other.VertexTo); + } + + friend FORCEINLINE uint32 GetTypeHash(const Edge& E) + { + return E.CachedHash; + } + }; + + struct Corner + { + uint32 Index; + FVector2D TexCoord; + + Corner() : Index(0) { } + Corner(uint32 InIndex, FVector2D InTexCoord) + : Index(InIndex), TexCoord(InTexCoord) + { } + }; + + class Triangle + { + Edge Edge0; + Edge Edge1; + Edge Edge2; + + public: + Triangle(uint32 Index0, uint32 Index1, uint32 Index2, const Vertex& Vertex0, const Vertex& Vertex1, const Vertex& Vertex2) + : Edge0(Index0, Index1, Vertex0, Vertex1) + , Edge1(Index1, Index2, Vertex1, Vertex2) + , Edge2(Index2, Index0, Vertex2, Vertex0) + { } + + FORCEINLINE bool operator<(const Triangle& Other) const + { + return Edge0 < Other.Edge0 || Edge1 < Other.Edge1 || Edge2 < Other.Edge2; + } + + FORCEINLINE const Edge& GetEdge(uint32 I) + { + return ((Edge*)&Edge0)[I]; + } + FORCEINLINE uint32 GetIndex(uint32 I) + { + return GetEdge(I).GetIndex(0); + } + + }; + using EdgeDictionary = TMap; + using PositionDictionary = TMap; + + static void AddIfLeastUV(PositionDictionary& PosDict, const Vertex& Vert, uint32 Index); + + static void ReplacePlaceholderIndices(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader, + EdgeDictionary& EdgeDict, PositionDictionary& PosDict); + + static void ExpandIB(int32 NumVertices, int32 NumIndices, + TFunction PositionAccessor, TFunction UVAccessor, TFunction IndexAccessor, + TFunction OutIndicesSizeSetter, TFunction OutIndicesSizeGetter, TFunction OutIndicesWriter, TFunction OutIndicesReader, + EdgeDictionary& OutEdgeDict, PositionDictionary& OutPosDict); +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshUpdateCommands.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshUpdateCommands.h new file mode 100755 index 0000000000..740dc033be --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Private/RuntimeMeshUpdateCommands.h @@ -0,0 +1,69 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "Components/MeshComponent.h" + + + +struct FRuntimeMeshSectionVertexBufferParams +{ + TArray Data; + int32 NumVertices; +}; +struct FRuntimeMeshSectionTangentVertexBufferParams : public FRuntimeMeshSectionVertexBufferParams +{ + bool bUsingHighPrecision; +}; +struct FRuntimeMeshSectionUVVertexBufferParams : public FRuntimeMeshSectionVertexBufferParams +{ + bool bUsingHighPrecision; + int32 NumUVs; +}; + +struct FRuntimeMeshSectionIndexBufferParams +{ + bool b32BitIndices; + TArray Data; + int32 NumIndices; +}; + +struct FRuntimeMeshSectionCreationParams +{ + EUpdateFrequency UpdateFrequency; + + FRuntimeMeshSectionVertexBufferParams PositionVertexBuffer; + FRuntimeMeshSectionTangentVertexBufferParams TangentsVertexBuffer; + FRuntimeMeshSectionUVVertexBufferParams UVsVertexBuffer; + FRuntimeMeshSectionVertexBufferParams ColorVertexBuffer; + + FRuntimeMeshSectionIndexBufferParams IndexBuffer; + FRuntimeMeshSectionIndexBufferParams AdjacencyIndexBuffer; + + bool bIsVisible; + bool bCastsShadow; +}; +using FRuntimeMeshSectionCreationParamsPtr = TSharedPtr; + +struct FRuntimeMeshSectionUpdateParams +{ + ERuntimeMeshBuffersToUpdate BuffersToUpdate; + + FRuntimeMeshSectionVertexBufferParams PositionVertexBuffer; + FRuntimeMeshSectionTangentVertexBufferParams TangentsVertexBuffer; + FRuntimeMeshSectionUVVertexBufferParams UVsVertexBuffer; + FRuntimeMeshSectionVertexBufferParams ColorVertexBuffer; + + FRuntimeMeshSectionIndexBufferParams IndexBuffer; + FRuntimeMeshSectionIndexBufferParams AdjacencyIndexBuffer; +}; +using FRuntimeMeshSectionUpdateParamsPtr = TSharedPtr; + +struct FRuntimeMeshSectionPropertyUpdateParams +{ + bool bIsVisible; + bool bCastsShadow; +}; +using FRuntimeMeshSectionPropertyUpdateParamsPtr = TSharedPtr; + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMesh.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMesh.h new file mode 100755 index 0000000000..9c6b55cbcd --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMesh.h @@ -0,0 +1,907 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshSection.h" +#include "RuntimeMeshData.h" +#include "RuntimeMeshBlueprint.h" +#include "RuntimeMeshCollision.h" +#include "RuntimeMesh.generated.h" + +class UBodySetup; +class URuntimeMesh; +class URuntimeMeshComponent; + + + + +/* +* This tick function is used to drive the collision cooker. +* It is enabled for one frame when we need to update collision. +* This keeps from cooking on each individual create/update section as the original PMC did +*/ +struct FRuntimeMeshCollisionCookTickObject : FTickableGameObject +{ + TWeakObjectPtr Owner; + + FRuntimeMeshCollisionCookTickObject(TWeakObjectPtr InOwner) : Owner(InOwner) {} + virtual void Tick(float DeltaTime); + virtual bool IsTickable() const; + virtual bool IsTickableInEditor() const { return false; } + virtual TStatId GetStatId() const; + + virtual UWorld* GetTickableGameObjectWorld() const; +}; + + +/** +* Delegate for when the collision was updated. +*/ +DECLARE_DYNAMIC_MULTICAST_DELEGATE(FRuntimeMeshCollisionUpdatedDelegate); + + +UCLASS(HideCategories = Object, BlueprintType) +class RUNTIMEMESHCOMPONENT_API URuntimeMesh : public UObject, public IInterface_CollisionDataProvider/*, public IInterface_AssetUserData*/ +{ + GENERATED_UCLASS_BODY() + +private: + /** Reference to the underlying data object */ + FRuntimeMeshDataRef Data; + + /** Materials for this Runtime Mesh */ + UPROPERTY(EditAnywhere, Category = "RuntimeMesh") + TArray Materials; + + + /** Do we need to update our collision? */ + bool bCollisionIsDirty; + + /** Object used to tick the collision cooking at the end of the frame */ + TUniquePtr CookTickObject; + + /** All RuntimeMeshComponents linked to this mesh. Used to alert the components of changes */ + TArray> LinkedComponents; + + /** + * Controls whether the complex (Per poly) geometry should be treated as 'simple' collision. + * Should be set to false if this component is going to be given simple collision and simulated. + */ + UPROPERTY(EditAnywhere, Category = "RuntimeMesh") + bool bUseComplexAsSimpleCollision; + + /** + * Controls whether the physics cooking is done in parallel. This will increase throughput in + * multiple RMC scenarios, and keep from blocking the game thread, but when the collision becomes queryable + * is non-deterministic. See callback event for notification on collision updated. + */ + UPROPERTY(EditAnywhere, Category = "RuntimeMesh") + bool bUseAsyncCooking; + + /** + * Controls whether the mesh data should be serialized with the component. + */ + UPROPERTY(EditAnywhere, Category = "RuntimeMesh") + bool bShouldSerializeMeshData; + + /** Collision cooking configuration. Prefer runtime performance or cooktime speed */ + UPROPERTY(EditAnywhere, Category = "RuntimeMesh") + ERuntimeMeshCollisionCookingMode CollisionMode; + + /** Collision data */ + UPROPERTY(Instanced) + UBodySetup* BodySetup; + + /** Queue of pending collision cooks */ + UPROPERTY(Transient) + TArray AsyncBodySetupQueue; + +public: + + bool HasSerializedMeshData() + { + return bShouldSerializeMeshData; + } + + /** Event called when the collision has finished updated, this works both with standard following frame synchronous updates, as well as async updates */ + UPROPERTY(BlueprintAssignable, Category = "Components|RuntimeMesh") + FRuntimeMeshCollisionUpdatedDelegate CollisionUpdated; + + /** Gets the internal mesh data */ + FRuntimeMeshDataRef GetRuntimeMeshData() const + { + //check(IsInGameThread()); + return Data; + } + + FRuntimeMeshProxyPtr GetRuntimeMeshRenderProxy() const + { + check(IsInGameThread()); + return Data->GetRenderProxy(); + } + +public: + + void CreateMeshSection(int32 SectionIndex, bool bWantsHighPrecisionTangents, bool bWantsHighPrecisionUVs, int32 NumUVs, bool bWants32BitIndices, bool bCreateCollision, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bWants32BitIndices, bCreateCollision, UpdateFrequency); + } + + template + FORCEINLINE void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionIndex, InVertices0, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionIndex, InVertices0, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionDualBuffer(SectionIndex, InVertices0, + InVertices1, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionDualBuffer(SectionIndex, InVertices0, + InVertices1, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionTripleBuffer(SectionIndex, + InVertices0, InVertices1, InVertices2, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + const FBox& BoundingBox, bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionTripleBuffer(SectionIndex, + InVertices0, InVertices1, InVertices2, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionId, InVertices0, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionId, InVertices0, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionId, InVertices0, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionId, InVertices0, InTriangles, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, InTriangles, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, InTriangles, BoundingBox, UpdateFlags); + } + + + + template + FORCEINLINE void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionPrimaryBuffer(SectionId, InVertices0, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionPrimaryBuffer(SectionId, InVertices0, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionSecondaryBuffer(int32 SectionId, TArray& InVertices1, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionSecondaryBuffer(SectionId, InVertices1, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTertiaryBuffer(int32 SectionId, TArray& InVertices2, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTertiaryBuffer(SectionId, InVertices2, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTriangles(int32 SectionId, TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionTriangles(SectionId, InTriangles, UpdateFlags); + } + + + + FORCEINLINE void CreateMeshSection(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionId, MeshData, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + FORCEINLINE void CreateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionByMove(SectionId, MeshData, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + + + FORCEINLINE void UpdateMeshSection(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionId, MeshData, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionByMove(SectionId, MeshData, UpdateFlags); + } + + + TUniquePtr BeginSectionUpdate(int32 SectionId, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->BeginSectionUpdate(SectionId, UpdateFlags); + } + + TUniquePtr GetSectionReadonly(int32 SectionId) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->GetSectionReadonly(SectionId); + } + + + + + FORCEINLINE void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, Colors, Tangents, + bCreateCollision, UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + FORCEINLINE void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, Colors, Tangents, + bCreateCollision, UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionIndex, Vertices, Normals, UV0, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionIndex, Vertices, Normals, UV0, UV1, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, Colors, Tangents, UpdateFlags); + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Create Mesh Section", AutoCreateRefTerm = "Normals,Tangents,UV0,UV1,Colors")) + void CreateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSection_Blueprint(SectionIndex, Vertices, Triangles, Normals, Tangents, UV0, UV1, Colors, + bCreateCollision, bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles, UpdateFrequency, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Update Mesh Section", AutoCreateRefTerm = "Triangles,Normals,Tangents,UV0,UV1,Colors")) + void UpdateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSection_Blueprint(SectionIndex, Vertices, Triangles, Normals, Tangents, UV0, UV1, Colors, + bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Create Mesh Section Packed", AutoCreateRefTerm = "Normals,Tangents,UV0,UV1,Colors")) + void CreateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + check(IsInGameThread()); + GetRuntimeMeshData()->CreateMeshSectionPacked_Blueprint(SectionIndex, Vertices, Triangles, bCreateCollision, bCalculateNormalTangent, bShouldCreateHardTangents, + bGenerateTessellationTriangles, UpdateFrequency, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Update Mesh Section Packed", AutoCreateRefTerm = "Triangles,Normals,Tangents,UV0,UV1,Colors")) + void UpdateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false) + { + check(IsInGameThread()); + GetRuntimeMeshData()->UpdateMeshSectionPacked_Blueprint(SectionIndex, Vertices, Triangles, bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles); + } + + + + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetSectionTessellationTriangles(int32 SectionId, const TArray& Triangles) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetSectionTessellationTriangles(SectionId, Triangles); + } + + template + void SetSectionTessellationTriangles(int32 SectionId, const TArray& Triangles) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetSectionTessellationTriangles(SectionId, Triangles); + } + + + + /** Clear a section of the procedural mesh. */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearMeshSection(int32 SectionIndex) + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearMeshSection(SectionIndex); + } + + /** Clear all mesh sections and reset to empty state */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllMeshSections() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearAllMeshSections(); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetSectionMaterial(int32 SectionId, UMaterialInterface* Material) + { + check(IsInGameThread()); + if (SectionId >= Materials.Num()) + { + Materials.SetNum(SectionId + 1); + } + + Materials[SectionId] = Material; + + if (DoesSectionExist(SectionId)) + { + ForceProxyRecreate(); + } + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + UMaterialInterface* GetSectionMaterial(int32 SectionId) + { + check(IsInGameThread()); + if (Materials.IsValidIndex(SectionId)) + { + return Materials[SectionId]; + } + return nullptr; + } + + TArray GetMaterials() + { + check(IsInGameThread()); + return Materials; + } + + /** Gets the bounding box of a specific section */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + FBox GetSectionBoundingBox(int32 SectionIndex) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->GetSectionBoundingBox(SectionIndex); + } + + /** Control visibility of a particular section */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionVisible(int32 SectionIndex, bool bNewVisibility) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetMeshSectionVisible(SectionIndex, bNewVisibility); + } + + /** Returns whether a particular section is currently visible */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionVisible(int32 SectionIndex) const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->IsMeshSectionVisible(SectionIndex); + } + + + /** Control whether a particular section casts a shadow */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionCastsShadow(int32 SectionIndex, bool bNewCastsShadow) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetMeshSectionCastsShadow(SectionIndex, bNewCastsShadow); + } + + /** Returns whether a particular section is currently casting shadows */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionCastingShadows(int32 SectionIndex) const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->IsMeshSectionCastingShadows(SectionIndex); + } + + + /** Control whether a particular section has collision */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionCollisionEnabled(int32 SectionIndex, bool bNewCollisionEnabled) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetMeshSectionCollisionEnabled(SectionIndex, bNewCollisionEnabled); + } + + /** Returns whether a particular section has collision */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionCollisionEnabled(int32 SectionIndex) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->IsMeshSectionCollisionEnabled(SectionIndex); + } + + + /** Returns number of sections currently created for this component */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 GetNumSections() const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->GetNumSections(); + } + + /** Returns whether a particular section currently exists */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool DoesSectionExist(int32 SectionIndex) const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->DoesSectionExist(SectionIndex); + } + + /** Returns first available section index */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 GetAvailableSectionIndex() const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->GetAvailableSectionIndex(); + } + + TArray GetSectionIds() const + { + check(IsInGameThread()); + return GetRuntimeMeshData()->GetSectionIds(); + } + + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshCollisionSection(int32 CollisionSectionIndex, const TArray& Vertices, const TArray& Triangles) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetMeshCollisionSection(CollisionSectionIndex, Vertices, Triangles); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearMeshCollisionSection(int32 CollisionSectionIndex) + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearMeshCollisionSection(CollisionSectionIndex); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllMeshCollisionSections() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearAllMeshCollisionSections(); + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddConvexCollisionSection(TArray ConvexVerts) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->AddConvexCollisionSection(ConvexVerts); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetConvexCollisionSection(int32 ConvexSectionIndex, TArray ConvexVerts) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetConvexCollisionSection(ConvexSectionIndex, ConvexVerts); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearConvexCollisionSection(int32 ConvexSectionIndex) + { + check(IsInGameThread()); + GetRuntimeMeshData()->RemoveConvexCollisionSection(ConvexSectionIndex); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllConvexCollisionSections() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearConvexCollisionSections(); + } + + void SetCollisionConvexMeshes(const TArray>& ConvexMeshes) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetCollisionConvexMeshes(ConvexMeshes); + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionBox(const FRuntimeMeshCollisionBox& NewBox) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->AddCollisionBox(NewBox); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionBox(int32 Index) + { + check(IsInGameThread()); + GetRuntimeMeshData()->RemoveCollisionBox(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionBoxes() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearCollisionBoxes(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionBoxes(const TArray& NewBoxes) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetCollisionBoxes(NewBoxes); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionSphere(const FRuntimeMeshCollisionSphere& NewSphere) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->AddCollisionSphere(NewSphere); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionSphere(int32 Index) + { + check(IsInGameThread()); + GetRuntimeMeshData()->RemoveCollisionSphere(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionSpheres() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearCollisionSpheres(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionSpheres(const TArray& NewSpheres) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetCollisionSpheres(NewSpheres); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionCapsule(const FRuntimeMeshCollisionCapsule& NewCapsule) + { + check(IsInGameThread()); + return GetRuntimeMeshData()->AddCollisionCapsule(NewCapsule); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionCapsule(int32 Index) + { + check(IsInGameThread()); + GetRuntimeMeshData()->RemoveCollisionCapsule(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionCapsules() + { + check(IsInGameThread()); + GetRuntimeMeshData()->ClearCollisionCapsules(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionCapsules(const TArray& NewCapsules) + { + check(IsInGameThread()); + GetRuntimeMeshData()->SetCollisionCapsules(NewCapsules); + } + + + /** Runs any pending collision cook (Not required to call this. This is only if you need to make sure all changes are cooked before doing something)*/ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void CookCollisionNow(); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionUseComplexAsSimple(bool bNewValue) + { + check(IsInGameThread()); + bUseComplexAsSimpleCollision = bNewValue; + MarkCollisionDirty(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsCollisionUsingComplexAsSimple() + { + check(IsInGameThread()); + return bUseComplexAsSimpleCollision; + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionUseAsyncCooking(bool bNewValue) + { + check(IsInGameThread()); + bUseAsyncCooking = bNewValue; + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionMode(ERuntimeMeshCollisionCookingMode NewMode) + { + check(IsInGameThread()); + CollisionMode = NewMode; + } + + FBoxSphereBounds GetLocalBounds() const + { + //check(IsInGameThread()); + return GetRuntimeMeshData()->GetLocalBounds(); + } + + UBodySetup* GetBodySetup() + { + check(IsInGameThread()); + return BodySetup; + } + +private: + + void Initialize() { GetRuntimeMeshData()->Initialize(); } + virtual void MarkChanged() + { +#if WITH_EDITOR + Modify(true); + PostEditChange(); +#endif + } + + void RegisterLinkedComponent(URuntimeMeshComponent* NewComponent); + void UnRegisterLinkedComponent(URuntimeMeshComponent* ComponentToRemove); + + template + void DoForAllLinkedComponents(Function Func) + { + bool bShouldPurge = false; + for (TWeakObjectPtr MeshReference : LinkedComponents) + { + if (URuntimeMeshComponent* Mesh = MeshReference.Get()) + { + Func(Mesh); + } + else + { + bShouldPurge = true; + } + } + if (bShouldPurge) + { + LinkedComponents = LinkedComponents.FilterByPredicate([](const TWeakObjectPtr& MeshReference) + { + return MeshReference.IsValid(); + }); + } + } + + + void GetUsedMaterials(TArray& OutMaterials) const + { + OutMaterials.Append(Materials.FilterByPredicate([](UMaterialInterface* Mat) -> bool { return Mat != nullptr; })); + } + + + + //~ Begin Interface_CollisionDataProvider Interface + virtual bool GetPhysicsTriMeshData(struct FTriMeshCollisionData* CollisionData, bool InUseAllTriData) override; + virtual bool ContainsPhysicsTriMeshData(bool InUseAllTriData) const override; + virtual bool WantsNegXTriMesh() override { return false; } + //~ End Interface_CollisionDataProvider Interface + + virtual void Serialize(FArchive& Ar) override; + void PostLoad(); + + UMaterialInterface* GetMaterialFromCollisionFaceIndex(int32 FaceIndex, int32& SectionIndex) const; + + + /** Triggers a rebuild of the collision data on the next tick */ + void MarkCollisionDirty(); + /** Helper to create new body setup objects */ + UBodySetup* CreateNewBodySetup(); + /** Ensure ProcMeshBodySetup is allocated and configured */ + void EnsureBodySetupCreated(); + /** Copies the convex element geometry to a supplied body setup */ + void CopyCollisionElementsToBodySetup(UBodySetup* Setup); + /** Sets all basic configuration on body setup */ + void SetBasicBodySetupParameters(UBodySetup* Setup); + /** Mark collision data as dirty, and re-create on instance if necessary */ + void UpdateCollision(bool bForceCookNow = false); + /** Once async physics cook is done, create needed state, and then call the user event */ + void FinishPhysicsAsyncCook(UBodySetup* FinishedBodySetup); + /** Runs all post cook tasks like alerting the user event and alerting linked components */ + void FinalizeNewCookedData(); + + + FRuntimeMeshProxyPtr EnsureProxyCreated(ERHIFeatureLevel::Type InFeatureLevel) + { + return GetRuntimeMeshData()->EnsureProxyCreated(InFeatureLevel); + } + + + void UpdateLocalBounds(); + + void ForceProxyRecreate(); + + void SendSectionCreation(int32 SectionIndex); + + void SendSectionPropertiesUpdate(int32 SectionIndex); + + + friend class FRuntimeMeshData; + friend class URuntimeMeshComponent; + friend class FRuntimeMeshComponentSceneProxy; + friend struct FRuntimeMeshCollisionCookTickObject; +}; + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshActor.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshActor.h new file mode 100755 index 0000000000..68a351f9bd --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshActor.h @@ -0,0 +1,48 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "RuntimeMeshActor.generated.h" + +UCLASS(HideCategories = (Input), ShowCategories = ("Input|MouseInput", "Input|TouchInput"), ComponentWrapperClass, Meta = (ChildCanTick)) +class RUNTIMEMESHCOMPONENT_API ARuntimeMeshActor : public AActor +{ + GENERATED_UCLASS_BODY() + +private: + UPROPERTY(Category = "RuntimeMeshActor", VisibleAnywhere, BlueprintReadOnly, Meta = (ExposeFunctionCategories = "Mesh,Rendering,Physics,Components|RuntimeMesh", AllowPrivateAccess = "true")) + class URuntimeMeshComponent* RuntimeMeshComponent; + + UPROPERTY(Category = "RuntimeMeshActor", EditAnywhere, Meta = (AllowPrivateAccess = "true")) + bool bRunGenerateMeshesOnConstruction; + + UPROPERTY(Category = "RuntimeMeshActor", EditAnywhere, Meta = (AllowPrivateAccess = "true")) + bool bRunGenerateMeshesOnBeginPlay; + + UFUNCTION(BlueprintCallable, Category = "RuntimeMeshActor", Meta = (AllowPrivateAccess = "true", DisplayName = "Get Mobility")) + ERuntimeMeshMobility GetRuntimeMeshMobility(); + + UFUNCTION(BlueprintCallable, Category = "RuntimeMeshActor", Meta = (AllowPrivateAccess = "true", DisplayName = "Set Mobility")) + void SetRuntimeMeshMobility(ERuntimeMeshMobility NewMobility); + +public: + + /** Function to change mobility type */ + void SetMobility(EComponentMobility::Type InMobility); + + EComponentMobility::Type GetMobility(); + + /** Returns RuntimeMeshComponent subobject **/ + class URuntimeMeshComponent* GetRuntimeMeshComponent() const { return RuntimeMeshComponent; } + + + virtual void OnConstruction(const FTransform& Transform) override; + + virtual void BeginPlay() override; + + UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = "RuntimeMeshActor") + void GenerateMeshes(); + +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBlueprint.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBlueprint.h new file mode 100755 index 0000000000..b83d05bb19 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBlueprint.h @@ -0,0 +1,56 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshBlueprint.generated.h" + +/** + * + */ +USTRUCT(BlueprintType) +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshBlueprintVertexSimple +{ +public: + GENERATED_BODY() + + /** Vertex position */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vertex) + FVector Position; + + /** Vertex normal */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vertex) + FVector Normal; + + /** Vertex tangent */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vertex) + FRuntimeMeshTangent Tangent; + + /** Vertex color */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vertex) + FLinearColor Color; + + /** Vertex texture co-ordinate */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vertex) + FVector2D UV0; + + + FRuntimeMeshBlueprintVertexSimple() + : Position(0.0f, 0.0f, 0.0f) + , Normal(0.0f, 0.0f, 1.0f) + , Tangent(FVector(1.0f, 0.0f, 0.0f), false) + , Color(255, 255, 255) + , UV0(0.0f, 0.0f) + { + } + + FRuntimeMeshBlueprintVertexSimple(const FVector& InPosition, const FVector& InNormal, const FRuntimeMeshTangent& InTangent, const FVector2D& InUV0, FLinearColor InColor = FLinearColor::White) + : Position(InPosition) + , Normal(InNormal) + , Tangent(InTangent) + , Color(InColor) + , UV0(InUV0) + { + } +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBuilder.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBuilder.h new file mode 100755 index 0000000000..41f83c79d3 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshBuilder.h @@ -0,0 +1,500 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshGenericVertex.h" + +class FRuntimeMeshData; +using FRuntimeMeshDataPtr = TSharedPtr; +class FRuntimeMeshSection; +using FRuntimeMeshSectionPtr = TSharedPtr; + + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshAccessorVertex +{ + FVector Position; + FVector4 Normal; + FVector Tangent; + FColor Color; + + TArray> UVs; +}; + +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshVerticesAccessor +{ + bool bIsInitialized; + bool bIsReadonly; + TArray* PositionStream; + static const int32 PositionStride = 12; + TArray* TangentStream; + const bool bTangentHighPrecision; + const int32 TangentSize; + const int32 TangentStride; + TArray* UVStream; + const bool bUVHighPrecision; + const int32 UVChannelCount; + const int32 UVSize; + const int32 UVStride; + TArray* ColorStream; + static const int32 ColorStride = 4; + +public: + + FRuntimeMeshVerticesAccessor(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, + TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, bool bInIsReadonly = false); + virtual ~FRuntimeMeshVerticesAccessor(); + +protected: + FRuntimeMeshVerticesAccessor(TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, bool bInIsReadonly); + + void Initialize(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount); + +public: + const bool IsUsingHighPrecisionTangents() const { return bTangentHighPrecision; } + const bool IsUsingHighPrecisionUVs() const { return bUVHighPrecision; } + + const bool IsReadonly() const { return bIsReadonly; } + + int32 NumVertices() const; + int32 NumUVChannels() const; + + void EmptyVertices(int32 Slack = 0); + void SetNumVertices(int32 NewNum); + + int32 AddVertex(FVector InPosition); + + FVector GetPosition(int32 Index) const; + FVector4 GetNormal(int32 Index) const; + FVector GetTangent(int32 Index) const; + FColor GetColor(int32 Index) const; + FVector2D GetUV(int32 Index, int32 Channel = 0) const; + + + void SetPosition(int32 Index, FVector Value); + void SetNormal(int32 Index, const FVector4& Value); + void SetTangent(int32 Index, FVector Value); + void SetTangent(int32 Index, FRuntimeMeshTangent Value); + void SetColor(int32 Index, FColor Value); + void SetUV(int32 Index, FVector2D Value); + void SetUV(int32 Index, int32 Channel, FVector2D Value); + + void SetNormalTangent(int32 Index, FVector Normal, FRuntimeMeshTangent Tangent); + void SetTangents(int32 Index, FVector TangentX, FVector TangentY, FVector TangentZ); + + FRuntimeMeshAccessorVertex GetVertex(int32 Index) const; + void SetVertex(int32 Index, const FRuntimeMeshAccessorVertex& Vertex); + int32 AddVertex(const FRuntimeMeshAccessorVertex& Vertex); + + +private: + + template + FVector4 ConvertPackedToNormal(const Type& Input) + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return Input.ToFVector4(); +#else + return Input; +#endif + } + + template + FVector ConvertPackedToTangent(const Type& Input) + { +#if ENGINE_MAJOR_VERSION >= 4 && ENGINE_MINOR_VERSION >= 20 + return Input.ToFVector(); +#else + return Input; +#endif + } + + template + typename TEnableIf::HasPosition>::Type + SetPositionValue(int32 Index, const Type& Vertex) + { + SetPosition(Index, Vertex.Position); + } + + template + typename TEnableIf::HasPosition>::Type + SetPositionValue(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasNormal>::Type + SetNormalValue(int32 Index, const Type& Vertex) + { + SetNormal(Index, ConvertPackedToNormal(Vertex.Normal)); + } + + template + typename TEnableIf::HasNormal>::Type + SetNormalValue(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasTangent>::Type + SetTangentValue(int32 Index, const Type& Vertex) + { + SetTangent(Index, ConvertPackedToTangent(Vertex.Tangent)); + } + + template + typename TEnableIf::HasTangent>::Type + SetTangentValue(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasColor>::Type + SetColorValue(int32 Index, const Type& Vertex) + { + SetColor(Index, Vertex.Color); + } + + template + typename TEnableIf::HasColor>::Type + SetColorValue(int32 Index, const Type& Vertex) + { + } + + + + + template + typename TEnableIf::HasUV0>::Type + SetUV0Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 0, Vertex.UV0); + } + + template + typename TEnableIf::HasUV0>::Type + SetUV0Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV1>::Type + SetUV1Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 1, Vertex.UV1); + } + + template + typename TEnableIf::HasUV1>::Type + SetUV1Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV2>::Type + SetUV2Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 2, Vertex.UV2); + } + + template + typename TEnableIf::HasUV2>::Type + SetUV2Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV3>::Type + SetUV3Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 3, Vertex.UV3); + } + + template + typename TEnableIf::HasUV3>::Type + SetUV3Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV4>::Type + SetUV4Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 4, Vertex.UV4); + } + + template + typename TEnableIf::HasUV4>::Type + SetUV4Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV5>::Type + SetUV5Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 5, Vertex.UV5); + } + + template + typename TEnableIf::HasUV5>::Type + SetUV5Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV6>::Type + SetUV6Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 6, Vertex.UV6); + } + + template + typename TEnableIf::HasUV6>::Type + SetUV6Value(int32 Index, const Type& Vertex) + { + } + + template + typename TEnableIf::HasUV7>::Type + SetUV7Value(int32 Index, const Type& Vertex) + { + SetUV(Index, 7, Vertex.UV7); + } + + template + typename TEnableIf::HasUV7>::Type + SetUV7Value(int32 Index, const Type& Vertex) + { + } + + + + +public: + // Helper for setting vertex properties from the old style packed vertices like the generic vertex + template + void SetVertexProperties(int32 Index, const VertexType& Vertex) + { + SetPositionValue(Index, Vertex); + SetNormalValue(Index, Vertex); + SetTangentValue(Index, Vertex); + SetColorValue(Index, Vertex); + + SetUV0Value(Index, Vertex); + SetUV1Value(Index, Vertex); + SetUV2Value(Index, Vertex); + SetUV3Value(Index, Vertex); + SetUV4Value(Index, Vertex); + SetUV5Value(Index, Vertex); + SetUV6Value(Index, Vertex); + SetUV7Value(Index, Vertex); + } + + template + void AddVertexByProperties(const VertexType0& Vertex0) + { + int32 NewIndex = AddSingleVertex(); + SetVertexProperties(NewIndex, Vertex0); + } + + template + void AddVertexByProperties(const VertexType0& Vertex0, const VertexType1& Vertex1) + { + int32 NewIndex = AddSingleVertex(); + SetVertexProperties(NewIndex, Vertex0); + SetVertexProperties(NewIndex, Vertex1); + } + + template + void AddVertexByProperties(const VertexType0& Vertex0, const VertexType1& Vertex1, const VertexType2& Vertex2) + { + int32 NewIndex = AddSingleVertex(); + SetVertexProperties(NewIndex, Vertex0); + SetVertexProperties(NewIndex, Vertex1); + SetVertexProperties(NewIndex, Vertex2); + } + + +protected: + + void Unlink() + { + bIsInitialized = false; + PositionStream = nullptr; + TangentStream = nullptr; + UVStream = nullptr; + ColorStream = nullptr; + } + + int32 AddSingleVertex(); + +}; + +// ISO C++ (IS 14.7.2/6) and Clang want template specializations to occur outside of the class scope +template<> +inline FVector4 FRuntimeMeshVerticesAccessor::ConvertPackedToNormal(const FVector4& Input) +{ + return Input; +} +template<> +inline FVector FRuntimeMeshVerticesAccessor::ConvertPackedToTangent(const FVector& Input) +{ + return Input; +} + +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshIndicesAccessor +{ + bool bIsInitialized; + bool bIsReadonly; + TArray* IndexStream; + bool b32BitIndices; + +public: + + FRuntimeMeshIndicesAccessor(bool bIn32BitIndices, TArray* IndexStreamData, bool bInIsReadonly = false); + virtual ~FRuntimeMeshIndicesAccessor(); + +protected: + FRuntimeMeshIndicesAccessor(TArray* IndexStreamData, bool bInIsReadonly); + + void Initialize(bool bIn32BitIndices); + +public: + bool IsUsing32BitIndices() const { return b32BitIndices; } + + const bool IsReadonly() const { return bIsReadonly; } + + + int32 NumIndices() const; + void EmptyIndices(int32 Slack = 0); + void SetNumIndices(int32 NewNum); + int32 AddIndex(int32 NewIndex); + int32 AddTriangle(int32 Index0, int32 Index1, int32 Index2); + + int32 GetIndex(int32 Index) const; + void SetIndex(int32 Index, int32 Value); + +protected: + + FORCEINLINE int32 GetIndexStride() const { return b32BitIndices ? sizeof(int32) : sizeof(uint16); } + + void Unlink() + { + bIsInitialized = false; + IndexStream = nullptr; + } +}; + + +/** +* +*/ +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshAccessor : public FRuntimeMeshVerticesAccessor, public FRuntimeMeshIndicesAccessor +{ + + +public: + + FRuntimeMeshAccessor(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices, TArray* PositionStreamData, + TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, bool bInIsReadonly = false); + virtual ~FRuntimeMeshAccessor() override; + +protected: + FRuntimeMeshAccessor(TArray* PositionStreamData, TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, bool bInIsReadonly); + + void Initialize(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices); + +public: + bool IsReadonly() const { return FRuntimeMeshVerticesAccessor::IsReadonly() || FRuntimeMeshIndicesAccessor::IsReadonly(); } + + void CopyTo(const TSharedPtr& Other, bool bClearDestination = false) const; + + void Unlink() + { + FRuntimeMeshVerticesAccessor::Unlink(); + FRuntimeMeshIndicesAccessor::Unlink(); + } + +}; + + +/** + * Generic mesh builder. Can work on any valid stream configuration. + * Wraps FRuntimeMeshAccessor to provide standalone operation for creating new mesh data. + */ +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshBuilder : public FRuntimeMeshAccessor +{ + TArray PositionStream; + TArray TangentStream; + TArray UVStream; + TArray ColorStream; + + TArray IndexStream; + +public: + FRuntimeMeshBuilder(bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices); + + virtual ~FRuntimeMeshBuilder() override; + + TArray& GetPositionStream() { return PositionStream; } + TArray& GetTangentStream() { return TangentStream; } + TArray& GetUVStream() { return UVStream; } + TArray& GetColorStream() { return ColorStream; } + TArray& GetIndexStream() { return IndexStream; } +}; + + +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshScopedUpdater : public FRuntimeMeshAccessor, private FRuntimeMeshScopeLock +{ + FRuntimeMeshDataPtr LinkedMeshData; + int32 SectionIndex; + ESectionUpdateFlags UpdateFlags; + +private: + FRuntimeMeshScopedUpdater(const FRuntimeMeshDataPtr& InLinkedMeshData, int32 InSectionIndex, ESectionUpdateFlags InUpdateFlags, bool bInTangentsHighPrecision, bool bInUVsHighPrecision, int32 bInUVCount, bool bIn32BitIndices, TArray* PositionStreamData, + TArray* TangentStreamData, TArray* UVStreamData, TArray* ColorStreamData, TArray* IndexStreamData, FRuntimeMeshLockProvider* InSyncObject, bool bIsReadonly); + +public: + ~FRuntimeMeshScopedUpdater(); + + void Commit(bool bNeedsPositionUpdate = true, bool bNeedsNormalTangentUpdate = true, bool bNeedsColorUpdate = true, bool bNeedsUVUpdate = true, bool bNeedsIndexUpdate = true); + void Commit(const FBox& BoundingBox, bool bNeedsPositionUpdate = true, bool bNeedsNormalTangentUpdate = true, bool bNeedsColorUpdate = true, bool bNeedsUVUpdate = true, bool bNeedsIndexUpdate = true); + void Cancel(); + + friend class FRuntimeMeshData; + friend class FRuntimeMeshSection; +}; + + + +template +FORCEINLINE TSharedRef MakeRuntimeMeshBuilder() +{ + bool bIsUsingHighPrecisionUVs; + int32 NumUVChannels; + GetUVVertexProperties(bIsUsingHighPrecisionUVs, NumUVChannels); + + return MakeShared(GetTangentIsHighPrecision(), bIsUsingHighPrecisionUVs, NumUVChannels, (bool)FRuntimeMeshIndexTraits::Is32Bit); +} + +FORCEINLINE TSharedRef MakeRuntimeMeshBuilder(bool bUsingHighPrecisionTangents, bool bUsingHighPrecisionUVs, int32 NumUVs, bool bUsing32BitIndices) +{ + return MakeShared(bUsingHighPrecisionTangents, bUsingHighPrecisionUVs, NumUVs, bUsing32BitIndices); +} + +FORCEINLINE TSharedRef MakeRuntimeMeshBuilder(const TSharedRef& StructureToCopy) +{ + return MakeShared(StructureToCopy->IsUsingHighPrecisionTangents(), StructureToCopy->IsUsingHighPrecisionUVs(), StructureToCopy->NumUVChannels(), StructureToCopy->IsUsing32BitIndices()); +} + +FORCEINLINE TSharedRef MakeRuntimeMeshBuilder(const TUniquePtr& StructureToCopy) +{ + return MakeShared(StructureToCopy->IsUsingHighPrecisionTangents(), StructureToCopy->IsUsingHighPrecisionUVs(), StructureToCopy->NumUVChannels(), StructureToCopy->IsUsing32BitIndices()); +} + +FORCEINLINE TSharedRef MakeRuntimeMeshBuilder(const FRuntimeMeshAccessor& StructureToCopy) +{ + return MakeShared(StructureToCopy.IsUsingHighPrecisionTangents(), StructureToCopy.IsUsingHighPrecisionUVs(), StructureToCopy.NumUVChannels(), StructureToCopy.IsUsing32BitIndices()); +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCollision.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCollision.h new file mode 100755 index 0000000000..ad6d99214f --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCollision.h @@ -0,0 +1,171 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "Components/MeshComponent.h" +#include "RuntimeMeshCollision.generated.h" + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshCollisionSection +{ + TArray VertexBuffer; + + TArray IndexBuffer; + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionSection& Section) + { + Ar << Section.VertexBuffer; + Ar << Section.IndexBuffer; + return Ar; + } +}; + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshCollisionConvexMesh +{ + TArray VertexBuffer; + FBox BoundingBox; + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionConvexMesh& Section) + { + Ar << Section.VertexBuffer; + Ar << Section.BoundingBox; + return Ar; + } +}; + + +USTRUCT(BlueprintType) +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshCollisionSphere +{ + GENERATED_USTRUCT_BODY() + + /** Position of the sphere's origin */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionSphere) + FVector Center; + + /** Radius of the sphere */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionSphere) + float Radius; + + FRuntimeMeshCollisionSphere() + : Center(FVector::ZeroVector) + , Radius(1) + { + + } + + FRuntimeMeshCollisionSphere(float r) + : Center(FVector::ZeroVector) + , Radius(r) + { + + } + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionSphere& Sphere) + { + Ar << Sphere.Center; + Ar << Sphere.Radius; + return Ar; + } +}; + + +USTRUCT(BlueprintType) +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshCollisionBox +{ + GENERATED_USTRUCT_BODY() + + /** Position of the box's origin */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionBox) + FVector Center; + + /** Rotation of the box */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionBox) + FRotator Rotation; + + /** Extents of the box */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionBox) + FVector Extents; + + + FRuntimeMeshCollisionBox() + : Center(FVector::ZeroVector) + , Rotation(FRotator::ZeroRotator) + , Extents(1, 1, 1) + { + + } + + FRuntimeMeshCollisionBox(float s) + : Center(FVector::ZeroVector) + , Rotation(FRotator::ZeroRotator) + , Extents(s, s, s) + { + + } + + FRuntimeMeshCollisionBox(float InX, float InY, float InZ) + : Center(FVector::ZeroVector) + , Rotation(FRotator::ZeroRotator) + , Extents(InX, InY, InZ) + + { + + } + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionBox& Box) + { + Ar << Box.Center; + Ar << Box.Rotation; + Ar << Box.Extents; + return Ar; + } +}; + +USTRUCT(BlueprintType) +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshCollisionCapsule +{ + GENERATED_USTRUCT_BODY() + + /** Position of the capsule's origin */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionCapsule) + FVector Center; + + /** Rotation of the capsule */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionCapsule) + FRotator Rotation; + + /** Radius of the capsule */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionCapsule) + float Radius; + + /** This is of line-segment ie. add Radius to both ends to find total length. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = RuntimeMeshCollisionCapsule) + float Length; + + FRuntimeMeshCollisionCapsule() + : Center(FVector::ZeroVector) + , Rotation(FRotator::ZeroRotator) + , Radius(1), Length(1) + + { + + } + + FRuntimeMeshCollisionCapsule(float InRadius, float InLength) + : Center(FVector::ZeroVector) + , Rotation(FRotator::ZeroRotator) + , Radius(InRadius), Length(InLength) + { + + } + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshCollisionCapsule& Capsule) + { + Ar << Capsule.Center; + Ar << Capsule.Rotation; + Ar << Capsule.Radius; + Ar << Capsule.Length; + return Ar; + } +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponent.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponent.h new file mode 100755 index 0000000000..3ff9470ddd --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponent.h @@ -0,0 +1,762 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Components/MeshComponent.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshSection.h" +#include "RuntimeMeshGenericVertex.h" +#include "PhysicsEngine/ConvexElem.h" +#include "RuntimeMesh.h" +#include "RuntimeMeshComponent.generated.h" + +/** +* Component that allows you to specify custom triangle mesh geometry for rendering and collision. +*/ +UCLASS(HideCategories = (Object, LOD), Meta = (BlueprintSpawnableComponent)) +class RUNTIMEMESHCOMPONENT_API URuntimeMeshComponent : public UMeshComponent +{ + GENERATED_BODY() + +private: + + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = RuntimeMesh, Meta = (AllowPrivateAccess = "true", DisplayName = "Runtime Mesh")) + URuntimeMesh* RuntimeMeshReference; + + void EnsureHasRuntimeMesh(); + + + + +public: + + URuntimeMeshComponent(const FObjectInitializer& ObjectInitializer); + + /** Clears the geometry for ALL collision only sections */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + FORCEINLINE URuntimeMesh* GetRuntimeMesh() const + { + return RuntimeMeshReference; + } + + /** Clears the geometry for ALL collision only sections */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + FORCEINLINE URuntimeMesh* GetOrCreateRuntimeMesh() + { + EnsureHasRuntimeMesh(); + + return RuntimeMeshReference; + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", Meta = (AllowPrivateAccess = "true", DisplayName = "Get Mobility")) + ERuntimeMeshMobility GetRuntimeMeshMobility() + { + return Mobility == EComponentMobility::Movable ? ERuntimeMeshMobility::Movable : + Mobility == EComponentMobility::Stationary ? ERuntimeMeshMobility::Stationary : ERuntimeMeshMobility::Static; + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", Meta = (AllowPrivateAccess = "true", DisplayName = "Set Mobility")) + void SetRuntimeMeshMobility(ERuntimeMeshMobility NewMobility) + { + Super::SetMobility( + NewMobility == ERuntimeMeshMobility::Movable ? EComponentMobility::Movable : + NewMobility == ERuntimeMeshMobility::Stationary ? EComponentMobility::Stationary : EComponentMobility::Static); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetRuntimeMesh(URuntimeMesh* NewMesh); + + + void CreateMeshSection(int32 SectionIndex, bool bWantsHighPrecisionTangents, bool bWantsHighPrecisionUVs, int32 NumUVs, bool bWants32BitIndices, bool bCreateCollision, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bWants32BitIndices, bCreateCollision, UpdateFrequency); + } + + template + FORCEINLINE void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionIndex, InVertices0, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionIndex, InVertices0, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionDualBuffer(SectionIndex, InVertices0, InVertices1, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionDualBuffer(SectionIndex, InVertices0, InVertices1, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionTripleBuffer(SectionIndex, InVertices0, InVertices1, InVertices2, InTriangles, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + template + FORCEINLINE void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + const FBox& BoundingBox, bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionTripleBuffer(SectionIndex, InVertices0, InVertices1, InVertices2, InTriangles, BoundingBox, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + + + + + + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionId, InVertices0, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionId, InVertices0, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionId, InVertices0, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionId, InVertices0, InTriangles, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionDualBuffer(SectionId, InVertices0, InVertices1, InTriangles, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, InTriangles, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTripleBuffer(SectionId, InVertices0, InVertices1, InVertices2, InTriangles, BoundingBox, UpdateFlags); + } + + + + + /** DEPRECATED! Use UpdateMeshSectionDualBuffer() instead. Updates the dual buffer mesh section */ + template + DEPRECATED(3.0, "UpdateMeshSection for dual buffer sections deprecated. Please use UpdateMeshSectionDualBuffer instead.") + void UpdateMeshSection(int32 SectionIndex, TArray& VertexPositions, TArray& VertexData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + UpdateMeshSectionDualBuffer(SectionIndex, VertexPositions, VertexData, UpdateFlags); + } + + /** DEPRECATED! Use UpdateMeshSectionDualBuffer() instead. Updates the dual buffer mesh section */ + template + DEPRECATED(3.0, "UpdateMeshSection for dual buffer sections deprecated. Please use UpdateMeshSectionDualBuffer instead.") + void UpdateMeshSection(int32 SectionIndex, TArray& VertexPositions, TArray& VertexData, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + UpdateMeshSectionDualBuffer(SectionIndex, VertexPositions, VertexData, BoundingBox, UpdateFlags); + } + + /** DEPRECATED! Use UpdateMeshSectionDualBuffer() instead. Updates the dual buffer mesh section */ + template + DEPRECATED(3.0, "UpdateMeshSection for dual buffer sections deprecated. Please use UpdateMeshSectionDualBuffer instead.") + void UpdateMeshSection(int32 SectionIndex, TArray& VertexPositions, TArray& VertexData, TArray& Triangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + UpdateMeshSectionDualBuffer(SectionIndex, VertexPositions, VertexData, Triangles, UpdateFlags); + } + + /** DEPRECATED! Use UpdateMeshSectionDualBuffer() instead. Updates the dual buffer mesh section */ + template + DEPRECATED(3.0, "UpdateMeshSection for dual buffer sections deprecated. Please use UpdateMeshSectionDualBuffer instead.") + void UpdateMeshSection(int32 SectionIndex, TArray& VertexPositions, TArray& VertexData, TArray& Triangles, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + UpdateMeshSectionDualBuffer(SectionIndex, VertexPositions, VertexData, Triangles, BoundingBox, UpdateFlags); + } + + + + + + template + FORCEINLINE void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionPrimaryBuffer(SectionId, InVertices0, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionPrimaryBuffer(SectionId, InVertices0, BoundingBox, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionSecondaryBuffer(int32 SectionId, TArray& InVertices1, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionSecondaryBuffer(SectionId, InVertices1, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTertiaryBuffer(int32 SectionId, TArray& InVertices2, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTertiaryBuffer(SectionId, InVertices2, UpdateFlags); + } + + template + FORCEINLINE void UpdateMeshSectionTriangles(int32 SectionId, TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionTriangles(SectionId, InTriangles, UpdateFlags); + } + + + + FORCEINLINE void CreateMeshSection(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionId, MeshData, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + FORCEINLINE void CreateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionByMove(SectionId, MeshData, bCreateCollision, UpdateFrequency, UpdateFlags); + } + + + + FORCEINLINE void UpdateMeshSection(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionId, MeshData, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionByMove(SectionId, MeshData, UpdateFlags); + } + + + TUniquePtr BeginSectionUpdate(int32 SectionId, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + check(IsInGameThread()); + return GetOrCreateRuntimeMesh()->BeginSectionUpdate(SectionId, UpdateFlags); + } + + TUniquePtr GetSectionReadonly(int32 SectionId) + { + check(IsInGameThread()); + return GetOrCreateRuntimeMesh()->GetSectionReadonly(SectionId); + } + + + + FORCEINLINE void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, Colors, Tangents, bCreateCollision, + UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + FORCEINLINE void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + GetOrCreateRuntimeMesh()->CreateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, Colors, Tangents, bCreateCollision, + UpdateFrequency, UpdateFlags, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionIndex, Vertices, Normals, UV0, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionIndex, Vertices, Normals, UV0, UV1, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, Colors, Tangents, UpdateFlags); + } + + FORCEINLINE void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection(SectionIndex, Vertices, Triangles, Normals, UV0, UV1, Colors, Tangents, UpdateFlags); + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Create Mesh Section", AutoCreateRefTerm = "Normals,Tangents,UV0,UV1,Colors")) + void CreateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + GetOrCreateRuntimeMesh()->CreateMeshSection_Blueprint(SectionIndex, Vertices, Triangles, Normals, Tangents, UV0, UV1, Colors, bCreateCollision, + bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles, UpdateFrequency, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Update Mesh Section", AutoCreateRefTerm = "Triangles,Normals,Tangents,UV0,UV1,Colors")) + void UpdateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false) + { + GetOrCreateRuntimeMesh()->UpdateMeshSection_Blueprint(SectionIndex, Vertices, Triangles, Normals, Tangents, UV0, UV1, Colors, bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Create Mesh Section Packed", AutoCreateRefTerm = "Normals,Tangents,UV0,UV1,Colors")) + void CreateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true) + { + GetOrCreateRuntimeMesh()->CreateMeshSectionPacked_Blueprint(SectionIndex, Vertices, Triangles, bCreateCollision, bCalculateNormalTangent, bShouldCreateHardTangents, + bGenerateTessellationTriangles, UpdateFrequency, bUseHighPrecisionTangents, bUseHighPrecisionUVs); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (DisplayName = "Update Mesh Section Packed", AutoCreateRefTerm = "Triangles,Normals,Tangents,UV0,UV1,Colors")) + void UpdateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false) + { + GetOrCreateRuntimeMesh()->UpdateMeshSectionPacked_Blueprint(SectionIndex, Vertices, Triangles, bCalculateNormalTangent, bShouldCreateHardTangents, bGenerateTessellationTriangles); + } + + + + + + + /** Clear a section of the procedural mesh. */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearMeshSection(int32 SectionIndex) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->ClearMeshSection(SectionIndex); + } + } + + /** Clear all mesh sections and reset to empty state */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllMeshSections() + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->ClearAllMeshSections(); + } + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetSectionMaterial(int32 SectionId, UMaterialInterface* Material) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->SetSectionMaterial(SectionId, Material); + } + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + UMaterialInterface* GetSectionMaterial(int32 SectionId) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->GetSectionMaterial(SectionId); + } + return nullptr; + } + + /** Gets the bounding box of a specific section */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + FBox GetSectionBoundingBox(int32 SectionIndex) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->GetSectionBoundingBox(SectionIndex); + } + return FBox(EForceInit::ForceInitToZero); + } + + /** Control visibility of a particular section */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionVisible(int32 SectionIndex, bool bNewVisibility) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->SetMeshSectionVisible(SectionIndex, bNewVisibility); + } + } + + /** Returns whether a particular section is currently visible */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionVisible(int32 SectionIndex) const + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->IsMeshSectionVisible(SectionIndex); + } + return false; + } + + + /** Control whether a particular section casts a shadow */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionCastsShadow(int32 SectionIndex, bool bNewCastsShadow) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->SetMeshSectionCastsShadow(SectionIndex, bNewCastsShadow); + } + } + + /** Returns whether a particular section is currently casting shadows */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionCastingShadows(int32 SectionIndex) const + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->IsMeshSectionCastingShadows(SectionIndex); + } + return false; + } + + + /** Control whether a particular section has collision */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshSectionCollisionEnabled(int32 SectionIndex, bool bNewCollisionEnabled) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + Mesh->SetMeshSectionCollisionEnabled(SectionIndex, bNewCollisionEnabled); + } + } + + /** Returns whether a particular section has collision */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsMeshSectionCollisionEnabled(int32 SectionIndex) + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->IsMeshSectionCollisionEnabled(SectionIndex); + } + return false; + } + + + /** Returns number of sections currently created for this component */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 GetNumSections() const + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->GetNumSections(); + } + return 0; + } + + /** Returns whether a particular section currently exists */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool DoesSectionExist(int32 SectionIndex) const + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->DoesSectionExist(SectionIndex); + } + return false; + } + + /** Returns first available section index */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 GetAvailableSectionIndex() const + { + if (URuntimeMesh* Mesh = GetRuntimeMesh()) + { + return Mesh->GetAvailableSectionIndex(); + } + return 0; + } + + + + + + + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetMeshCollisionSection(int32 CollisionSectionIndex, const TArray& Vertices, const TArray& Triangles) + { + GetOrCreateRuntimeMesh()->SetMeshCollisionSection(CollisionSectionIndex, Vertices, Triangles); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearMeshCollisionSection(int32 CollisionSectionIndex) + { + GetOrCreateRuntimeMesh()->ClearMeshCollisionSection(CollisionSectionIndex); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllMeshCollisionSections() + { + GetOrCreateRuntimeMesh()->ClearAllMeshCollisionSections(); + } + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddConvexCollisionSection(TArray ConvexVerts) + { + return GetOrCreateRuntimeMesh()->AddConvexCollisionSection(ConvexVerts); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetConvexCollisionSection(int32 ConvexSectionIndex, TArray ConvexVerts) + { + GetOrCreateRuntimeMesh()->SetConvexCollisionSection(ConvexSectionIndex, ConvexVerts); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearConvexCollisionSection(int32 ConvexSectionIndex) + { + GetOrCreateRuntimeMesh()->ClearConvexCollisionSection(ConvexSectionIndex); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearAllConvexCollisionSections() + { + GetOrCreateRuntimeMesh()->ClearAllConvexCollisionSections(); + } + + void SetCollisionConvexMeshes(const TArray>& ConvexMeshes) + { + GetOrCreateRuntimeMesh()->SetCollisionConvexMeshes(ConvexMeshes); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionBox(const FRuntimeMeshCollisionBox& NewBox) + { + return GetOrCreateRuntimeMesh()->AddCollisionBox(NewBox); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionBox(int32 Index) + { + GetOrCreateRuntimeMesh()->RemoveCollisionBox(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionBoxes() + { + GetOrCreateRuntimeMesh()->ClearCollisionBoxes(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionBoxes(const TArray& NewBoxes) + { + GetOrCreateRuntimeMesh()->SetCollisionBoxes(NewBoxes); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionSphere(const FRuntimeMeshCollisionSphere& NewSphere) + { + return GetOrCreateRuntimeMesh()->AddCollisionSphere(NewSphere); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionSphere(int32 Index) + { + GetOrCreateRuntimeMesh()->RemoveCollisionSphere(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionSpheres() + { + GetOrCreateRuntimeMesh()->ClearCollisionSpheres(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionSpheres(const TArray& NewSpheres) + { + GetOrCreateRuntimeMesh()->SetCollisionSpheres(NewSpheres); + } + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + int32 AddCollisionCapsule(const FRuntimeMeshCollisionCapsule& NewCapsule) + { + return GetOrCreateRuntimeMesh()->AddCollisionCapsule(NewCapsule); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void RemoveCollisionCapsule(int32 Index) + { + GetOrCreateRuntimeMesh()->RemoveCollisionCapsule(Index); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void ClearCollisionCapsules() + { + GetOrCreateRuntimeMesh()->ClearCollisionCapsules(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionCapsules(const TArray& NewCapsules) + { + GetOrCreateRuntimeMesh()->SetCollisionCapsules(NewCapsules); + } + + + /** Runs any pending collision cook (Not required to call this. This is only if you need to make sure all changes are cooked before doing something)*/ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void CookCollisionNow() + { + GetOrCreateRuntimeMesh()->CookCollisionNow(); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionUseComplexAsSimple(bool bNewValue) + { + GetOrCreateRuntimeMesh()->SetCollisionUseComplexAsSimple(bNewValue); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + bool IsCollisionUsingComplexAsSimple() + { + check(IsInGameThread()); + return GetRuntimeMesh() != nullptr ? GetRuntimeMesh()->IsCollisionUsingComplexAsSimple() : true; + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionUseAsyncCooking(bool bNewValue) + { + GetOrCreateRuntimeMesh()->SetCollisionUseAsyncCooking(bNewValue); + } + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + void SetCollisionMode(ERuntimeMeshCollisionCookingMode NewMode) + { + GetOrCreateRuntimeMesh()->SetCollisionMode(NewMode); + } + + +private: + + //~ Begin USceneComponent Interface. + virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override; + virtual bool IsSupportedForNetworking() const override + { + return true; + } + //~ Begin USceneComponent Interface. + + //~ Begin UPrimitiveComponent Interface. + virtual FPrimitiveSceneProxy* CreateSceneProxy() override; + virtual class UBodySetup* GetBodySetup() override; + virtual UMaterialInterface* GetMaterialFromCollisionFaceIndex(int32 FaceIndex, int32& SectionIndex) const override; + //~ End UPrimitiveComponent Interface. + + //~ Begin UMeshComponent Interface. + virtual int32 GetNumMaterials() const override; + virtual void GetUsedMaterials(TArray& OutMaterials, bool bGetDebugMaterials = false) const override; + virtual UMaterialInterface* GetMaterial(int32 ElementIndex) const override; + //~ End UMeshComponent Interface. + + + /* Serializes this component */ + virtual void Serialize(FArchive& Ar) override; + + + /* Does post load fixups */ + virtual void PostLoad() override; + + + + /** Called by URuntimeMesh any time it has new collision data that we should use */ + void NewCollisionMeshReceived(); + void NewBoundsReceived(); + void ForceProxyRecreate(); + + void SendSectionCreation(int32 SectionIndex); + void SendSectionPropertiesUpdate(int32 SectionIndex); + + + friend class URuntimeMesh; + friend class FRuntimeMeshComponentSceneProxy; + friend class FRuntimeMeshComponentLegacySerialization; +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponentPlugin.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponentPlugin.h new file mode 100755 index 0000000000..7435fb86b4 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshComponentPlugin.h @@ -0,0 +1,38 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "ModuleManager.h" + +/** +* The public interface to this module +*/ +class IRuntimeMeshComponentPlugin : public IModuleInterface +{ + +public: + + /** + * Singleton-like access to this module's interface. This is just for convenience! + * Beware of calling this during the shutdown phase, though. Your module might have been unloaded already. + * + * @return Returns singleton instance, loading the module on demand if needed + */ + static inline IRuntimeMeshComponentPlugin& Get() + { + return FModuleManager::LoadModuleChecked("RuntimeMeshComponent"); + } + + /** + * Checks to see if this module is loaded and ready. It is only valid to call Get() if IsAvailable() returns true. + * + * @return True if the module is loaded and ready to use + */ + static inline bool IsAvailable() + { + return FModuleManager::Get().IsModuleLoaded("RuntimeMeshComponent"); + } +}; + +DECLARE_LOG_CATEGORY_EXTERN(RuntimeMeshLog, Log, All); diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCore.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCore.h new file mode 100755 index 0000000000..85dcb39ea5 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshCore.h @@ -0,0 +1,617 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "Components/MeshComponent.h" +#include "Runtime/Launch/Resources/Version.h" +#include "Stats/Stats.h" +#include "CriticalSection.h" +#include "RuntimeMeshCore.generated.h" + +DECLARE_STATS_GROUP(TEXT("RuntimeMesh"), STATGROUP_RuntimeMesh, STATCAT_Advanced); + + +#define RUNTIMEMESH_MAXTEXCOORDS MAX_TEXCOORDS + + + +// Custom version for runtime mesh serialization +namespace FRuntimeMeshVersion +{ + enum Type + { + Initial = 0, + TemplatedVertexFix = 1, + SerializationOptional = 2, + DualVertexBuffer = 3, + SerializationV2 = 4, + + // This was a total overhaul of the component, and with it the serialization + RuntimeMeshComponentV3 = 5, + + // This was the 4.19 RHI upgrades requiring an internal restructure + RuntimeMeshComponentUE4_19 = 6, + + // ------------------------------------------------------ + VersionPlusOne, + LatestVersion = VersionPlusOne - 1 + }; + + // The GUID for this custom version + const static FGuid GUID = FGuid(0xEE48714B, 0x8A2C4652, 0x98BE40E6, 0xCB7EF0E6); +}; + + +class FRuntimeMeshVertexFactory; +struct FRuntimeMeshVertexStreamStructure; + + template + struct FRuntimeMeshIndexTraits + { + enum { IsValidIndexType = false }; + enum { Is32Bit = false }; + }; + + template<> + struct FRuntimeMeshIndexTraits + { + enum { IsValidIndexType = true }; + enum { Is32Bit = false }; + }; + + template<> + struct FRuntimeMeshIndexTraits + { + enum { IsValidIndexType = true }; + enum { Is32Bit = true }; + }; + + template<> + struct FRuntimeMeshIndexTraits + { + enum { IsValidIndexType = true }; + enum { Is32Bit = true }; + }; + + +enum class ERuntimeMeshBuffersToUpdate : uint8 +{ + None = 0x0, + PositionBuffer = 0x1, + TangentBuffer = 0x2, + UVBuffer = 0x4, + ColorBuffer = 0x8, + + AllVertexBuffers = PositionBuffer | TangentBuffer | UVBuffer | ColorBuffer, + + IndexBuffer = 0x10, + AdjacencyIndexBuffer = 0x20 +}; +ENUM_CLASS_FLAGS(ERuntimeMeshBuffersToUpdate); + +/* Mobility status for a RuntimeMeshComponent */ +UENUM(BlueprintType) +enum class ERuntimeMeshMobility : uint8 +{ + Movable, + Stationary, + Static +}; + +/* Update frequency for a section. Used to optimize for update or render speed*/ +UENUM(BlueprintType) +enum class EUpdateFrequency : uint8 +{ + /* Tries to skip recreating the scene proxy if possible. */ + Average UMETA(DisplayName = "Average"), + /* Tries to skip recreating the scene proxy if possible and optimizes the buffers for frequent updates. */ + Frequent UMETA(DisplayName = "Frequent"), + /* If the component is static it will try to use the static rendering path (this will force a recreate of the scene proxy) */ + Infrequent UMETA(DisplayName = "Infrequent") +}; + +/* Control flags for update actions */ +enum class ESectionUpdateFlags +{ + None = 0x0, + + // /** + // * This will use move-assignment when copying the supplied vertices/triangles into the section. + // * This is faster as it doesn't require copying the data. + // * + // * CAUTION: This means that your copy of the arrays will be cleared! + // */ + // MoveArrays = 0x1, + + /** + * Should the normals and tangents be calculated automatically? + * To do this manually see RuntimeMeshLibrary::CalculateTangentsForMesh() + * This version calculates smooth tangents, so it will smooth across vertices sharing position + */ + CalculateNormalTangent = 0x2, + + /** + * Should the normals and tangents be calculated automatically? + * To do this manually see RuntimeMeshLibrary::CalculateTangentsForMesh() + * This version calculates hard tangents, so it will not smooth across vertices sharing position + */ + CalculateNormalTangentHard = 0x4, + + /** + * Should the tessellation indices be calculated to support tessellation? + * To do this manually see RuntimeMeshLibrary::GenerateTessellationIndexBuffer() + */ + CalculateTessellationIndices = 0x8, + +}; +ENUM_CLASS_FLAGS(ESectionUpdateFlags) + +/* +* Configuration flag for the collision cooking to prioritize cooking speed or collision performance. +*/ +UENUM(BlueprintType) +enum class ERuntimeMeshCollisionCookingMode : uint8 +{ + /* + * Favors runtime collision performance of cooking speed. + * This means that cooking a new mesh will be slower, but collision will be faster. + */ + CollisionPerformance UMETA(DisplayName = "Collision Performance"), + + /* + * Favors cooking speed over collision performance. + * This means that cooking a new mesh will be faster, but collision will be slower. + */ + CookingPerformance UMETA(DisplayName = "Cooking Performance"), +}; + + + +/** +* Struct used to specify a tangent vector for a vertex +* The Y tangent is computed from the cross product of the vertex normal (Tangent Z) and the TangentX member. +*/ +USTRUCT(BlueprintType) +struct FRuntimeMeshTangent +{ + GENERATED_USTRUCT_BODY() + + /** Direction of X tangent for this vertex */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Tangent) + FVector TangentX; + + /** Bool that indicates whether we should flip the Y tangent when we compute it using cross product */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Tangent) + bool bFlipTangentY; + + FRuntimeMeshTangent() + : TangentX(1.f, 0.f, 0.f) + , bFlipTangentY(false) + {} + + FRuntimeMeshTangent(float X, float Y, float Z, bool bInFlipTangentY = false) + : TangentX(X, Y, Z) + , bFlipTangentY(bInFlipTangentY) + {} + + FRuntimeMeshTangent(FVector InTangentX, bool bInFlipTangentY = false) + : TangentX(InTangentX) + , bFlipTangentY(bInFlipTangentY) + {} + + void ModifyNormal(FVector4& Normal) const { Normal.W = bFlipTangentY ? -1 : 1; } + void ModifyNormal(FPackedNormal& Normal) const { Normal.Vector.W = bFlipTangentY ? 0 : MAX_uint8; } + void ModifyNormal(FPackedRGBA16N& Normal) const { Normal.W = bFlipTangentY ? 0 : MAX_uint16; } +}; + + + + + + + + + + + + + + + + + + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshVertexStreamStructureElement +{ + uint8 Offset; + uint8 Stride; + EVertexElementType Type; + + FRuntimeMeshVertexStreamStructureElement() : Offset(-1), Stride(-1), Type(EVertexElementType::VET_None) { } + FRuntimeMeshVertexStreamStructureElement(uint8 InOffset, uint8 InStride, EVertexElementType InType) + : Offset(InOffset), Stride(InStride), Type(InType) { } + + bool IsValid() const { return Offset >= 0 && Stride >= 0 && Type != EVertexElementType::VET_None; } + + bool operator==(const FRuntimeMeshVertexStreamStructureElement& Other) const; + + bool operator!=(const FRuntimeMeshVertexStreamStructureElement& Other) const; + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshVertexStreamStructureElement& Element) + { + Ar << Element.Offset; + Ar << Element.Stride; + + int32 TypeValue = static_cast(Element.Type); + Ar << TypeValue; + Element.Type = static_cast(TypeValue); + + return Ar; + } +}; + +#define RUNTIMEMESH_VERTEXSTREAMCOMPONENT(VertexType, Member, MemberType) \ + FRuntimeMeshVertexStreamStructureElement(STRUCT_OFFSET(VertexType,Member),sizeof(VertexType),MemberType) + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshVertexStreamStructure +{ + FRuntimeMeshVertexStreamStructureElement Position; + FRuntimeMeshVertexStreamStructureElement Normal; + FRuntimeMeshVertexStreamStructureElement Tangent; + FRuntimeMeshVertexStreamStructureElement Color; + TArray> UVs; + + bool operator==(const FRuntimeMeshVertexStreamStructure& Other) const; + + bool operator!=(const FRuntimeMeshVertexStreamStructure& Other) const; + + bool HasAnyElements() const; + + bool HasUVs() const; + + uint8 CalculateStride() const; + + bool IsValid() const; + + bool HasNoOverlap(const FRuntimeMeshVertexStreamStructure& Other) const; + + static bool ValidTripleStream(const FRuntimeMeshVertexStreamStructure& Stream1, const FRuntimeMeshVertexStreamStructure& Stream2, const FRuntimeMeshVertexStreamStructure& Stream3); + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshVertexStreamStructure& Structure) + { + Ar << Structure.Position; + Ar << Structure.Normal; + Ar << Structure.Tangent; + Ar << Structure.Color; + Ar << Structure.UVs; + + return Ar; + } +}; + + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshNullVertex +{ + static const FRuntimeMeshVertexStreamStructure GetVertexStructure() + { + return FRuntimeMeshVertexStreamStructure(); + } +}; + +template +inline FRuntimeMeshVertexStreamStructure GetStreamStructure() +{ + return VertexType::GetVertexStructure(); +} + +template<> +inline FRuntimeMeshVertexStreamStructure GetStreamStructure() +{ + FRuntimeMeshVertexStreamStructure Structure; + Structure.Position = FRuntimeMeshVertexStreamStructureElement(0, sizeof(FVector), VET_Float3); + return Structure; +} + +template<> +inline FRuntimeMeshVertexStreamStructure GetStreamStructure() +{ + FRuntimeMeshVertexStreamStructure Structure; + Structure.Color = FRuntimeMeshVertexStreamStructureElement(0, sizeof(FColor), VET_Color); + return Structure; +} + + + + + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshLockProvider +{ + virtual ~FRuntimeMeshLockProvider() { } + virtual void Lock(bool bIgnoreThreadIfNullLock = false) = 0; + virtual void Unlock() = 0; +}; + + + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshNullLockProvider : public FRuntimeMeshLockProvider +{ + FRuntimeMeshNullLockProvider() { check(IsInGameThread()); } + virtual ~FRuntimeMeshNullLockProvider() { } + virtual void Lock(bool bIgnoreThreadIfNullLock = false) override { check(IsInGameThread()); } + virtual void Unlock() override { check(IsInGameThread()); } +}; + +struct RUNTIMEMESHCOMPONENT_API FRuntimeMeshMutexLockProvider : public FRuntimeMeshLockProvider +{ +private: + FCriticalSection SyncObject; + +public: + + FRuntimeMeshMutexLockProvider() { check(IsInGameThread()); } + virtual ~FRuntimeMeshMutexLockProvider() { } + virtual void Lock(bool bIgnoreThreadIfNullLock = false) override { SyncObject.Lock(); } + virtual void Unlock() override { SyncObject.Unlock(); } +}; + + +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshScopeLock +{ + +private: + // Holds the synchronization object to aggregate and scope manage. + FRuntimeMeshLockProvider* SynchObject; + +public: + + /** + * Constructor that performs a lock on the synchronization object + * + * @param InSynchObject The synchronization object to manage + */ + FRuntimeMeshScopeLock(const FRuntimeMeshLockProvider* InSyncObject, bool bIsAlreadyLocked = false) + : SynchObject(const_cast(InSyncObject)) + { + check(SynchObject); + if (!bIsAlreadyLocked) + { + SynchObject->Lock(); + } + } + + FRuntimeMeshScopeLock(const TUniquePtr& InSyncObject, bool bIsAlreadyLocked = false) + : SynchObject(InSyncObject.Get()) + { + check(SynchObject); + if (!bIsAlreadyLocked) + { + SynchObject->Lock(); + } + } + + /** Destructor that performs a release on the synchronization object. */ + ~FRuntimeMeshScopeLock() + { + Unlock(); + } + + void Unlock() + { + if (SynchObject) + { + SynchObject->Unlock(); + SynchObject = nullptr; + } + } +private: + + /** Default constructor (hidden on purpose). */ + FRuntimeMeshScopeLock(); + + /** Copy constructor( hidden on purpose). */ + FRuntimeMeshScopeLock(const FRuntimeMeshScopeLock& InScopeLock); + + /** Assignment operator (hidden on purpose). */ + FRuntimeMeshScopeLock& operator=(FRuntimeMeshScopeLock& InScopeLock) + { + return *this; + } +}; + + + + +template +struct FRuntimeMeshVertexTraits +{ +private: + template struct ChT; + + struct FallbackPosition { FVector Position; }; + struct DerivedPosition : T, FallbackPosition { }; + template static char(&PositionCheck(ChT*))[1]; + template static char(&PositionCheck(...))[2]; + + struct FallbackNormal { FPackedRGBA16N Normal; }; + struct DerivedNormal : T, FallbackNormal { }; + template static char(&NormalCheck(ChT*))[1]; + template static char(&NormalCheck(...))[2]; + + struct FallbackTangent { FPackedRGBA16N Tangent; }; + struct DerivedTangent : T, FallbackTangent { }; + template static char(&TangentCheck(ChT*))[1]; + template static char(&TangentCheck(...))[2]; + + struct FallbackColor { FColor Color; }; + struct DerivedColor : T, FallbackColor { }; + template static char(&ColorCheck(ChT*))[1]; + template static char(&ColorCheck(...))[2]; + + struct FallbackUV0 { FVector2D UV0; }; + struct DerivedUV0 : T, FallbackUV0 { }; + template static char(&UV0Check(ChT*))[1]; + template static char(&UV0Check(...))[2]; + + struct FallbackUV1 { FVector2D UV1; }; + struct DerivedUV1 : T, FallbackUV1 { }; + template static char(&UV1Check(ChT*))[1]; + template static char(&UV1Check(...))[2]; + + struct FallbackUV2 { FVector2D UV2; }; + struct DerivedUV2 : T, FallbackUV2 { }; + template static char(&UV2Check(ChT*))[1]; + template static char(&UV2Check(...))[2]; + + struct FallbackUV3 { FVector2D UV3; }; + struct DerivedUV3 : T, FallbackUV3 { }; + template static char(&UV3Check(ChT*))[1]; + template static char(&UV3Check(...))[2]; + + struct FallbackUV4 { FVector2D UV4; }; + struct DerivedUV4 : T, FallbackUV4 { }; + template static char(&UV4Check(ChT*))[1]; + template static char(&UV4Check(...))[2]; + + struct FallbackUV5 { FVector2D UV5; }; + struct DerivedUV5 : T, FallbackUV5 { }; + template static char(&UV5Check(ChT*))[1]; + template static char(&UV5Check(...))[2]; + + struct FallbackUV6 { FVector2D UV6; }; + struct DerivedUV6 : T, FallbackUV6 { }; + template static char(&UV6Check(ChT*))[1]; + template static char(&UV6Check(...))[2]; + + struct FallbackUV7 { FVector2D UV7; }; + struct DerivedUV7 : T, FallbackUV7 { }; + template static char(&UV7Check(ChT*))[1]; + template static char(&UV7Check(...))[2]; + + template + struct IsSameType + { + static const bool Value = false; + }; + + template + struct IsSameType + { + static const bool Value = true; + }; + + template + struct TangentBasisHighPrecisionDetector + { + static const bool Value = false; + }; + + template + struct TangentBasisHighPrecisionDetector + { + static const bool Value = IsSameType().Normal), FPackedRGBA16N>::Value; + }; + + template + struct TangentBasisHighPrecisionDetector + { + static const bool Value = IsSameType().Tangent), FPackedRGBA16N>::Value; + }; + + template + struct UVChannelHighPrecisionDetector + { + static const bool Value = false; + }; + + template + struct UVChannelHighPrecisionDetector + { + static const bool Value = IsSameType().UV0), FVector2D>::Value; + }; + + +public: + static const bool HasPosition = sizeof(PositionCheck(0)) == 2; + static const bool HasNormal = sizeof(NormalCheck(0)) == 2; + static const bool HasTangent = sizeof(TangentCheck(0)) == 2; + static const bool HasColor = sizeof(ColorCheck(0)) == 2; + static const bool HasUV0 = sizeof(UV0Check(0)) == 2; + static const bool HasUV1 = sizeof(UV1Check(0)) == 2; + static const bool HasUV2 = sizeof(UV2Check(0)) == 2; + static const bool HasUV3 = sizeof(UV3Check(0)) == 2; + static const bool HasUV4 = sizeof(UV4Check(0)) == 2; + static const bool HasUV5 = sizeof(UV5Check(0)) == 2; + static const bool HasUV6 = sizeof(UV6Check(0)) == 2; + static const bool HasUV7 = sizeof(UV7Check(0)) == 2; + static const int32 NumUVChannels = + (HasUV0 ? 1 : 0) + + (HasUV1 ? 1 : 0) + + (HasUV2 ? 1 : 0) + + (HasUV3 ? 1 : 0) + + (HasUV4 ? 1 : 0) + + (HasUV5 ? 1 : 0) + + (HasUV6 ? 1 : 0) + + (HasUV7 ? 1 : 0); + + + + static const bool HasHighPrecisionNormals = TangentBasisHighPrecisionDetector::Value; + static const bool HasHighPrecisionUVs = UVChannelHighPrecisionDetector::Value; +}; + + +struct FRuntimeMeshVertexTypeTraitsAggregator +{ + template + static bool IsUsingHighPrecisionTangents() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionNormals; + } + template + static bool IsUsingHighPrecisionTangents() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionNormals | FRuntimeMeshVertexTraits::HasHighPrecisionNormals; + } + template + static bool IsUsingHighPrecisionTangents() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionNormals | FRuntimeMeshVertexTraits::HasHighPrecisionNormals | FRuntimeMeshVertexTraits::HasHighPrecisionNormals; + } + + + + template + static bool IsUsingHighPrecisionUVs() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionUVs; + } + template + static bool IsUsingHighPrecisionUVs() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionUVs | FRuntimeMeshVertexTraits::HasHighPrecisionUVs; + } + template + static bool IsUsingHighPrecisionUVs() + { + return FRuntimeMeshVertexTraits::HasHighPrecisionUVs | FRuntimeMeshVertexTraits::HasHighPrecisionUVs | FRuntimeMeshVertexTraits::HasHighPrecisionUVs; + } + + + + template + static int32 NumUVs() + { + return FRuntimeMeshVertexTraits::NumUVChannels; + } + template + static int32 NumUVs() + { + return FMath::Max(FRuntimeMeshVertexTraits::NumUVChannels, FRuntimeMeshVertexTraits::NumUVChannels); + } + template + static int32 NumUVs() + { + return FMath::Max(FRuntimeMeshVertexTraits::NumUVChannels, FMath::Max(FRuntimeMeshVertexTraits::NumUVChannels, FRuntimeMeshVertexTraits::NumUVChannels)); + } +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshData.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshData.h new file mode 100755 index 0000000000..ba9a727cd9 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshData.h @@ -0,0 +1,1129 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshCollision.h" +#include "RuntimeMeshSection.h" +#include "RuntimeMeshBlueprint.h" + +class URuntimeMesh; +class FRuntimeMeshProxy; +class FRuntimeMeshBuilder; + +using FRuntimeMeshProxyPtr = TSharedPtr; + +DECLARE_DELEGATE_OneParam(FRuntimeMeshGameThreadTaskDelegate, URuntimeMesh*); + + + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - No Data"), STAT_RuntimeMesh_CreateMeshSection_NoData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Dual Buffer Mesh Section - No Data"), STAT_RuntimeMesh_CreateMeshSectionDualBuffer_NoData, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Triple Buffer Mesh Section - No Data"), STAT_RuntimeMesh_CreateMeshSectionTripleBuffer_NoData, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section"), STAT_RuntimeMesh_CreateMeshSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section - With Bounding Box"), STAT_RuntimeMesh_CreateMeshSection_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section Dual Buffer"), STAT_RuntimeMesh_CreateMeshSectionDualBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section Dual Buffer - With Bounding Box"), STAT_RuntimeMesh_CreateMeshSectionDualBuffer_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section Triple Buffer"), STAT_RuntimeMesh_CreateMeshSectionTripleBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Create Mesh Section Triple Buffer - With Bounding Box"), STAT_RuntimeMesh_CreateMeshSectionTripleBuffer_BoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - No Triangles"), STAT_RuntimeMesh_UpdateMeshSection_NoTriangles, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - No Triangles - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSection_NoTriangles_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section"), STAT_RuntimeMesh_UpdateMeshSection, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSection_BoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Dual Buffer - No Triangles"), STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_NoTriangles, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Dual Buffer - No Triangles - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_NoTriangles_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Dual Buffer"), STAT_RuntimeMesh_UpdateMeshSectionDualBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Dual Buffer - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_BoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Triple Buffer - No Triangles"), STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_NoTriangles, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Triple Buffer - No Triangles - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_NoTriangles_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Triple Buffer"), STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Triple Buffer - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_BoundingBox, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Primary Buffer"), STAT_RuntimeMesh_UpdateMeshSectionPrimaryBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Primary Buffer - With Bounding Box"), STAT_RuntimeMesh_UpdateMeshSectionPrimaryBuffer_BoundingBox, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Secondary Buffer"), STAT_RuntimeMesh_UpdateMeshSectionSecondaryBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Tertiary Buffer"), STAT_RuntimeMesh_UpdateMeshSectionTertiaryBuffer, STATGROUP_RuntimeMesh); +DECLARE_CYCLE_STAT(TEXT("RM - Update Mesh Section Triangles"), STAT_RuntimeMesh_UpdateMeshSectionTriangles, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Set Section Tessellation Triangles"), STAT_RuntimeMesh_SetSectionTessellationTriangles, STATGROUP_RuntimeMesh); + +DECLARE_CYCLE_STAT(TEXT("RM - Serialize Data"), STAT_RuntimeMesh_SerializationOperator, STATGROUP_RuntimeMesh); + + +/** + * + */ +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshData : public TSharedFromThis +{ + /** Array of sections of mesh */ + TArray MeshSections; + + /* Array of collision only mesh sections*/ + TMap MeshCollisionSections; + + /** Convex shapes used for simple collision */ + TMap ConvexCollisionSections; + + TArray CollisionBoxes; + TArray CollisionSpheres; + TArray CollisionCapsules; + + /** Local space bounds of mesh */ + FBoxSphereBounds LocalBounds; + + /** Parent mesh object that owns this data. */ + TWeakObjectPtr ParentMeshObject; + + /** Render proxy for this mesh */ + FRuntimeMeshProxyPtr RenderProxy; + + TUniquePtr SyncRoot; + +public: + FRuntimeMeshData(); + ~FRuntimeMeshData(); + +private: + void CheckCreate(int32 NumUVs, bool bIndexIsValid) const; + + void CheckCreateLegacyInternal(const FRuntimeMeshVertexStreamStructure& Stream0Structure, const FRuntimeMeshVertexStreamStructure& Stream1Structure, const FRuntimeMeshVertexStreamStructure& Stream2Structure, bool bIsIndexValid) const; + + template + void CheckCreateLegacy() const + { + CheckCreateLegacyInternal(GetStreamStructure(), GetStreamStructure(), GetStreamStructure(), FRuntimeMeshIndexTraits::IsValidIndexType); + } + + void CheckUpdate(bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs, int32 NumUVs, bool b32BitIndices, int32 SectionIndex, bool bShouldCheckIndexType, + bool bCheckTangentVertexStream, bool bCheckUVVertexStream) const; + + template + void CheckUpdate(int32 SectionIndex, bool bShouldCheckIndexType, bool bCheckTangentVertexStream, bool bCheckUVVertexStream) const + { +#if DO_CHECK + bool UVsAreHighPrecision; + int32 NumUVs; + GetUVVertexProperties(UVsAreHighPrecision, NumUVs); + CheckUpdate(GetTangentIsHighPrecision(), UVsAreHighPrecision, NumUVs, FRuntimeMeshIndexTraits::Is32Bit, SectionIndex, bShouldCheckIndexType, bCheckTangentVertexStream, bCheckUVVertexStream); +#endif + } + + template + void CheckUpdateLegacy(int32 SectionIndex, bool bShouldCheckIndexType = true) const + { + } + + void CheckBoundingBox(const FBox& Box) const; + +public: + void CreateMeshSection(int32 SectionIndex, bool bWantsHighPrecisionTangents, bool bWantsHighPrecisionUVs, int32 NumUVs, bool bWants32BitIndices, bool bCreateCollision, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average); + + template + void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void CreateMeshSection(int32 SectionIndex, TArray& InVertices0, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSection_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionDualBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index], InVertices1[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void CreateMeshSectionDualBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, const FBox& BoundingBox, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionDualBuffer_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index], InVertices1[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionTripleBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index], InVertices1[Index], InVertices2[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void CreateMeshSectionTripleBuffer(int32 SectionIndex, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, TArray& InTriangles, + const FBox& BoundingBox, bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_CreateMeshSectionTripleBuffer_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckCreateLegacy(); + + bool bWantsHighPrecisionTangents = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionTangents(); + bool bWantsHighPrecisionUVs = FRuntimeMeshVertexTypeTraitsAggregator::IsUsingHighPrecisionUVs(); + int32 NumUVs = FRuntimeMeshVertexTypeTraitsAggregator::NumUVs(); + bool bUsing32BitIndices = FRuntimeMeshIndexTraits::Is32Bit; + + CreateMeshSection(SectionIndex, bWantsHighPrecisionTangents, bWantsHighPrecisionUVs, NumUVs, bUsing32BitIndices, bCreateCollision, UpdateFrequency); + + auto Mesh = BeginSectionUpdate(SectionIndex, UpdateFlags); + + Mesh->EmptyVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->AddVertexByProperties(InVertices0[Index], InVertices1[Index], InVertices2[Index]); + } + + Mesh->EmptyIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->AddIndex(InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + + + template + void UpdateMeshSection(int32 SectionId, TArray& InVertices0, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection_NoTriangles); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSection(int32 SectionId, TArray& InVertices0, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection_NoTriangles_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSection(int32 SectionId, TArray& InVertices0, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSection_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_NoTriangles); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_NoTriangles_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionDualBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionDualBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InTriangles, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionDualBuffer_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_NoTriangles); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + if (InVertices2.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices2[Index]); + } + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_NoTriangles_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + if (InVertices2.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices2[Index]); + } + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + if (InVertices2.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices2[Index]); + } + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionTripleBuffer(int32 SectionId, TArray& InVertices0, TArray& InVertices1, TArray& InVertices2, + TArray& InTriangles, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTripleBuffer_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + if (InVertices1.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + if (InVertices2.Num() > Index) + { + Mesh->SetVertexProperties(Index, InVertices2[Index]); + } + } + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(BoundingBox); + } + + + + template + void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionPrimaryBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionPrimaryBuffer(int32 SectionId, TArray& InVertices0, const FBox& BoundingBox, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionPrimaryBuffer_BoundingBox); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + CheckBoundingBox(BoundingBox); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumVertices(InVertices0.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < InVertices0.Num(); Index++) + { + Mesh->SetVertexProperties(Index, InVertices0[Index]); + } + + Mesh->Commit(BoundingBox); + } + + template + void UpdateMeshSectionSecondaryBuffer(int32 SectionId, TArray& InVertices1, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionSecondaryBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + int32 NumVerts = FMath::Min(Mesh->NumVertices(), InVertices1.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < NumVerts; Index++) + { + Mesh->SetVertexProperties(Index, InVertices1[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionTertiaryBuffer(int32 SectionId, TArray& InVertices2, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTertiaryBuffer); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, false); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + int32 NumVerts = FMath::Min(Mesh->NumVertices(), InVertices2.Num()); + + // Copy the mesh data to the mesh builder + for (int32 Index = 0; Index < NumVerts; Index++) + { + Mesh->SetVertexProperties(Index, InVertices2[Index]); + } + + Mesh->Commit(); + } + + template + void UpdateMeshSectionTriangles(int32 SectionId, TArray& InTriangles, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_UpdateMeshSectionTriangles); + + FRuntimeMeshScopeLock Lock(SyncRoot); + + CheckUpdateLegacy(SectionId, true); + + auto Mesh = BeginSectionUpdate(SectionId, UpdateFlags); + + Mesh->SetNumIndices(InTriangles.Num()); + + for (int32 Index = 0; Index < InTriangles.Num(); Index++) + { + Mesh->SetIndex(Index, InTriangles[Index]); + } + + Mesh->Commit(); + } + + + + void CreateMeshSection(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + void CreateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + + + void UpdateMeshSection(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + void UpdateMeshSectionByMove(int32 SectionId, const TSharedPtr& MeshData, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + + + + + TUniquePtr BeginSectionUpdate(int32 SectionId, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + TUniquePtr GetSectionReadonly(int32 SectionId); + + +private: + void EndSectionUpdate(FRuntimeMeshScopedUpdater* Updater, ERuntimeMeshBuffersToUpdate BuffersToUpdate, const FBox* BoundingBox = nullptr); + + +private: + void CreateMeshSectionFromComponents(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, TFunction ColorAccessor, int32 NumColors, const TArray& Tangents, + bool bCreateCollision, EUpdateFrequency UpdateFrequency, ESectionUpdateFlags UpdateFlags, bool bUseHighPrecisionTangents, bool bUseHighPrecisionUVs, bool bWantsSecondUV); + + void UpdateMeshSectionFromComponents(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, TFunction ColorAccessor, int32 NumColors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags); + +public: + + void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, bool bCreateCollision = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true); + + void CreateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, + bool bCreateCollision = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true); + + + void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Normals, const TArray& UV0, + const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + void UpdateMeshSection(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& UV0, const TArray& UV1, const TArray& Colors, const TArray& Tangents, ESectionUpdateFlags UpdateFlags = ESectionUpdateFlags::None); + + + + void CreateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, + EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true); + + void UpdateMeshSection_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, const TArray& Normals, + const TArray& Tangents, const TArray& UV0, const TArray& UV1, const TArray& Colors, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false); + + void CreateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCreateCollision = false, bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false, EUpdateFrequency UpdateFrequency = EUpdateFrequency::Average, + bool bUseHighPrecisionTangents = false, bool bUseHighPrecisionUVs = true); + + void UpdateMeshSectionPacked_Blueprint(int32 SectionIndex, const TArray& Vertices, const TArray& Triangles, + bool bCalculateNormalTangent = false, bool bShouldCreateHardTangents = false, bool bGenerateTessellationTriangles = false); + + + + + + + + template + void SetSectionTessellationTriangles(int32 SectionId, const TArray& Triangles) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SetSectionTessellationTriangles); + + FRuntimeMeshScopeLock Lock(SyncRoot); + CheckUpdate(false, false, 0, FRuntimeMeshIndexTraits::Is32Bit, SectionId, true, false, false); + + FRuntimeMeshSectionPtr Section = MeshSections[SectionId]; + + ERuntimeMeshBuffersToUpdate BuffersToUpdate = ERuntimeMeshBuffersToUpdate::None; + + // Update indices if supplied + if (Triangles.Num() > 0) + { + Section->UpdateAdjacencyIndexBuffer(Triangles); + BuffersToUpdate |= ERuntimeMeshBuffersToUpdate::AdjacencyIndexBuffer; + } + + // Finalize section update if we have anything to apply + if (BuffersToUpdate != ERuntimeMeshBuffersToUpdate::None) + { + UpdateSectionInternal(SectionId, BuffersToUpdate, ESectionUpdateFlags::None); + } + } + + /** Clear a section of the procedural mesh. */ + void ClearMeshSection(int32 SectionIndex); + + /** Clear all mesh sections and reset to empty state */ + void ClearAllMeshSections(); + + + + /** Gets the bounding box of a specific section */ + FBox GetSectionBoundingBox(int32 SectionIndex); + + /** Control visibility of a particular section */ + void SetMeshSectionVisible(int32 SectionIndex, bool bNewVisibility); + + /** Returns whether a particular section is currently visible */ + bool IsMeshSectionVisible(int32 SectionIndex) const; + + + /** Control whether a particular section casts a shadow */ + void SetMeshSectionCastsShadow(int32 SectionIndex, bool bNewCastsShadow); + + /** Returns whether a particular section is currently casting shadows */ + bool IsMeshSectionCastingShadows(int32 SectionIndex) const; + + + /** Control whether a particular section has collision */ + void SetMeshSectionCollisionEnabled(int32 SectionIndex, bool bNewCollisionEnabled); + + /** Returns whether a particular section has collision */ + bool IsMeshSectionCollisionEnabled(int32 SectionIndex); + + + /** Returns number of sections currently created for this component */ + int32 GetNumSections() const; + + /** Returns whether a particular section currently exists */ + bool DoesSectionExist(int32 SectionIndex) const; + + /** Returns first available section index */ + int32 GetAvailableSectionIndex() const; + + int32 GetLastSectionIndex() const; + + + TArray GetSectionIds() const; + + + void SetMeshCollisionSection(int32 CollisionSectionIndex, const TArray& Vertices, const TArray& Triangles); + + void ClearMeshCollisionSection(int32 CollisionSectionIndex); + + void ClearAllMeshCollisionSections(); + + + + int32 AddConvexCollisionSection(TArray ConvexVerts); + + void SetConvexCollisionSection(int32 ConvexSectionIndex, TArray ConvexVerts); + + void RemoveConvexCollisionSection(int32 ConvexSectionIndex); + + void ClearConvexCollisionSections(); + + void SetCollisionConvexMeshes(const TArray>& ConvexMeshes); + + + int32 AddCollisionBox(const FRuntimeMeshCollisionBox& NewBox); + + void RemoveCollisionBox(int32 Index); + + void ClearCollisionBoxes(); + + void SetCollisionBoxes(const TArray& NewBoxes); + + + int32 AddCollisionSphere(const FRuntimeMeshCollisionSphere& NewSphere); + + void RemoveCollisionSphere(int32 Index); + + void ClearCollisionSpheres(); + + void SetCollisionSpheres(const TArray& NewSpheres); + + + int32 AddCollisionCapsule(const FRuntimeMeshCollisionCapsule& NewCapsule); + + void RemoveCollisionCapsule(int32 Index); + + void ClearCollisionCapsules(); + + void SetCollisionCapsules(const TArray& NewCapsules); + + + FBoxSphereBounds GetLocalBounds() const; + +private: + + FRuntimeMeshSectionPtr GetSection(int32 SectionIndex) { return MeshSections[SectionIndex]; } + + void Setup(TWeakObjectPtr InParentMeshObject); + + FRuntimeMeshProxyPtr GetRenderProxy() const { return RenderProxy; } + + + /* Creates an mesh section of a specified type at the specified index. */ + template + FRuntimeMeshSectionPtr CreateOrResetSection(int32 SectionId, EUpdateFrequency UpdateFrequency) + { + static_assert(FRuntimeMeshIndexTraits::IsValidIndexType, "Indices can only be of type uint16, uint32, or int32"); + + bool bHighPrecisionUVs; + int32 NumUVs; + GetUVVertexProperties(bHighPrecisionUVs, NumUVs); + + return CreateOrResetSection(SectionId, GetTangentIsHighPrecision(), bHighPrecisionUVs, NumUVs, FRuntimeMeshIndexTraits::Is32Bit, UpdateFrequency); + } + + FRuntimeMeshSectionPtr CreateOrResetSection(int32 SectionId, bool bInUseHighPrecisionTangents, bool bInUseHighPrecisionUVs, + int32 InNumUVs, bool b32BitIndices, EUpdateFrequency UpdateFrequency); + + FRuntimeMeshSectionPtr CreateOrResetSectionForBlueprint(int32 SectionId, bool bWantsSecondUV, + bool bHighPrecisionTangents, bool bHighPrecisionUVs, EUpdateFrequency UpdateFrequency); + + /* Finishes creating a section, including entering it for batch updating, or updating the RT directly */ + void CreateSectionInternal(int32 SectionIndex, ESectionUpdateFlags UpdateFlags); + + /* Finishes updating a section, including entering it for batch updating, or updating the RT directly */ + void UpdateSectionInternal(int32 SectionIndex, ERuntimeMeshBuffersToUpdate BuffersToUpdate, ESectionUpdateFlags UpdateFlags); + + /* Handles things like automatic tessellation and tangent calculation that is common to both section creation and update. */ + void HandleCommonSectionUpdateFlags(int32 SectionIndex, ESectionUpdateFlags UpdateFlags, ERuntimeMeshBuffersToUpdate& BuffersToUpdate); + + /* Finishes updating a sections properties, like visible/casts shadow, a*/ + void UpdateSectionPropertiesInternal(int32 SectionIndex, bool bUpdateRequiresProxyRecreateIfStatic); + + /** Update LocalBounds member from the local box of each section */ + void UpdateLocalBounds(); + + FRuntimeMeshProxyPtr EnsureProxyCreated(ERHIFeatureLevel::Type InFeatureLevel); + + TSharedPtr GetReadonlyMeshAccessor(int32 SectionId); + + void Initialize(); + + bool ContainsPhysicsTriMeshData(bool InUseAllTriData) const; + bool GetPhysicsTriMeshData(struct FTriMeshCollisionData* CollisionData, bool InUseAllTriData); + void CopyCollisionElementsToBodySetup(UBodySetup* Setup); + void MarkCollisionDirty(bool bSkipChangedFlag = false); + + void MarkRenderStateDirty(); + void SendSectionPropertiesUpdate(int32 SectionIndex); + + int32 GetSectionFromCollisionFaceIndex(int32 FaceIndex) const; + + + void DoOnGameThread(FRuntimeMeshGameThreadTaskDelegate Func); + + void MarkChanged(); + + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshData& MeshData) + { + SCOPE_CYCLE_COUNTER(STAT_RuntimeMesh_SerializationOperator); + + //FRuntimeMeshScopeLock Lock(MeshData.SyncRoot); + + Ar << MeshData.MeshSections; + + Ar << MeshData.MeshCollisionSections; + Ar << MeshData.ConvexCollisionSections; + + Ar << MeshData.CollisionBoxes; + Ar << MeshData.CollisionSpheres; + Ar << MeshData.CollisionCapsules; + + // Update all state since we don't know what really changed (or this could be an initial load) + if (Ar.IsLoading()) + { + MeshData.UpdateLocalBounds(); + } + return Ar; + } + + friend class URuntimeMesh; + friend class FRuntimeMeshScopedUpdater; +}; + +using FRuntimeMeshDataRef = TSharedRef; +using FRuntimeMeshDataPtr = TSharedPtr; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshGenericVertex.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshGenericVertex.h new file mode 100755 index 0000000000..13a422a9c2 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshGenericVertex.h @@ -0,0 +1,832 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "RuntimeMeshCore.h" +#include "Containers/StaticArray.h" + +////////////////////////////////////////////////////////////////////////// +// +// This file contains a generic vertex structure capable of efficiently representing a vertex +// with any combination of position, normal, tangent, color, and 0-8 UV channels. +// +// Example use: (This defines a vertex with all components and 1 UV with default precision for normal/tangent and UV) +// +// DECLARE_RUNTIME_MESH_VERTEX(MyVertex, true, true, true, true, 1, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::Default) +// +// MyVertex Vertex; +// Vertex.Position = FVector(0,0,0); +// Vertex.Normal = FVector(0,0,0); +// Vertex.UV0 = FVector2D(0,0); +// +////////////////////////////////////////////////////////////////////////// + + +////////////////////////////////////////////////////////////////////////// +// Texture Component Type Selector +////////////////////////////////////////////////////////////////////////// + +enum class ERuntimeMeshVertexUVType +{ + Default = 1, + HighPrecision = 2, +}; + +template +struct FRuntimeMeshVertexUVsTypeSelector; + +template<> +struct FRuntimeMeshVertexUVsTypeSelector +{ + typedef FVector2DHalf UVsType; + static const EVertexElementType VertexElementType1Channel = VET_Half2; + static const EVertexElementType VertexElementType2Channel = VET_Half4; +}; + +template<> +struct FRuntimeMeshVertexUVsTypeSelector +{ + typedef FVector2D UVsType; + static const EVertexElementType VertexElementType1Channel = VET_Float2; + static const EVertexElementType VertexElementType2Channel = VET_Float4; +}; + + +////////////////////////////////////////////////////////////////////////// +// Tangent Basis Component Type Selector +////////////////////////////////////////////////////////////////////////// + +enum class ERuntimeMeshVertexTangentBasisType +{ + Default = 1, + HighPrecision = 2, +}; + +template +struct FRuntimeMeshVertexTangentTypeSelector; + +template<> +struct FRuntimeMeshVertexTangentTypeSelector +{ + typedef FPackedNormal TangentsType; + static const EVertexElementType VertexElementType = VET_PackedNormal; +}; + +template<> +struct FRuntimeMeshVertexTangentTypeSelector +{ + typedef FPackedRGBA16N TangentsType; + static const EVertexElementType VertexElementType = VET_UShort4N; +}; + +struct RuntimeMeshNormalUtil +{ + static void SetNormalW(FPackedNormal& Target, float Determinant) + { + Target.Vector.W = Determinant < 0.0f ? 0 : -1; // -1 == 0xFF + } + + static void SetNormalW(FPackedRGBA16N& Target, float Determinant) + { + Target.W = Determinant < 0.0f ? 0 : -1; // -1 == 0xFFFF + } +}; + +////////////////////////////////////////////////////////////////////////// +// Vertex Structure Generator +////////////////////////////////////////////////////////////////////////// + +struct FRuntimeMeshVertexUtilities +{ + ////////////////////////////////////////////////////////////////////////// + // Position Component + ////////////////////////////////////////////////////////////////////////// + template + struct PositionComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.Position = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Position, VET_Float3); + } + + }; + + template + struct PositionComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + } + }; + + ////////////////////////////////////////////////////////////////////////// + // Normal/Tangent Components + ////////////////////////////////////////////////////////////////////////// + template + struct NormalTangentComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.Normal = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Normal, + FRuntimeMeshVertexTangentTypeSelector::VertexElementType); + VertexStructure.Tangent = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Tangent, + FRuntimeMeshVertexTangentTypeSelector::VertexElementType); + } + }; + + template + struct NormalTangentComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.Normal = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Normal, + FRuntimeMeshVertexTangentTypeSelector::VertexElementType); + } + }; + + template + struct NormalTangentComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.Tangent = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Tangent, + FRuntimeMeshVertexTangentTypeSelector::VertexElementType); + } + }; + + template + struct NormalTangentComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + } + }; + + ////////////////////////////////////////////////////////////////////////// + // Color Component + ////////////////////////////////////////////////////////////////////////// + template + struct ColorComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.Color = RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, Color, VET_Color); + } + }; + + template + struct ColorComponent + { + static void AddComponent(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + } + }; + + + ////////////////////////////////////////////////////////////////////////// + // UV Components + ////////////////////////////////////////////////////////////////////////// + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType1Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType1Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV4, FRuntimeMeshVertexUVsTypeSelector::VertexElementType1Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV4, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV4, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV6, FRuntimeMeshVertexUVsTypeSelector::VertexElementType1Channel)); + } + }; + + template + struct TextureChannels + { + static void AddChannels(FRuntimeMeshVertexStreamStructure& VertexStructure) + { + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV0, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV2, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV4, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + VertexStructure.UVs.Add(RUNTIMEMESH_VERTEXSTREAMCOMPONENT(RuntimeVertexType, UV6, FRuntimeMeshVertexUVsTypeSelector::VertexElementType2Channel)); + } + }; +}; + + + + + +////////////////////////////////////////////////////////////////////////// +// Struct Member Builders +////////////////////////////////////////////////////////////////////////// + +// Position declaration +#define RUNTIMEMESH_VERTEX_DECLARE_POSITION_true FVector Position; +#define RUNTIMEMESH_VERTEX_DECLARE_POSITION_false +#define RUNTIMEMESH_VERTEX_DECLARE_POSITION(HasPosition) RUNTIMEMESH_VERTEX_DECLARE_POSITION_##HasPosition + +// Normal declaration +#define RUNTIMEMESH_VERTEX_DECLARE_NORMAL_true(TangentType) FRuntimeMeshVertexTangentTypeSelector::TangentsType Normal; +#define RUNTIMEMESH_VERTEX_DECLARE_NORMAL_false(TangentType) +#define RUNTIMEMESH_VERTEX_DECLARE_NORMAL(HasNormal, TangentType) RUNTIMEMESH_VERTEX_DECLARE_NORMAL_##HasNormal(TangentType) + +// Tangent declaration +#define RUNTIMEMESH_VERTEX_DECLARE_TANGENT_true(TangentType) FRuntimeMeshVertexTangentTypeSelector::TangentsType Tangent; +#define RUNTIMEMESH_VERTEX_DECLARE_TANGENT_false(TangentType) +#define RUNTIMEMESH_VERTEX_DECLARE_TANGENT(HasTangent, TangentType) RUNTIMEMESH_VERTEX_DECLARE_TANGENT_##HasTangent(TangentType) + +// Color declaration +#define RUNTIMEMESH_VERTEX_DECLARE_COLOR_true FColor Color; +#define RUNTIMEMESH_VERTEX_DECLARE_COLOR_false +#define RUNTIMEMESH_VERTEX_DECLARE_COLOR(HasColor) RUNTIMEMESH_VERTEX_DECLARE_COLOR_##HasColor + +// UV Channels +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_0(UVType) + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_1(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV0; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_2(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_1(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV1; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_3(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_2(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV2; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_4(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_3(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV3; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_5(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_4(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV4; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_6(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_5(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV5; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_7(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_6(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV6; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_8(UVType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_7(UVType) \ + FRuntimeMeshVertexUVsTypeSelector::UVsType UV7; + +#define RUNTIMEMESH_VERTEX_DECLARE_UVCHANNELS(NumChannels, UVType) RUNTIMEMESH_VERTEX_DECLARE_UVCHANNEL_##NumChannels(UVType) + + + + +////////////////////////////////////////////////////////////////////////// +// Member default inits +////////////////////////////////////////////////////////////////////////// + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_POSITION_true Position = FVector(0.0f, 0.0f, 0.0f); +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_POSITION_false +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_POSITION(HasPosition) RUNTIMEMESH_VERTEX_DEFAULTINIT_POSITION_##HasPosition + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL_true Normal = FVector4(0.0f, 0.0f, 1.0f, 1.0f); +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL_false +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL(HasNormal) RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL_##HasNormal + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT_true Tangent = FVector(1.0f, 0.0f, 0.0f); +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT_false +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT(HasTangent) RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT_##HasTangent + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR_true Color = FColor::White; +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR_false +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(HasColor) RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR_##HasColor + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_0 + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_1 \ + UV0 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_2 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_1 \ + UV1 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_3 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_2 \ + UV2 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_4 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_3 \ + UV3 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_5 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_4 \ + UV4 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_6 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_5 \ + UV5 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_7 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_6 \ + UV6 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_8 \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_7 \ + UV7 = FVector2D(0.0f, 0.0f); + +#define RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNELS(NumChannels) RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNEL_##NumChannels + + + +////////////////////////////////////////////////////////////////////////// +// Constructor Parameter Builders +////////////////////////////////////////////////////////////////////////// + +#define RUNTIMEMESH_VERTEX_PARAMETER_POSITION_true const FVector& InPosition, +#define RUNTIMEMESH_VERTEX_PARAMETER_POSITION_false +#define RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) RUNTIMEMESH_VERTEX_PARAMETER_POSITION_##NeedsPosition + +#define RUNTIMEMESH_VERTEX_INIT_POSITION_true Position = InPosition; +#define RUNTIMEMESH_VERTEX_INIT_POSITION_false +#define RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) RUNTIMEMESH_VERTEX_INIT_POSITION_##NeedsPosition + + + +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_0 +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_1 , const FVector2D& InUV0 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_2 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_1 , const FVector2D& InUV1 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_3 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_2 , const FVector2D& InUV2 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_4 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_3 , const FVector2D& InUV3 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_5 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_4 , const FVector2D& InUV4 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_6 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_5 , const FVector2D& InUV5 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_7 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_6 , const FVector2D& InUV6 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_8 RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_7 , const FVector2D& InUV7 = FVector2D::ZeroVector +#define RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(NumChannels) RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNEL_##NumChannels + + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_0 + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_1 \ + UV0 = InUV0; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_2 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_1 \ + UV1 = InUV1; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_3 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_2 \ + UV2 = InUV2; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_4 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_3 \ + UV3 = InUV3; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_5 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_4 \ + UV4 = InUV4; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_6 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_5 \ + UV5 = InUV5; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_7 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_6 \ + UV6 = InUV6; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_8 \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_7 \ + UV7 = InUV7; + +#define RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(NumChannels) RUNTIMEMESH_VERTEX_INIT_UVCHANNEL_##NumChannels + + + +////////////////////////////////////////////////////////////////////////// +// Constructor Definitions +////////////////////////////////////////////////////////////////////////// + + +// PreProcessor IF with pass through for all the constructor arguments +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, Condition, IfTrue) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF_##Condition(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, IfTrue) +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF_false(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, IfTrue) +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF_true(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, IfTrue) IfTrue + + +// Implementation of Position only Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(const FVector& InPosition) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL(NeedsNormal) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT(NeedsTangent) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(NeedsColor) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsPosition, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) + +// Implementation of Position/Normal Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FVector& InNormal) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + Normal = InNormal; \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT(NeedsTangent) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(NeedsColor) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/Normal Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) + +// Implementation of Position/Color Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FColor& InColor RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(UVChannelCount)) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL(NeedsNormal) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT(NeedsTangent) \ + Color = InColor; \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/Color Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsColor, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) + + +// Implementation of Position/Normal/Tangent Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FVector& InNormal, const FRuntimeMeshTangent& InTangent RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(UVChannelCount)) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + Normal = FVector4(InNormal, InTangent.bFlipTangentY? -1 : 1); \ + Tangent = InTangent.TangentX; \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(NeedsColor) \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/Normal/Tangent Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsTangent, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) \ + ) + + +// Implementation of Position/TangentX/TangentY/TangentZ Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FVector& InTangentX, const FVector& InTangentY, const FVector& InTangentZ RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(UVChannelCount)) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + Normal = FVector4(InTangentZ, GetBasisDeterminantSign(InTangentX, InTangentY, InTangentZ)); \ + Tangent = InTangentX; \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(NeedsColor) \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/TangentX/TangentY/TangentZ Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsTangent, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) \ + ) + + +// Implementation of Position/Normal/Tangent Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FVector& InNormal, const FRuntimeMeshTangent& InTangent, const FColor& InColor RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(UVChannelCount)) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + Normal = FVector4(InNormal, InTangent.bFlipTangentY? -1 : 1); \ + Tangent = InTangent.TangentX; \ + Color = InColor; \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/Normal/Tangent Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsTangent, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsColor, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) \ + ) \ + ) + + +// Implementation of Position/TangentX/TangentY/TangentZ Constructor +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + VertexName(RUNTIMEMESH_VERTEX_PARAMETER_POSITION(NeedsPosition) const FVector& InTangentX, const FVector& InTangentY, const FVector& InTangentZ, const FColor& InColor RUNTIMEMESH_VERTEX_PARAMETER_UVCHANNELS(UVChannelCount)) \ + { \ + RUNTIMEMESH_VERTEX_INIT_POSITION(NeedsPosition) \ + Normal = FVector4(InTangentZ, GetBasisDeterminantSign(InTangentX, InTangentY, InTangentZ)); \ + Tangent = InTangentX; \ + Color = InColor; \ + RUNTIMEMESH_VERTEX_INIT_UVCHANNELS(UVChannelCount) \ + } + +// Defines the Position/TangentX/TangentY/TangentZ Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsTangent, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsColor, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_COLOR_IMPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) \ + ) \ + ) + + +// Implementation of Position only Constructor +#define RUNTIMEMESH_VERTEX_NORMALTANGENT_SET_MPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + void SetTangents(const FVector& TangentX, const FVector& TangentY, const FVector& TangentZ) \ + { \ + Normal = FVector4(TangentZ, GetBasisDeterminantSign(TangentX, TangentY, TangentZ)); \ + Tangent = TangentX; \ + } \ + \ + void SetTangent(const FRuntimeMeshTangent& InTangent) \ + { \ + InTangent.ModifyNormal(Normal); \ + Tangent = InTangent.TangentX; \ + } + +// Defines the Position Constructor if it's wanted +#define RUNTIMEMESH_VERTEX_NORMALTANGENT_SET(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsNormal, \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_DEFINITION_IF(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, NeedsTangent, \ + RUNTIMEMESH_VERTEX_NORMALTANGENT_SET_MPLEMENTATION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + ) \ + ) + + + + + +#define __DECLARE_RUNTIME_MESH_VERTEXINTERNAL(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, APIQUALIFIER) \ + struct APIQUALIFIER VertexName \ + { \ + RUNTIMEMESH_VERTEX_DECLARE_POSITION(NeedsPosition) \ + RUNTIMEMESH_VERTEX_DECLARE_NORMAL(NeedsNormal, TangentsType) \ + RUNTIMEMESH_VERTEX_DECLARE_TANGENT(NeedsTangent, TangentsType) \ + RUNTIMEMESH_VERTEX_DECLARE_UVCHANNELS(UVChannelCount, UVChannelType) \ + RUNTIMEMESH_VERTEX_DECLARE_COLOR(NeedsColor) \ + \ + VertexName() { } \ + \ + VertexName(EForceInit) \ + { \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_POSITION(NeedsPosition) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_NORMAL(NeedsNormal) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_TANGENT(NeedsTangent) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_UVCHANNELS(UVChannelCount) \ + RUNTIMEMESH_VERTEX_DEFAULTINIT_COLOR(NeedsColor) \ + } \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_NORMAL_TANGENT_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_CONSTRUCTOR_POSITION_TANGENTX_TANGENTY_TANGENTZ_COLOR(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + RUNTIMEMESH_VERTEX_NORMALTANGENT_SET(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + \ + static FRuntimeMeshVertexStreamStructure GetVertexStructure() \ + { \ + FRuntimeMeshVertexStreamStructure VertexStructure; \ + /* Add Position component if necessary */ \ + FRuntimeMeshVertexUtilities::PositionComponent::AddComponent(VertexStructure); \ + /* Add normal and tangent components if necessary */ \ + FRuntimeMeshVertexUtilities::NormalTangentComponent::AddComponent(VertexStructure); \ + /* Add color component if necessary */ \ + FRuntimeMeshVertexUtilities::ColorComponent::AddComponent(VertexStructure); \ + /* Add all texture channels */ \ + FRuntimeMeshVertexUtilities::TextureChannels::AddChannels(VertexStructure); \ + return VertexStructure; \ + } \ + }; + + +#define DECLARE_RUNTIME_MESH_VERTEX(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType) \ + __DECLARE_RUNTIME_MESH_VERTEXINTERNAL(VertexName, NeedsPosition, NeedsNormal, NeedsTangent, NeedsColor, UVChannelCount, TangentsType, UVChannelType, /**/) + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////// +// Name Vertex Configurations +////////////////////////////////////////////////////////////////////////// + +/** Simple vertex with 1 UV channel */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexSimple, true, true, true, true, 1, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 2 UV channels */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexDualUV, true, true, true, true, 2, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 1 UV channel and NO position component (Meant to be used with separate position buffer) */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexNoPosition, false, true, true, true, 1, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 2 UV channels and NO position component (Meant to be used with separate position buffer) */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexNoPositionDualUV, false, true, true, true, 2, ERuntimeMeshVertexTangentBasisType::Default, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 1 UV channel */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexHiPrecisionNormals, true, true, true, true, 1, ERuntimeMeshVertexTangentBasisType::HighPrecision, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 2 UV channels */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexDualUVHiPrecisionNormals, true, true, true, true, 2, ERuntimeMeshVertexTangentBasisType::HighPrecision, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 1 UV channel and NO position component (Meant to be used with separate position buffer) */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexNoPositionHiPrecisionNormals, false, true, true, true, 1, ERuntimeMeshVertexTangentBasisType::HighPrecision, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + +/** Simple vertex with 2 UV channels and NO position component (Meant to be used with separate position buffer) */ +__DECLARE_RUNTIME_MESH_VERTEXINTERNAL(FRuntimeMeshVertexNoPositionDualUVHiPrecisionNormals, false, true, true, true, 2, ERuntimeMeshVertexTangentBasisType::HighPrecision, ERuntimeMeshVertexUVType::HighPrecision, RUNTIMEMESHCOMPONENT_API) + + + + + +struct FRuntimeMeshTangents +{ + FPackedNormal Tangent; + FPackedNormal Normal; +}; + +struct FRuntimeMeshTangentsHighPrecision +{ + FPackedRGBA16N Tangent; + FPackedRGBA16N Normal; +}; + +struct FRuntimeMeshDualUV +{ + FVector2DHalf UV0; + FVector2DHalf UV1; + + FVector2DHalf& operator[] (int32 Index) + { + return Index > 0 ? UV1 : UV0; + } +}; +struct FRuntimeMeshDualUVHighPrecision +{ + FVector2D UV0; + FVector2D UV1; + + FVector2D& operator[] (int32 Index) + { + return Index > 0 ? UV1 : UV0; + } +}; + + +template +inline bool GetTangentIsHighPrecision() +{ + static_assert(sizeof(VertexType) == -1, "Invalid Tangent type."); +} + +template<> +inline bool GetTangentIsHighPrecision() +{ + return false; +} + +template<> +inline bool GetTangentIsHighPrecision() +{ + return true; +} + +template +inline void GetUVVertexProperties(bool& bIsUsingHighPrecision, int32& NumUVs) +{ + static_assert(sizeof(VertexType) == -1, "Invalid UV type."); +} + +template<> +inline void GetUVVertexProperties(bool& bIsUsingHighPrecision, int32& NumUVs) +{ + bIsUsingHighPrecision = false; + NumUVs = 1; +} + +template<> +inline void GetUVVertexProperties(bool& bIsUsingHighPrecision, int32& NumUVs) +{ + bIsUsingHighPrecision = true; + NumUVs = 1; +} + +template<> +inline void GetUVVertexProperties(bool& bIsUsingHighPrecision, int32& NumUVs) +{ + bIsUsingHighPrecision = false; + NumUVs = 2; +} + +template<> +inline void GetUVVertexProperties(bool& bIsUsingHighPrecision, int32& NumUVs) +{ + bIsUsingHighPrecision = true; + NumUVs = 2; +} + + + diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshLibrary.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshLibrary.h new file mode 100755 index 0000000000..fbf02db3cd --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshLibrary.h @@ -0,0 +1,100 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "RuntimeMeshGenericVertex.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "RuntimeMeshBuilder.h" +#include "RuntimeMeshBlueprint.h" +#include "RuntimeMeshLibrary.generated.h" + +/** + * + */ +UCLASS() +class RUNTIMEMESHCOMPONENT_API URuntimeMeshLibrary : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + /** + * Automatically generate normals and tangent vectors for a mesh + * UVs are required for correct tangent generation. + */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (AutoCreateRefTerm = "UVs")) + static void CalculateTangentsForMesh(const TArray& Vertices, const TArray& Triangles, + TArray& Normals, const TArray& UVs, TArray& Tangents, bool bCreateSmoothNormals = true); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CalculateTangentsForMeshPacked(TArray& Vertices, const TArray& Triangles, bool bCreateSmoothNormals = true); + + static void CalculateTangentsForMesh(TArray& Vertices, const TArray& Triangles, bool bCreateSmoothNormals = true); + + static void CalculateTangentsForMesh(const TSharedPtr& MeshAccessor, bool bCreateSmoothNormals = true); + + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (AutoCreateRefTerm = "UVs")) + static TArray GenerateTessellationIndexBuffer(const TArray& Vertices, const TArray& Triangles, + TArray& Normals, const TArray& UVs, TArray& Tangents); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static TArray GenerateTessellationIndexBufferPacked(const TArray& Vertices, const TArray& Triangles); + + static TArray GenerateTessellationIndexBuffer(const TArray& Vertices, const TArray& Triangles); + + static TArray GenerateTessellationIndexBuffer(const TSharedPtr& MeshAccessor); + + static void GenerateTessellationIndexBuffer(const TSharedPtr& MeshAccessor, const TSharedPtr& OutTessellationIndices); + + + /** Grab geometry data from a StaticMesh asset. */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh", meta = (AutoCreateRefTerm = "UVs")) + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles, + TArray& Normals, TArray& UVs, TArray& Colors, TArray& Tangents); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void GetStaticMeshSectionPacked(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles); + + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles); + + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, TArray& Vertices, TArray& Triangles, TArray& AdjacencyTriangles); + + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, const TSharedPtr& MeshAccessor); + + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, const TSharedPtr& MeshAccessor, const TSharedPtr& TessellationIndicesAccessor); + + + + /** Copy sections from a static mesh to a runtime mesh */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CopyStaticMeshToRuntimeMesh(UStaticMeshComponent* StaticMeshComponent, int32 LODIndex, URuntimeMesh* RuntimeMesh, bool bCreateCollision); + + /** Copy sections from a static mesh to a runtime mesh */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CopyStaticMeshToRuntimeMeshComponent(UStaticMeshComponent* StaticMeshComponent, int32 LODIndex, URuntimeMeshComponent* RuntimeMeshComponent, bool bCreateCollision); + + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CopyCollisionFromStaticMesh(UStaticMesh* StaticMesh, URuntimeMesh* RuntimeMesh); + + static void CopyCollisionFromStaticMesh(UStaticMeshComponent* StaticMeshComponent, URuntimeMesh* RuntimeMesh) + { + CopyCollisionFromStaticMesh(StaticMeshComponent->GetStaticMesh(), RuntimeMesh); + } + +private: + static void CalculateTangentsForMesh(TFunction IndexAccessor, TFunction VertexAccessor, TFunction UVAccessor, + TFunction TangentSetter, int32 NumVertices, int32 NumUVs, int32 NumIndices, bool bCreateSmoothNormals); + + + static int32 GetNewIndexForOldVertIndex(const FPositionVertexBuffer* PosBuffer, const FStaticMeshVertexBuffer* VertBuffer, const FColorVertexBuffer* ColorBuffer, + TMap& MeshToSectionVertMap, int32 VertexIndex, int32 NumUVChannels, TFunction VertexCreator, + TFunction UVSetter, TFunction ColorSetter); + + static void GetStaticMeshSection(UStaticMesh* InMesh, int32 LODIndex, int32 SectionIndex, int32 NumSupportedUVs, + TFunction VertexCreator, + TFunction UVSetter, TFunction ColorSetter, TFunction IndexCreator, TFunction AdjacencyIndexCreator); + +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSection.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSection.h new file mode 100755 index 0000000000..c5117a8e1a --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSection.h @@ -0,0 +1,498 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "Engine.h" +#include "RuntimeMeshCore.h" +#include "RuntimeMeshBuilder.h" + +enum class ERuntimeMeshBuffersToUpdate : uint8; +struct FRuntimeMeshSectionVertexBufferParams; +struct FRuntimeMeshSectionTangentVertexBufferParams; +struct FRuntimeMeshSectionUVVertexBufferParams; +struct FRuntimeMeshSectionIndexBufferParams; +class UMaterialInterface; + +class RUNTIMEMESHCOMPONENT_API FRuntimeMeshSection +{ + struct FSectionVertexBuffer + { + private: + const int32 Stride; + TArray Data; + public: + FSectionVertexBuffer(int32 InStride) : Stride(InStride) + { + + } + virtual ~FSectionVertexBuffer() { } + + void SetData(TArray& InVertices, bool bUseMove) + { + if (bUseMove) + { + Data = MoveTemp(InVertices); + } + else + { + Data = InVertices; + } + } + + template + void SetData(const TArray& InVertices) + { + if (InVertices.Num() == 0) + { + Data.Empty(); + return; + } + check(InVertices.GetTypeSize() == GetStride()); + + Data.SetNum(InVertices.GetTypeSize() * InVertices.Num()); + FMemory::Memcpy(Data.GetData(), InVertices.GetData(), Data.Num()); + } + + int32 GetStride() const + { + return Stride; + } + + int32 GetNumVertices() const + { + return Stride > 0 ? Data.Num() / Stride : 0; + } + + TArray& GetData() { return Data; } + + void FillUpdateParams(FRuntimeMeshSectionVertexBufferParams& Params); + + friend FArchive& operator <<(FArchive& Ar, FSectionVertexBuffer& Buffer) + { + Buffer.Serialize(Ar); + return Ar; + } + + protected: + virtual void Serialize(FArchive& Ar) + { + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) < FRuntimeMeshVersion::RuntimeMeshComponentUE4_19) + { + FRuntimeMeshVertexStreamStructure VertexStructure; + Ar << const_cast(VertexStructure); + } + Ar << const_cast(Stride); + Ar << Data; + } + }; + + struct FSectionPositionVertexBuffer : public FSectionVertexBuffer + { + FSectionPositionVertexBuffer() + : FSectionVertexBuffer(sizeof(FVector)) + { + + } + }; + + struct FSectionTangentsVertexBuffer : public FSectionVertexBuffer + { + private: + bool bUseHighPrecision; + + public: + FSectionTangentsVertexBuffer(bool bInUseHighPrecision) + : FSectionVertexBuffer(bInUseHighPrecision ? (sizeof(FPackedRGBA16N) * 2) : (sizeof(FPackedNormal) * 2)) + , bUseHighPrecision(bInUseHighPrecision) + { + + } + + bool IsUsingHighPrecision() const { return bUseHighPrecision; } + + void FillUpdateParams(FRuntimeMeshSectionTangentVertexBufferParams& Params); + + virtual void Serialize(FArchive& Ar) override + { + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::RuntimeMeshComponentUE4_19) + { + Ar << bUseHighPrecision; + } + FSectionVertexBuffer::Serialize(Ar); + } + }; + + struct FSectionUVsVertexBuffer : public FSectionVertexBuffer + { + private: + bool bUseHighPrecision; + int32 UVCount; + + public: + + FSectionUVsVertexBuffer(bool bInUseHighPrecision, int32 InUVCount) + : FSectionVertexBuffer((bInUseHighPrecision ? sizeof(FVector2D) : sizeof(FVector2DHalf)) * InUVCount) + , bUseHighPrecision(bInUseHighPrecision), UVCount(InUVCount) + { + + } + + bool IsUsingHighPrecision() const { return bUseHighPrecision; } + + int32 NumUVs() const { return UVCount; } + + void FillUpdateParams(FRuntimeMeshSectionUVVertexBufferParams& Params); + + virtual void Serialize(FArchive& Ar) override + { + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::RuntimeMeshComponentUE4_19) + { + Ar << bUseHighPrecision; + Ar << UVCount; + } + FSectionVertexBuffer::Serialize(Ar); + } + }; + + struct FSectionColorVertexBuffer : public FSectionVertexBuffer + { + FSectionColorVertexBuffer() + : FSectionVertexBuffer(sizeof(FColor)) + { + + } + }; + + struct FSectionIndexBuffer + { + private: + const bool b32BitIndices; + TArray Data; + public: + FSectionIndexBuffer(bool bIn32BitIndices) + : b32BitIndices(bIn32BitIndices) + { + + } + + void SetData(TArray& InIndices, bool bUseMove) + { + if (bUseMove) + { + Data = MoveTemp(InIndices); + } + else + { + Data = InIndices; + } + } + + template + void SetData(const TArray& InIndices) + { + check(InIndices.GetTypeSize() == GetStride()); + + Data.SetNum(InIndices.GetTypeSize() * InIndices.Num()); + FMemory::Memcpy(Data.GetData(), InIndices.GetData(), Data.Num()); + } + + int32 GetStride() const + { + return b32BitIndices ? 4 : 2; + } + + bool Is32BitIndices() const + { + return b32BitIndices; + } + + int32 GetNumIndices() const + { + return Data.Num() / GetStride(); + } + + TArray& GetData() { return Data; } + + void FillUpdateParams(FRuntimeMeshSectionIndexBufferParams& Params); + + friend FArchive& operator <<(FArchive& Ar, FSectionIndexBuffer& Buffer) + { + Ar << const_cast(Buffer.b32BitIndices); + Ar << Buffer.Data; + return Ar; + } + }; + + + const EUpdateFrequency UpdateFrequency; + + /** Vertex buffer containing the positions for this section */ + FSectionPositionVertexBuffer PositionBuffer; + + /** Vertex buffer containing the tangents for this section */ + FSectionTangentsVertexBuffer TangentsBuffer; + + /** Vertex buffer containing the UVs for this section */ + FSectionUVsVertexBuffer UVsBuffer; + + /** Vertex buffer containing the colors for this section */ + FSectionColorVertexBuffer ColorBuffer; + + FSectionIndexBuffer IndexBuffer; + FSectionIndexBuffer AdjacencyIndexBuffer; + + FBox LocalBoundingBox; + + bool bCollisionEnabled; + + bool bIsVisible; + + bool bCastsShadow; + + // TUniquePtr SyncRoot; +public: + FRuntimeMeshSection(FArchive& Ar); + FRuntimeMeshSection(bool bInUseHighPrecisionTangents, bool bInUseHighPrecisionUVs, int32 InNumUVs, bool b32BitIndices, EUpdateFrequency InUpdateFrequency/*, FRuntimeMeshLockProvider* InSyncRoot*/); + + // void SetNewLockProvider(FRuntimeMeshLockProvider* NewSyncRoot) + // { + // SyncRoot.Reset(NewSyncRoot); + // } + + // FRuntimeMeshLockProvider GetSyncRoot() { return SyncRoot->Get(); } + + bool IsCollisionEnabled() const { return bCollisionEnabled; } + bool IsVisible() const { return bIsVisible; } + bool ShouldRender() const { return IsVisible() && HasValidMeshData(); } + bool CastsShadow() const { return bCastsShadow; } + EUpdateFrequency GetUpdateFrequency() const { return UpdateFrequency; } + FBox GetBoundingBox() const { return LocalBoundingBox; } + + int32 GetNumVertices() const { return PositionBuffer.GetNumVertices(); } + int32 GetNumIndices() const { return IndexBuffer.GetNumIndices(); } + + bool HasValidMeshData() const { + if (IndexBuffer.GetNumIndices() <= 0) + return false; + if (PositionBuffer.GetNumVertices() <= 0) + return false; + if (TangentsBuffer.GetNumVertices() != 0 && TangentsBuffer.GetNumVertices() != PositionBuffer.GetNumVertices()) + return false; + if (UVsBuffer.GetNumVertices() != 0 && UVsBuffer.GetNumVertices() != PositionBuffer.GetNumVertices()) + return false; + if (ColorBuffer.GetNumVertices() != 0 && ColorBuffer.GetNumVertices() != PositionBuffer.GetNumVertices()) + return false; + return true; + } + + void SetVisible(bool bNewVisible) + { + bIsVisible = bNewVisible; + } + void SetCastsShadow(bool bNewCastsShadow) + { + bCastsShadow = bNewCastsShadow; + } + void SetCollisionEnabled(bool bNewCollision) + { + bCollisionEnabled = bNewCollision; + } + + void UpdatePositionBuffer(TArray& InVertices, bool bUseMove) + { + PositionBuffer.SetData(InVertices, bUseMove); + UpdateBoundingBox(); + } + + template + void UpdatePositionBuffer(const TArray& InVertices, const FBox* BoundingBox = nullptr) + { + PositionBuffer.SetData(InVertices); + + if (BoundingBox) + { + LocalBoundingBox = *BoundingBox; + } + else + { + UpdateBoundingBox(); + } + } + + void UpdateTangentsBuffer(TArray& InVertices, bool bUseMove) + { + TangentsBuffer.SetData(InVertices, bUseMove); + } + + template + void UpdateTangentsBuffer(const TArray& InVertices) + { + TangentsBuffer.SetData(InVertices); + } + + void UpdateUVsBuffer(TArray& InVertices, bool bUseMove) + { + UVsBuffer.SetData(InVertices, bUseMove); + } + + template + void UpdateUVsBuffer(const TArray& InVertices) + { + UVsBuffer.SetData(InVertices); + } + + void UpdateColorBuffer(TArray& InVertices, bool bUseMove) + { + ColorBuffer.SetData(InVertices, bUseMove); + } + + template + void UpdateColorBuffer(const TArray& InVertices) + { + ColorBuffer.SetData(InVertices); + } + + void UpdateIndexBuffer(TArray& InIndices, bool bUseMove) + { + IndexBuffer.SetData(InIndices, bUseMove); + } + + template + void UpdateIndexBuffer(const TArray& InIndices) + { + IndexBuffer.SetData(InIndices); + } + + template + void UpdateAdjacencyIndexBuffer(const TArray& InIndices) + { + AdjacencyIndexBuffer.SetData(InIndices); + } + + TSharedPtr GetSectionMeshAccessor() + { + return MakeShared(TangentsBuffer.IsUsingHighPrecision(), UVsBuffer.IsUsingHighPrecision(), UVsBuffer.NumUVs(), IndexBuffer.Is32BitIndices(), + &PositionBuffer.GetData(), &TangentsBuffer.GetData(), &UVsBuffer.GetData(), &ColorBuffer.GetData(), &IndexBuffer.GetData()); + } + + TUniquePtr GetSectionMeshUpdater(const FRuntimeMeshDataPtr& ParentData, int32 SectionIndex, ESectionUpdateFlags UpdateFlags, FRuntimeMeshLockProvider* LockProvider, bool bIsReadonly) + { + return TUniquePtr(new FRuntimeMeshScopedUpdater(ParentData, SectionIndex, UpdateFlags, TangentsBuffer.IsUsingHighPrecision(), UVsBuffer.IsUsingHighPrecision(), UVsBuffer.NumUVs(), IndexBuffer.Is32BitIndices(), + &PositionBuffer.GetData(), &TangentsBuffer.GetData(), &UVsBuffer.GetData(), &ColorBuffer.GetData(), &IndexBuffer.GetData(), LockProvider, bIsReadonly)); + } + + TSharedPtr GetTessellationIndexAccessor() + { + return MakeShared(AdjacencyIndexBuffer.Is32BitIndices(), &AdjacencyIndexBuffer.GetData()); + } + + + + + + + + + bool CheckTangentBuffer(bool bInUseHighPrecision) const + { + return TangentsBuffer.IsUsingHighPrecision() == bInUseHighPrecision; + } + + bool CheckUVBuffer(bool bInUseHighPrecision, int32 InNumUVs) const + { + return UVsBuffer.IsUsingHighPrecision() == bInUseHighPrecision && UVsBuffer.NumUVs() == InNumUVs; + } + + bool CheckIndexBufferSize(bool b32BitIndices) const + { + return b32BitIndices == IndexBuffer.Is32BitIndices(); + } + + + + TSharedPtr GetSectionCreationParams(); + + TSharedPtr GetSectionUpdateData(ERuntimeMeshBuffersToUpdate BuffersToUpdate); + + TSharedPtr GetSectionPropertyUpdateData(); + + void UpdateBoundingBox(); + void SetBoundingBox(const FBox& InBoundingBox) { LocalBoundingBox = InBoundingBox; } + + int32 GetCollisionData(TArray& OutPositions, TArray& OutIndices, TArray& OutUVs); + + + friend FArchive& operator <<(FArchive& Ar, FRuntimeMeshSection& MeshData) + { + Ar << const_cast(MeshData.UpdateFrequency); + + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) >= FRuntimeMeshVersion::RuntimeMeshComponentUE4_19) + { + Ar << MeshData.PositionBuffer; + Ar << MeshData.TangentsBuffer; + Ar << MeshData.UVsBuffer; + Ar << MeshData.ColorBuffer; + } + else + { + // This is a hack to read the old data and ignore it + Ar << MeshData.PositionBuffer; + Ar << MeshData.PositionBuffer; + Ar << MeshData.PositionBuffer; + } + + + Ar << MeshData.IndexBuffer; + Ar << MeshData.AdjacencyIndexBuffer; + + Ar << MeshData.LocalBoundingBox; + + Ar << MeshData.bCollisionEnabled; + Ar << MeshData.bIsVisible; + Ar << MeshData.bCastsShadow; + + // This is a hack to read the old data and ignore it + if (Ar.CustomVer(FRuntimeMeshVersion::GUID) < FRuntimeMeshVersion::RuntimeMeshComponentUE4_19) + { + TArray NullPositions; + TArray NullIndices; + MeshData.PositionBuffer.SetData(NullPositions); + MeshData.IndexBuffer.SetData(NullIndices, false); + MeshData.AdjacencyIndexBuffer.SetData(NullIndices, false); + } + + return Ar; + } +}; + + + + +/** Smart pointer to a Runtime Mesh Section */ +using FRuntimeMeshSectionPtr = TSharedPtr; + + + + +FORCEINLINE static FArchive& operator <<(FArchive& Ar, FRuntimeMeshSectionPtr& Section) +{ + if (Ar.IsSaving()) + { + bool bHasSection = Section.IsValid(); + Ar << bHasSection; + if (bHasSection) + { + Ar << *Section.Get(); + } + } + else if (Ar.IsLoading()) + { + bool bHasSection; + Ar << bHasSection; + if (bHasSection) + { + Section = MakeShared(Ar); + } + } + return Ar; +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshShapeGenerator.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshShapeGenerator.h new file mode 100755 index 0000000000..65a78ac8bc --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshShapeGenerator.h @@ -0,0 +1,78 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "RuntimeMeshGenericVertex.h" +#include "RuntimeMeshBlueprint.h" +#include "RuntimeMeshBuilder.h" +#include "RuntimeMeshShapeGenerator.generated.h" + +typedef TFunction FVerticesBuilderFunction; +typedef TFunction FTrianglesBuilderFunction; + +/** + * + */ +UCLASS() +class RUNTIMEMESHCOMPONENT_API URuntimeMeshShapeGenerator : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + +public: + + /** Add a quad, specified by four indices, to a triangle index buffer as two triangles. */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void ConvertQuadToTriangles(UPARAM(ref) TArray& Triangles, int32 Vert0, int32 Vert1, int32 Vert2, int32 Vert3); + + + /** Generate vertex and index buffer for a simple box, given the supplied dimensions. Normals, UVs and tangents are also generated for each vertex. */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CreateBoxMesh(FVector BoxRadius, TArray& Vertices, TArray& Triangles, TArray& Normals, TArray& UVs, TArray& Tangents); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CreateBoxMeshPacked(FVector BoxRadius, TArray& Vertices, TArray& Triangles); + + static void CreateBoxMesh(FVector BoxRadius, TArray& Vertices, TArray& Triangles); + + static void CreateBoxMesh(FVector BoxRadius, const TSharedPtr& MeshBuilder); + + static void CreateBoxMesh(FVector BoxRadius, FRuntimeMeshAccessor& MeshBuilder); + + /** + * Generate an index buffer for a grid of quads. + * @param NumX Number of vertices in X direction (must be >= 2) + * @param NumY Number of vertices in y direction (must be >= 2) + * @param bWinding Reverses winding of indices generated for each quad + * @out Triangles Output index buffer + */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CreateGridMeshTriangles(int32 NumX, int32 NumY, bool bWinding, TArray& Triangles); + + /** + * Generate a grid mesh, from the specified size and number of subdivisions. + */ + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles, TArray& Normals, TArray& UVs, TArray& Tangents); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void CreateGridMeshPacked(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles); + + static void CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, TArray& Vertices, TArray& Triangles); + + static void CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, const TSharedPtr& MeshBuilder); + + + +public: + + static void ConvertQuadToTriangles(TFunction TrianglesBuilder, int32 Vert0, int32 Vert1, int32 Vert2, int32 Vert3); + + static void CreateBoxMesh(FVector BoxRadius, FVerticesBuilderFunction VerticesBuilder, FTrianglesBuilderFunction TrianglesBuilder); + + static void CreateGridMeshTriangles(int32 NumX, int32 NumY, bool bWinding, FTrianglesBuilderFunction TrianglesBuilder); + + static void CreateGridMesh(float Width, float Height, int32 NumSubdivisionsX, int32 NumSubdivisionsY, FVerticesBuilderFunction VerticesBuilder, FTrianglesBuilderFunction TrianglesBuilder); + +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSlicer.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSlicer.h new file mode 100755 index 0000000000..09240d73dc --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/Public/RuntimeMeshSlicer.h @@ -0,0 +1,76 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "RuntimeMeshBuilder.h" +#include "RuntimeMeshSlicer.generated.h" + + +struct FUtilPoly2D; +struct FUtilEdge3D; +struct FKConvexElem; + +/** Options for creating cap geometry when slicing */ +UENUM() +enum class ERuntimeMeshSlicerCapOption : uint8 +{ + /** Do not create cap geometry */ + NoCap, + /** Add a new section to ProceduralMesh for cap */ + CreateNewSectionForCap, + /** Add cap geometry to existing last section */ + UseLastSectionForCap +}; + +/** + * + */ +UCLASS() +class RUNTIMEMESHCOMPONENT_API URuntimeMeshSlicer : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + + + /** + * Utility to test what side of a plane the box is on. + * Returns 1 if on positive side of plane + * Returns -1 if on negative side of plane + * Returns 0 if intersecting plane + */ + static int32 CompareBoxPlane(const FBox& InBox, const FPlane& InPlane); + + /** + * Take two RuntimeMeshAccesorVertex's and interpolate all their values + */ + static FRuntimeMeshAccessorVertex InterpolateVert(const FRuntimeMeshAccessorVertex& V0, const FRuntimeMeshAccessorVertex& V1, float Alpha); + + /** Transform triangle from 2D to 3D static-mesh triangle. */ + static void Transform2DPolygonTo3D(const FUtilPoly2D& InPoly, const FMatrix& InMatrix, TSharedPtr OutMesh); + + /** Given a polygon, decompose into triangles. */ + static bool TriangulatePoly(TSharedPtr Mesh, int32 VertBase, const FVector& PolyNormal); + + /** Util to slice a convex hull with a plane */ + static void SliceConvexElem(const FKConvexElem& InConvex, const FPlane& SlicePlane, TArray& OutConvexVerts); + + /** Slice Convex Collision of a URuntimeMesh */ + static void SliceRuntimeMeshConvexCollision(URuntimeMesh* InRuntimeMesh, URuntimeMesh* OutOtherHalf, FVector PlanePosition, FVector PlaneNormal); + + /** Slice mesh data of section within URuntimeMesh */ + static void SliceRuntimeMeshSection(const FRuntimeMeshDataPtr& InRuntimeMesh, const FRuntimeMeshDataPtr& OutOtherHalf, int32 SectionIndex, const FPlane& SlicePlane, TArray& ClipEdges); + + /** Cap slice opening of URuntimeMesh */ + static int32 CapMeshSlice(const FRuntimeMeshDataPtr& InRuntimeMesh, const FRuntimeMeshDataPtr& OutOtherHalf, TArray& ClipEdges, const FPlane& SlicePlane, FVector PlaneNormal, ERuntimeMeshSlicerCapOption CapOption); + + +public: + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void SliceRuntimeMesh(URuntimeMesh* InRuntimeMesh, FVector PlanePosition, FVector PlaneNormal, URuntimeMesh* OutOtherHalf, ERuntimeMeshSlicerCapOption CapOption, UMaterialInterface* CapMaterial); + + UFUNCTION(BlueprintCallable, Category = "Components|RuntimeMesh") + static void SliceRuntimeMeshComponent(URuntimeMeshComponent* InRuntimeMesh, FVector PlanePosition, FVector PlaneNormal, bool bCreateOtherHalf, URuntimeMeshComponent*& OutOtherHalf, ERuntimeMeshSlicerCapOption CapOption, UMaterialInterface* CapMaterial); + +}; diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/RuntimeMeshComponent.Build.cs b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/RuntimeMeshComponent.Build.cs new file mode 100755 index 0000000000..ec07ad6016 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponent/RuntimeMeshComponent.Build.cs @@ -0,0 +1,56 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +using UnrealBuildTool; + +public class RuntimeMeshComponent : ModuleRules +{ + public RuntimeMeshComponent(ReadOnlyTargetRules rules) : base(rules) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + "RuntimeMeshComponent/Public" + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + "RuntimeMeshComponent/Private", + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + // ... add private dependencies that you statically link with here ... + "RenderCore", + "ShaderCore", + "RHI", + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.cpp new file mode 100755 index 0000000000..9707616fbf --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.cpp @@ -0,0 +1,254 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "RuntimeMeshComponentDetails.h" +#include "RuntimeMeshComponent.h" +#include "DlgPickAssetPath.h" +#include "IAssetTools.h" +#include "AssetToolsModule.h" +#include "AssetRegistryModule.h" +#include "PhysicsEngine/PhysicsSettings.h" +#include "PhysicsEngine/BodySetup.h" +#include "IDetailCustomization.h" +#include "DetailCategoryBuilder.h" +#include "DetailWidgetRow.h" +#include "RawMesh.h" + +#define LOCTEXT_NAMESPACE "RuntimeMeshComponentDetails" + +TSharedRef FRuntimeMeshComponentDetails::MakeInstance() +{ + return MakeShareable(new FRuntimeMeshComponentDetails); +} + +void FRuntimeMeshComponentDetails::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) +{ + IDetailCategoryBuilder& RuntimeMeshCategory = DetailBuilder.EditCategory("RuntimeMesh"); + + const FText ConvertToStaticMeshText = LOCTEXT("ConvertToStaticMesh", "Create StaticMesh"); + + // Cache set of selected things +#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION >= 18 + SelectedObjectsList = DetailBuilder.GetDetailsView()->GetSelectedObjects(); +#else + SelectedObjectsList = DetailBuilder.GetDetailsView().GetSelectedObjects(); +#endif + + RuntimeMeshCategory.AddCustomRow(ConvertToStaticMeshText, false) + .NameContent() + [ + SNullWidget::NullWidget + ] + .ValueContent() + .VAlign(VAlign_Center) + .MaxDesiredWidth(250) + [ + SNew(SButton) + .VAlign(VAlign_Center) + .ToolTipText(LOCTEXT("ConvertToStaticMeshTooltip", "Create a new StaticMesh asset using current geometry from this RuntimeMeshComponent. Does not modify instance.")) + .OnClicked(this, &FRuntimeMeshComponentDetails::ClickedOnConvertToStaticMesh) + .IsEnabled(this, &FRuntimeMeshComponentDetails::ConvertToStaticMeshEnabled) + .Content() + [ + SNew(STextBlock) + .Text(ConvertToStaticMeshText) + ] + ]; +} + +URuntimeMeshComponent* FRuntimeMeshComponentDetails::GetFirstSelectedRuntimeMeshComp() const +{ + // Find first selected valid RuntimeMeshComp + URuntimeMeshComponent* RuntimeMeshComp = nullptr; + for (const TWeakObjectPtr& Object : SelectedObjectsList) + { + URuntimeMeshComponent* TestRuntimeComp = Cast(Object.Get()); + // See if this one is good + if (TestRuntimeComp != nullptr && !TestRuntimeComp->IsTemplate()) + { + RuntimeMeshComp = TestRuntimeComp; + break; + } + } + + return RuntimeMeshComp; +} + + +bool FRuntimeMeshComponentDetails::ConvertToStaticMeshEnabled() const +{ + return GetFirstSelectedRuntimeMeshComp() != nullptr; +} + + +FReply FRuntimeMeshComponentDetails::ClickedOnConvertToStaticMesh() +{ + // Find first selected RuntimeMeshComp + URuntimeMeshComponent* RuntimeMeshComp = GetFirstSelectedRuntimeMeshComp(); + if (RuntimeMeshComp != nullptr) + { + FString NewNameSuggestion = FString(TEXT("RuntimeMeshComp")); + FString PackageName = FString(TEXT("/Game/Meshes/")) + NewNameSuggestion; + FString Name; + FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked("AssetTools"); + AssetToolsModule.Get().CreateUniqueAssetName(PackageName, TEXT(""), PackageName, Name); + + TSharedPtr PickAssetPathWidget = + SNew(SDlgPickAssetPath) + .Title(LOCTEXT("ConvertToStaticMeshPickName", "Choose New StaticMesh Location")) + .DefaultAssetPath(FText::FromString(PackageName)); + + if (PickAssetPathWidget->ShowModal() == EAppReturnType::Ok) + { + // Get the full name of where we want to create the physics asset. + FString UserPackageName = PickAssetPathWidget->GetFullAssetPath().ToString(); + FName MeshName(*FPackageName::GetLongPackageAssetName(UserPackageName)); + + // Check if the user inputed a valid asset name, if they did not, give it the generated default name + if (MeshName == NAME_None) + { + // Use the defaults that were already generated. + UserPackageName = PackageName; + MeshName = *Name; + } + + // Raw mesh data we are filling in + FRawMesh RawMesh; + + // Unique Materials to apply to new mesh + TArray Materials; + + bool bUseHighPrecisionTangents = false; + bool bUseFullPrecisionUVs = false; + + const int32 NumSections = RuntimeMeshComp->GetNumSections(); + int32 VertexBase = 0; + int32 MaxUVs = 0; + for (int32 SectionIdx = 0; SectionIdx < NumSections; SectionIdx++) + { + auto MeshData = RuntimeMeshComp->GetSectionReadonly(SectionIdx); + check(MeshData.IsValid()); + + int32 NumUVs = MeshData->NumUVChannels(); + MaxUVs = FMath::Max(NumUVs, MaxUVs); + + // Fill out existing UV channels to start of this one + for (int32 Index = 0; Index < MaxUVs; Index++) + { + RawMesh.WedgeTexCoords[Index].SetNumZeroed(RawMesh.WedgeIndices.Num()); + } + + // Copy the vertex positions + int32 NumVertices = MeshData->NumVertices(); + for (int32 Index = 0; Index < NumVertices; Index++) + { + RawMesh.VertexPositions.Add(MeshData->GetPosition(Index)); + } + + // Copy wedges + int32 NumTris = MeshData->NumIndices(); + for (int32 Index = 0; Index < NumTris; Index++) + { + int32 VertexIndex = MeshData->GetIndex(Index); + RawMesh.WedgeIndices.Add(VertexIndex + VertexBase); + + FVector TangentX = MeshData->GetTangent(VertexIndex); + FVector TangentZ = MeshData->GetNormal(VertexIndex); + + FVector TangentY = (TangentX ^ TangentZ).GetSafeNormal() * MeshData->GetNormal(VertexIndex).W; + RawMesh.WedgeTangentX.Add(TangentX); + RawMesh.WedgeTangentY.Add(TangentY); + RawMesh.WedgeTangentZ.Add(TangentZ); + + + for (int32 UVIndex = 0; UVIndex < NumUVs; UVIndex++) + { + RawMesh.WedgeTexCoords[UVIndex].Add(MeshData->GetUV(VertexIndex, UVIndex)); + } + + RawMesh.WedgeColors.Add(MeshData->GetColor(VertexIndex)); + } + + // Find a material index for this section. + UMaterialInterface* Material = RuntimeMeshComp->GetSectionMaterial(SectionIdx); + int32 MaterialIndex = Materials.AddUnique(FStaticMaterial(Material)); + + // copy face info + for (int32 TriIdx = 0; TriIdx < NumTris / 3; TriIdx++) + { + // Set the face material + RawMesh.FaceMaterialIndices.Add(MaterialIndex); + + RawMesh.FaceSmoothingMasks.Add(0); // Assume this is ignored as bRecomputeNormals is false + } + + // Update offset for creating one big index/vertex buffer + VertexBase += NumVertices; + } + + // Fill out existing UV channels to start of this one + for (int32 Index = 0; Index < MaxUVs; Index++) + { + RawMesh.WedgeTexCoords[Index].SetNumZeroed(RawMesh.WedgeIndices.Num()); + } + + // If we got some valid data. + if (RawMesh.VertexPositions.Num() >= 3 && RawMesh.WedgeIndices.Num() >= 3) + { + // Then find/create it. + UPackage* Package = CreatePackage(NULL, *UserPackageName); + check(Package); + + // Create StaticMesh object + UStaticMesh* StaticMesh = NewObject(Package, MeshName, RF_Public | RF_Standalone); + StaticMesh->InitResources(); + + StaticMesh->LightingGuid = FGuid::NewGuid(); + + // Add source to new StaticMesh + FStaticMeshSourceModel* SrcModel = new (StaticMesh->SourceModels) FStaticMeshSourceModel(); + SrcModel->BuildSettings.bRecomputeNormals = false; + SrcModel->BuildSettings.bRecomputeTangents = false; + SrcModel->BuildSettings.bRemoveDegenerates = false; + SrcModel->BuildSettings.bUseHighPrecisionTangentBasis = bUseHighPrecisionTangents; + SrcModel->BuildSettings.bUseFullPrecisionUVs = bUseFullPrecisionUVs; + SrcModel->BuildSettings.bGenerateLightmapUVs = true; + SrcModel->BuildSettings.SrcLightmapIndex = 0; + SrcModel->BuildSettings.DstLightmapIndex = 1; + SrcModel->RawMeshBulkData->SaveRawMesh(RawMesh); + + // Set the materials used for this static mesh + StaticMesh->StaticMaterials = Materials; + int32 NumMaterials = StaticMesh->StaticMaterials.Num(); + + // Set up the SectionInfoMap to enable collision + for (int32 SectionIdx = 0; SectionIdx < NumMaterials; SectionIdx++) + { + FMeshSectionInfo Info = StaticMesh->SectionInfoMap.Get(0, SectionIdx); + Info.MaterialIndex = SectionIdx; + Info.bEnableCollision = true; + StaticMesh->SectionInfoMap.Set(0, SectionIdx, Info); + } + + // Configure body setup for working collision. + StaticMesh->CreateBodySetup(); + StaticMesh->BodySetup->CollisionTraceFlag = CTF_UseComplexAsSimple; + + // Build mesh from source + StaticMesh->Build(false); + + // Make package dirty. + StaticMesh->MarkPackageDirty(); + + StaticMesh->PostEditChange(); + + // Notify asset registry of new asset + FAssetRegistryModule::AssetCreated(StaticMesh); + } + } + } + + return FReply::Handled(); +} + + +#undef LOCTEXT_NAMESPACE \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.h new file mode 100755 index 0000000000..177b2e71c5 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentDetails.h @@ -0,0 +1,27 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once +#include "IDetailCustomization.h" +#include "DetailLayoutBuilder.h" + +class FRuntimeMeshComponentDetails : public IDetailCustomization +{ +public: + /** Makes a new instance of this detail layout class for a specific detail view requesting it */ + static TSharedRef MakeInstance(); + + /** IDetailCustomization interface */ + virtual void CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) override; + + /** Handle clicking the convert button */ + FReply ClickedOnConvertToStaticMesh(); + + /** Is the convert button enabled */ + bool ConvertToStaticMeshEnabled() const; + + /** Util to get the RuntimeMeshComponent we want to convert */ + class URuntimeMeshComponent* GetFirstSelectedRuntimeMeshComp() const; + + /** Cached array of selected objects */ + TArray< TWeakObjectPtr > SelectedObjectsList; +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentEditorPlugin.cpp b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentEditorPlugin.cpp new file mode 100755 index 0000000000..8000ddf562 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Private/RuntimeMeshComponentEditorPlugin.cpp @@ -0,0 +1,33 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#include "IRuntimeMeshComponentEditorPlugin.h" +#include "PropertyEditorModule.h" +#include "RuntimeMeshComponent.h" +#include "RuntimeMeshComponentDetails.h" + + + +class FRuntimeMeshComponentEditorPlugin : public IRuntimeMeshComponentEditorPlugin +{ + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; +}; + +IMPLEMENT_MODULE(FRuntimeMeshComponentEditorPlugin, RuntimeMeshComponentEditor) + + + +void FRuntimeMeshComponentEditorPlugin::StartupModule() +{ + { + FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); + PropertyModule.RegisterCustomClassLayout(URuntimeMeshComponent::StaticClass()->GetFName(), FOnGetDetailCustomizationInstance::CreateStatic(&FRuntimeMeshComponentDetails::MakeInstance)); + } +} + + +void FRuntimeMeshComponentEditorPlugin::ShutdownModule() +{ + +} diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Public/IRuntimeMeshComponentEditorPlugin.h b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Public/IRuntimeMeshComponentEditorPlugin.h new file mode 100755 index 0000000000..3f8c20938d --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/Public/IRuntimeMeshComponentEditorPlugin.h @@ -0,0 +1,36 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +#pragma once + +#include "ModuleManager.h" + + +/** +* The public interface to this module +*/ +class IRuntimeMeshComponentEditorPlugin : public IModuleInterface +{ + +public: + + /** + * Singleton-like access to this module's interface. This is just for convenience! + * Beware of calling this during the shutdown phase, though. Your module might have been unloaded already. + * + * @return Returns singleton instance, loading the module on demand if needed + */ + static inline IRuntimeMeshComponentEditorPlugin& Get() + { + return FModuleManager::LoadModuleChecked< IRuntimeMeshComponentEditorPlugin >("RuntimeMeshComponentEditorPlugin"); + } + + /** + * Checks to see if this module is loaded and ready. It is only valid to call Get() if IsAvailable() returns true. + * + * @return True if the module is loaded and ready to use + */ + static inline bool IsAvailable() + { + return FModuleManager::Get().IsModuleLoaded("RuntimeMeshComponentEditorPlugin"); + } +}; \ No newline at end of file diff --git a/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/RuntimeMeshComponentEditor.Build.cs b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/RuntimeMeshComponentEditor.Build.cs new file mode 100755 index 0000000000..42c02295a2 --- /dev/null +++ b/wrappers/unrealengine4/Plugins/RuntimeMeshComponent/Source/RuntimeMeshComponentEditor/RuntimeMeshComponentEditor.Build.cs @@ -0,0 +1,63 @@ +// Copyright 2016-2018 Chris Conway (Koderz). All Rights Reserved. + +using UnrealBuildTool; + +public class RuntimeMeshComponentEditor : ModuleRules +{ + public RuntimeMeshComponentEditor(ReadOnlyTargetRules rules) : base(rules) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + "RuntimeMeshComponentEditor/Public" + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + "RuntimeMeshComponentEditor/Private", + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + // ... add other public dependencies that you statically link with here ... + } + ); + + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "CoreUObject", + "Engine", + // ... add private dependencies that you statically link with here ... + "RenderCore", + "ShaderCore", + "RHI", + "Slate", + "SlateCore", + "UnrealEd", + "PropertyEditor", + "RawMesh", + "AssetTools", + "AssetRegistry", + + "RuntimeMeshComponent", + } + ); + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/wrappers/unrealengine4/README.md b/wrappers/unrealengine4/README.md new file mode 100755 index 0000000000..cfc01a506d --- /dev/null +++ b/wrappers/unrealengine4/README.md @@ -0,0 +1,193 @@ +# UnrealEngine4 Wrapper for RealSense SDK 2.0 + +![alt text](doc/img/demo.jpg) + +_Level with examples demonstrating streaming depth, color (IR and external RGB) and pointcloud in Unreal Engine 4._ +## Overview + +UnrealEngine4 wrapper shows how to use RealSense features via Blueprints (UE4 version 4.19+). At the moment it provides next functionality: +* enumerate devices/sensors/options/profiles +* load and save configuration presets +* tune sensor options +* access live sensor streams via textures +* record and playback sensor streams +* process raw data in shader +* align depth/color streams +* generate and render point cloud mesh + +## Getting Started + +Download and install [RealSense SDK 2.0](https://github.com/IntelRealSense/librealsense/releases) + +Download wrapper and [generate project](https://wiki.unrealengine.com/Generate_Visual_Studio_Project) for RealSenseUE.uproject + +Copy C:\Program Files (x86)\Intel RealSense SDK 2.0\bin\x64\realsense2.dll to engine bin folder C:\Program Files\Epic Games\UE_4.19\Engine\Binaries\Win64\ + +In case RealSense SDK was installed in custom folder: +* edit file RealSense-UE4-Wrapper\Plugins\RealSense\Source\RealSense\RealSense.Build.cs +* update line `string RealSenseDirectory = "REALSENSE_SDK_PATH_HERE"` + +Build RealSenseUE.sln using DevelopmentEditor configuration + +Start and play RealSenseUE.uproject to see some live data + +## Next steps + +Check out prefab BP_RealSenseAPI, it shows functionality exposed to Blueprints and a few examples: +* ExEnumerateHardware - get connected devices/sensors and print some info +* ExModifyOption - modify specific sensor option +* ExPresetLoadSave - load and save device configuration preset +* ExStreamConfiguration - enable/disable streams, set video mode +* ExRecordPlayback - record and playback demo + +Check out prefab BP_RealSenseInspector, it simplifies stream configuration and management, also binds live data to scene objects. + +## Hardware inspector + +Hardware inspector allows to check connected hardware and tune sensor options via editor. This feature is for debugging only and changes are not saved automatically. It's possible to load and save configuration presets using corresponding buttons in hardware inspector dropdown or via blueprint functions. + +Preset files can be downloaded [here](https://github.com/IntelRealSense/librealsense/wiki/D400-Series-Visual-Presets). + +![alt text](doc/img/hw_inspector.jpg) + +_Picture: hardware inspector_ + +## Device configuration + +DeviceSerial allows to select specific device by serial. If empty default device will be used. + +PipelineMode switches between CaptureOnly/Record/Playback: +* CaptureOnly - fetch and render live data +* Record - fetch and render live data but also record it to specified file +* Playback - load previously recorded file and loop it content + +EnablePolling switches poll/wait update mode. Poll mode is checking for data with specified rate, wait mode is blocking until data is available. + +![alt text](doc/img/device_dropdown.jpg) + +_Picture: mode inspector_ + +## Stream configuration + +Each stream has it's own dropdown with enable/disable flag and video mode selector. These options should be configured before starting RealSenseInspector. Restarting is required to change video mode. Enable/disable flag can be used to pause/resume already running stream. + +Depth can provide two textures: raw and colorized. Colorized depth is soft-processed based on Equalize/MinMax/Colormap settings. Avoid using colorized depth on high resolutions/rates. + +In case running both depth and infrared they should be configured to same video mode. + +![alt text](doc/img/stream_config.jpg) + +_Picture: depth stream inspector_ + +## Point cloud configuration + +Point cloud support is experimental and has a lot of flaws. Current implementation uses third-party plugin for dynamic mesh generation and should be optimized. + +* PclScale - allows to scale the whole cloud +* PclVoxelSize - single point/voxel size in mm +* PclDensity - percentage of rendered points +* PclRenderRate - how often the PCL mesh is updated (0.5 means two times per second) + +![alt text](doc/img/pcl_config.jpg) + +_Picture: point cloud inspector_ + +## Blueprint API + +`RealSenseContext` is global object initialized at plugin load. It wraps native RealSense library and provides device management functions. + +![alt text](doc/img/bp_get_context.jpg) + +_Picture: get context blueprint_ + +After getting the context devices can be enumerated. Each device contains a few sensors, each sensor has some options. Sensor profile contains video mode and frame rate. + +![alt text](doc/img/bp_enum_devices.jpg) + +_Picture: enumerate devices blueprint_ + +![alt text](doc/img/bp_enum_sensors.jpg) + +_Picture: enumerate sensors blueprint_ + +![alt text](doc/img/bp_enum_options.jpg) + +_Picture: enumerate options blueprint_ + +Sensor options can be tuned one by one or using preset load/save functions. + +![alt text](doc/img/bp_set_option.jpg) + +_Picture: get and set options value_ + +![alt text](doc/img/bp_load_save_preset.jpg) + +_Picture: save and load preset blueprint_ + +`RealSenseInspector` provides stream configuration and management functions. It updates textures and PCL mesh. + +![alt text](doc/img/bp_get_inspector.jpg) + +_Picture: find Inspector blueprint_ + +Properties described in StreamConfiguration section also can be modified from Blueprints. + +![alt text](doc/img/bp_stream_config.jpg) + +_Picture: modify stream mode blueprint_ + +After configuration RealSenseInspector should be started with any PipelineMode. + +![alt text](doc/img/bp_start.jpg) + +_Picture: set mode blueprint_ + +Time to get texture objects and PCL mesh. + +![alt text](doc/img/bp_get_textures.jpg) + +_Picture: get stream texture blueprint_ + +![alt text](doc/img/bp_transform_pcl.jpg) + +_Picture: transform PCL mesh blueprint_ + +## Native code + +It's also possible to access wrapper from native code, check RealSenseTestActor.cpp for example: +```cpp +#include "RealSensePlugin.h" +#include "RealSenseContext.h" +#include "RealSenseDevice.h" +#include "RealSenseNative.h" + +ARealSenseTestActor::ARealSenseTestActor() +{ + auto Context = IRealSensePlugin::Get().GetContext(); + Context->QueryDevices(); + for (auto Device : Context->Devices) + { + UE_LOG(LogRealSenseDemo, Display, TEXT("Wrapper device %s"), *(Device->Name)); + } + + rs2::context_ref RsContext(Context->GetHandle()); + auto DeviceList = RsContext.query_devices(); + for (auto Device : DeviceList) + { + FString DevName(ANSI_TO_TCHAR(Device.get_info(RS2_CAMERA_INFO_NAME))); + UE_LOG(LogRealSenseDemo, Display, TEXT("Native device %s"), *DevName); + } +} +``` + +## Known Issues + +* Frame drop/timeout on high resolutions might be laggy (depends on the hosts hardware) +* High CPU usage (RealSenseSDK issue) +* ColorizedDepth is CPU bound +* PointCloud (PCL) has sometimes texture corruptions at thhe egdes (RealSenseSDK issue) +* PointCloud (PCL) update/rendering performance is somtime slow + +## License + +This project is licensed under the [Apache License](https://github.com/PaloAlto-Group/libRealsense_UE4_wrapper/blob/master/LICENSE), Version 2.0. diff --git a/wrappers/unrealengine4/RealSenseUE.uproject b/wrappers/unrealengine4/RealSenseUE.uproject new file mode 100755 index 0000000000..06bbe02ee9 --- /dev/null +++ b/wrappers/unrealengine4/RealSenseUE.uproject @@ -0,0 +1,16 @@ +{ + "FileVersion": 3, + "EngineAssociation": "4.19", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "RealSenseUE", + "Type": "Runtime", + "LoadingPhase": "Default", + "AdditionalDependencies": [ + "Engine" + ] + } + ] +} \ No newline at end of file diff --git a/wrappers/unrealengine4/Source/RealSenseUE.Target.cs b/wrappers/unrealengine4/Source/RealSenseUE.Target.cs new file mode 100755 index 0000000000..904740029b --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE.Target.cs @@ -0,0 +1,12 @@ +using UnrealBuildTool; +using System.Collections.Generic; + +public class RealSenseUETarget : TargetRules +{ + public RealSenseUETarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + + ExtraModuleNames.AddRange( new string[] { "RealSenseUE" } ); + } +} diff --git a/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.cpp b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.cpp new file mode 100755 index 0000000000..d64a93bf89 --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.cpp @@ -0,0 +1,42 @@ +#include "RealSenseUE.h" +#include "RealSenseTestActor.h" + +// wrapper headers +#include "RealSensePlugin.h" +#include "RealSenseContext.h" +#include "RealSenseDevice.h" + +// native headers (optional) +#include "RealSenseNative.h" + +ARealSenseTestActor::ARealSenseTestActor() +{ + PrimaryActorTick.bCanEverTick = true; + + auto Context = IRealSensePlugin::Get().GetContext(); + Context->QueryDevices(); + for (auto Device : Context->Devices) + { + UE_LOG(LogRealSenseDemo, Display, TEXT("Wrapper device %s"), *(Device->Name)); + } + + #if 0 + rs2::context_ref RsContext(Context->GetHandle()); + auto DeviceList = RsContext.query_devices(); + for (auto Device : DeviceList) + { + FString DevName(ANSI_TO_TCHAR(Device.get_info(RS2_CAMERA_INFO_NAME))); + UE_LOG(LogRealSenseDemo, Display, TEXT("Native device %s"), *DevName); + } + #endif +} + +void ARealSenseTestActor::BeginPlay() +{ + Super::BeginPlay(); +} + +void ARealSenseTestActor::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); +} diff --git a/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.h b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.h new file mode 100755 index 0000000000..10d38d09c6 --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseTestActor.h @@ -0,0 +1,20 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "RealSenseTestActor.generated.h" + +UCLASS(ClassGroup="RealSense", BlueprintType) +class REALSENSEUE_API ARealSenseTestActor : public AActor +{ + GENERATED_BODY() + +public: + ARealSenseTestActor(); + +protected: + virtual void BeginPlay() override; + +public: + virtual void Tick(float DeltaTime) override; +}; diff --git a/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.Build.cs b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.Build.cs new file mode 100755 index 0000000000..cd32d37227 --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.Build.cs @@ -0,0 +1,16 @@ +using UnrealBuildTool; + +public class RealSenseUE : ModuleRules +{ + public RealSenseUE(ReadOnlyTargetRules Target) : base(Target) + { + bEnableExceptions = true; + bUseRTTI = false; + + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" }); + PrivateDependencyModuleNames.AddRange(new string[] { }); + + PublicDependencyModuleNames.AddRange(new string[] { "RealSense" }); + PublicIncludePathModuleNames.AddRange(new string[] { "RealSense" }); + } +} diff --git a/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.cpp b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.cpp new file mode 100755 index 0000000000..f25157e18c --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.cpp @@ -0,0 +1,6 @@ +#include "RealSenseUE.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE(FDefaultGameModuleImpl, RealSenseUE, "RealSenseUE"); + +DEFINE_LOG_CATEGORY(LogRealSenseDemo); diff --git a/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.h b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.h new file mode 100755 index 0000000000..4c0afb127e --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUE/RealSenseUE.h @@ -0,0 +1,6 @@ +#pragma once + +#include "Core.h" +#include "Engine.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogRealSenseDemo, Log, All); diff --git a/wrappers/unrealengine4/Source/RealSenseUEEditor.Target.cs b/wrappers/unrealengine4/Source/RealSenseUEEditor.Target.cs new file mode 100755 index 0000000000..127d1e527c --- /dev/null +++ b/wrappers/unrealengine4/Source/RealSenseUEEditor.Target.cs @@ -0,0 +1,12 @@ +using UnrealBuildTool; +using System.Collections.Generic; + +public class RealSenseUEEditorTarget : TargetRules +{ + public RealSenseUEEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + + ExtraModuleNames.AddRange( new string[] { "RealSenseUE" } ); + } +} diff --git a/wrappers/unrealengine4/doc/img/bp_enum_devices.jpg b/wrappers/unrealengine4/doc/img/bp_enum_devices.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bc76001820b9e9afaa67ad4026d98628d6831c94 GIT binary patch literal 94325 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%0D&XMj|4(9KKj{Q<-&WE3 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↰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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/bp_enum_sensors.jpg b/wrappers/unrealengine4/doc/img/bp_enum_sensors.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bfb1cfdacba9814f84e8cf8b0dc21e24dac6292d GIT binary patch literal 87495 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∈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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/bp_set_option.jpg b/wrappers/unrealengine4/doc/img/bp_set_option.jpg new file mode 100755 index 0000000000000000000000000000000000000000..ab409ae642be9bd6c844291236daff19f921048d GIT binary patch literal 120349 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≥*FF&Yr=R(_q5*+`7umKx+^6ue;zU^DH>8FIhr@ zn6W1;_Nz|;WNv{EOF8W5*k^(@ZG>D@=4!nfMQizLe*!S7!ZjYcEzERm3hT3MII8S3 z*~Qi7ptUar+MTalArPoGHek5PS8dWS%1|k==Mvd_ap8C4nL8@_&m`@RZRG=+Z-?`= zT<3tMEeDHmDKTesN7hnHWRy~VL*BT&^bJnKR5Lor7zj!K@ut%URQJOU6DhKY@D}53km%=?oET8)Cd{@mewzFTUz@|>4 z(Q$=Sdy@(r7CX7fd|aX_E@B_j!!LA2f*z7y2-*gmBdtuesL+0Z%9MEhs)R{NX)7zJTi9O?z4ocLo|#ybwSUn4acC^rsyU(sosfx9*+sC*3I@ zsU9N3rzX`4T_2=pR=+-0P;4t0-gT4R^vk&! z06M6`s3?{<-j2O*T#q+7?m;5aU}%p)Dc)GW9E^687&@w)<_#~?>v{2-UMMCF==KCv zF5S!FX7Df5`u6DV;sc_@pO0qVbCvm?aX`w3p>94-RrLeF8z-i=`PMFjhy=G(4X9ix zy-q~*;)3RRIj>`fjMA4qx_v=K&Og35h0jmG;AoprFo9d0&)%UhiFWCGn^Eo`JbO-l zKIy+Yqj<|u`qf-8@E^{V;~uNIdJ)Cr!4tgSkc&BY`-nX%=~6d$+qMY`3Ii@^y6mIi_I)5lgLgU}GFCDSDo8GNOjAxlS!<>t z6`PeIK17;~OA}BjMvaREX&AWGYf;ImOJCBC!?n}X$4a!{(dN|z4l~HmM6W9sG6EgC z^bLh*`34guiWw!?mju2QbCW)%4Dz>{emOFvGVhEWi3$2Y?7e4HlUo-qiWNl!r70*N zLg>90>CzGikU)S0P)dRcMd?LAr72BX=mDf85JHE5G*Rij_o5;o9i*ug_l&vgujKeFC6XWsW+D|5~H%;#Z%Ww+6gqsxcieXdKBY#xOZK@{OUf%Xbe zmVihWZ>`U9z9i4iW3MtV-eNdXQyCl_yc#8dqRYD##30Wv3W$+mU#Fhp5h8GTIjA_TC30c z&29PTU;`QZk>rb7n|bwV8?#D;1cPgfsnNpy7f4$2Ra4k|85c$H*XFWhDq&beq(NOR z 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 YUo2Tz6d*n?k{&+DswC{e_iN<;1C`W(F#rGn literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/bp_start.jpg b/wrappers/unrealengine4/doc/img/bp_start.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e441312acf081401df213dbd6a58506e4b54624a GIT binary patch literal 56265 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 M8%D&0@nigd08FxOga7~l literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/bp_stream_config.jpg b/wrappers/unrealengine4/doc/img/bp_stream_config.jpg new file mode 100755 index 0000000000000000000000000000000000000000..1973c8e63741e5c0335ba55a183d7e74aca7397e GIT binary patch literal 90845 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μ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 b)g``Rh;kl`msy{U0YMCAB4NS&WBC67^Ba-5 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/demo.jpg b/wrappers/unrealengine4/doc/img/demo.jpg new file mode 100755 index 0000000000000000000000000000000000000000..d9274830916dbf779c81d7ad8a212883f2802028 GIT binary patch literal 96682 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Ŋ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 OMq{JLH0$v5$^Qcrvn3_~ literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/device_dropdown.jpg b/wrappers/unrealengine4/doc/img/device_dropdown.jpg new file mode 100755 index 0000000000000000000000000000000000000000..c7df50999acbf3da390dfa29341eddf81a2fcd30 GIT binary patch literal 57115 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

b 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 K^l$su{Qm+NDCSuJ literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/hw_inspector.jpg b/wrappers/unrealengine4/doc/img/hw_inspector.jpg new file mode 100755 index 0000000000000000000000000000000000000000..e7dfbd10a78dad264a0c97019dcd721c1c947deb GIT binary patch literal 48499 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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/pcl_config.jpg b/wrappers/unrealengine4/doc/img/pcl_config.jpg new file mode 100755 index 0000000000000000000000000000000000000000..bdd7d2968248dbeabe98cd6e52c675223dcf9861 GIT binary patch literal 70466 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 WBdvsPj!)){EMDpw^mD=2x&Hv;_9pBA literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/record_playback.jpg b/wrappers/unrealengine4/doc/img/record_playback.jpg new file mode 100755 index 0000000000000000000000000000000000000000..3c0122509dad8d91a6ddbe0611aa489401fa81b7 GIT binary patch literal 60770 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 literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/record_playback_ui.jpg b/wrappers/unrealengine4/doc/img/record_playback_ui.jpg new file mode 100755 index 0000000000000000000000000000000000000000..da5810e72bedb14b3d5a9a4ffdf96fc8ded5fedd GIT binary patch literal 106274 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

%11 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⋘!Vh`W5xJQ`c#)vhDk`3{EGy55pI$~Gm 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 H|6crG&+@Ah literal 0 HcmV?d00001 diff --git a/wrappers/unrealengine4/doc/img/stream_config.jpg b/wrappers/unrealengine4/doc/img/stream_config.jpg new file mode 100755 index 0000000000000000000000000000000000000000..5f9d7bd65d3574d0ee766e2fc403b383cefb4c00 GIT binary patch literal 76032 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

9EHWZUfnn25zx(lz^pfgkl1+WUUNn8 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 f{DFg7-<>fbYE993