From a12f2645c74f75859626ec59ba8a5c5de1fca7f1 Mon Sep 17 00:00:00 2001 From: drelaptop Date: Fri, 19 Oct 2018 11:28:12 +0800 Subject: [PATCH] remove useless chipmunk --- android/arm64-v8a/include/chipmunk/chipmunk.h | 241 ------ .../arm64-v8a/include/chipmunk/chipmunk_ffi.h | 107 --- .../include/chipmunk/chipmunk_private.h | 766 ------------------ .../include/chipmunk/chipmunk_types.h | 242 ------ .../include/chipmunk/chipmunk_unsafe.h | 66 -- .../arm64-v8a/include/chipmunk/cpArbiter.h | 145 ---- android/arm64-v8a/include/chipmunk/cpBB.h | 187 ----- android/arm64-v8a/include/chipmunk/cpBody.h | 189 ----- .../arm64-v8a/include/chipmunk/cpConstraint.h | 95 --- .../include/chipmunk/cpDampedRotarySpring.h | 58 -- .../include/chipmunk/cpDampedSpring.h | 68 -- .../arm64-v8a/include/chipmunk/cpGearJoint.h | 45 - .../include/chipmunk/cpGrooveJoint.h | 50 -- .../arm64-v8a/include/chipmunk/cpHastySpace.h | 27 - android/arm64-v8a/include/chipmunk/cpMarch.h | 28 - .../arm64-v8a/include/chipmunk/cpPinJoint.h | 50 -- .../arm64-v8a/include/chipmunk/cpPivotJoint.h | 47 -- .../arm64-v8a/include/chipmunk/cpPolyShape.h | 56 -- .../arm64-v8a/include/chipmunk/cpPolyline.h | 70 -- .../include/chipmunk/cpRatchetJoint.h | 50 -- android/arm64-v8a/include/chipmunk/cpRobust.h | 9 - .../include/chipmunk/cpRotaryLimitJoint.h | 45 - android/arm64-v8a/include/chipmunk/cpShape.h | 199 ----- .../include/chipmunk/cpSimpleMotor.h | 43 - .../arm64-v8a/include/chipmunk/cpSlideJoint.h | 55 -- android/arm64-v8a/include/chipmunk/cpSpace.h | 319 -------- .../include/chipmunk/cpSpatialIndex.h | 227 ------ .../arm64-v8a/include/chipmunk/cpTransform.h | 198 ----- android/arm64-v8a/include/chipmunk/cpVect.h | 230 ------ android/arm64-v8a/libchipmunk.a | Bin 373472 -> 0 bytes .../armeabi-v7a/include/chipmunk/chipmunk.h | 241 ------ .../include/chipmunk/chipmunk_ffi.h | 107 --- .../include/chipmunk/chipmunk_private.h | 766 ------------------ .../include/chipmunk/chipmunk_types.h | 242 ------ .../include/chipmunk/chipmunk_unsafe.h | 66 -- .../armeabi-v7a/include/chipmunk/cpArbiter.h | 145 ---- android/armeabi-v7a/include/chipmunk/cpBB.h | 187 ----- android/armeabi-v7a/include/chipmunk/cpBody.h | 189 ----- .../include/chipmunk/cpConstraint.h | 95 --- .../include/chipmunk/cpDampedRotarySpring.h | 58 -- .../include/chipmunk/cpDampedSpring.h | 68 -- .../include/chipmunk/cpGearJoint.h | 45 - .../include/chipmunk/cpGrooveJoint.h | 50 -- .../include/chipmunk/cpHastySpace.h | 27 - .../armeabi-v7a/include/chipmunk/cpMarch.h | 28 - .../armeabi-v7a/include/chipmunk/cpPinJoint.h | 50 -- .../include/chipmunk/cpPivotJoint.h | 47 -- .../include/chipmunk/cpPolyShape.h | 56 -- .../armeabi-v7a/include/chipmunk/cpPolyline.h | 70 -- .../include/chipmunk/cpRatchetJoint.h | 50 -- .../armeabi-v7a/include/chipmunk/cpRobust.h | 9 - .../include/chipmunk/cpRotaryLimitJoint.h | 45 - .../armeabi-v7a/include/chipmunk/cpShape.h | 199 ----- .../include/chipmunk/cpSimpleMotor.h | 43 - .../include/chipmunk/cpSlideJoint.h | 55 -- .../armeabi-v7a/include/chipmunk/cpSpace.h | 319 -------- .../include/chipmunk/cpSpatialIndex.h | 227 ------ .../include/chipmunk/cpTransform.h | 198 ----- android/armeabi-v7a/include/chipmunk/cpVect.h | 230 ------ android/armeabi-v7a/libchipmunk.a | Bin 190156 -> 0 bytes android/x86/include/chipmunk/chipmunk.h | 241 ------ android/x86/include/chipmunk/chipmunk_ffi.h | 107 --- .../x86/include/chipmunk/chipmunk_private.h | 766 ------------------ android/x86/include/chipmunk/chipmunk_types.h | 242 ------ .../x86/include/chipmunk/chipmunk_unsafe.h | 66 -- android/x86/include/chipmunk/cpArbiter.h | 145 ---- android/x86/include/chipmunk/cpBB.h | 187 ----- android/x86/include/chipmunk/cpBody.h | 189 ----- android/x86/include/chipmunk/cpConstraint.h | 95 --- .../include/chipmunk/cpDampedRotarySpring.h | 58 -- android/x86/include/chipmunk/cpDampedSpring.h | 68 -- android/x86/include/chipmunk/cpGearJoint.h | 45 - android/x86/include/chipmunk/cpGrooveJoint.h | 50 -- android/x86/include/chipmunk/cpHastySpace.h | 27 - android/x86/include/chipmunk/cpMarch.h | 28 - android/x86/include/chipmunk/cpPinJoint.h | 50 -- android/x86/include/chipmunk/cpPivotJoint.h | 47 -- android/x86/include/chipmunk/cpPolyShape.h | 56 -- android/x86/include/chipmunk/cpPolyline.h | 70 -- android/x86/include/chipmunk/cpRatchetJoint.h | 50 -- android/x86/include/chipmunk/cpRobust.h | 9 - .../x86/include/chipmunk/cpRotaryLimitJoint.h | 45 - android/x86/include/chipmunk/cpShape.h | 199 ----- android/x86/include/chipmunk/cpSimpleMotor.h | 43 - android/x86/include/chipmunk/cpSlideJoint.h | 55 -- android/x86/include/chipmunk/cpSpace.h | 319 -------- android/x86/include/chipmunk/cpSpatialIndex.h | 227 ------ android/x86/include/chipmunk/cpTransform.h | 198 ----- android/x86/include/chipmunk/cpVect.h | 230 ------ android/x86/libchipmunk.a | Bin 325800 -> 0 bytes ios/include/chipmunk/chipmunk.h | 245 ------ ios/include/chipmunk/chipmunk_ffi.h | 107 --- ios/include/chipmunk/chipmunk_private.h | 766 ------------------ ios/include/chipmunk/chipmunk_types.h | 242 ------ ios/include/chipmunk/chipmunk_unsafe.h | 66 -- ios/include/chipmunk/cpArbiter.h | 145 ---- ios/include/chipmunk/cpBB.h | 187 ----- ios/include/chipmunk/cpBody.h | 189 ----- ios/include/chipmunk/cpConstraint.h | 95 --- ios/include/chipmunk/cpDampedRotarySpring.h | 58 -- ios/include/chipmunk/cpDampedSpring.h | 68 -- ios/include/chipmunk/cpGearJoint.h | 45 - ios/include/chipmunk/cpGrooveJoint.h | 50 -- ios/include/chipmunk/cpHastySpace.h | 27 - ios/include/chipmunk/cpMarch.h | 28 - ios/include/chipmunk/cpPinJoint.h | 50 -- ios/include/chipmunk/cpPivotJoint.h | 47 -- ios/include/chipmunk/cpPolyShape.h | 56 -- ios/include/chipmunk/cpPolyline.h | 70 -- ios/include/chipmunk/cpRatchetJoint.h | 50 -- ios/include/chipmunk/cpRobust.h | 9 - ios/include/chipmunk/cpRotaryLimitJoint.h | 45 - ios/include/chipmunk/cpShape.h | 199 ----- ios/include/chipmunk/cpSimpleMotor.h | 43 - ios/include/chipmunk/cpSlideJoint.h | 55 -- ios/include/chipmunk/cpSpace.h | 319 -------- ios/include/chipmunk/cpSpatialIndex.h | 227 ------ ios/include/chipmunk/cpTransform.h | 198 ----- ios/include/chipmunk/cpVect.h | 230 ------ ios/libs/libchipmunk.a | Bin 839264 -> 0 bytes mac/include/chipmunk/chipmunk.h | 241 ------ mac/include/chipmunk/chipmunk_ffi.h | 107 --- mac/include/chipmunk/chipmunk_private.h | 766 ------------------ mac/include/chipmunk/chipmunk_types.h | 242 ------ mac/include/chipmunk/chipmunk_unsafe.h | 66 -- mac/include/chipmunk/cpArbiter.h | 145 ---- mac/include/chipmunk/cpBB.h | 187 ----- mac/include/chipmunk/cpBody.h | 189 ----- mac/include/chipmunk/cpConstraint.h | 95 --- mac/include/chipmunk/cpDampedRotarySpring.h | 58 -- mac/include/chipmunk/cpDampedSpring.h | 68 -- mac/include/chipmunk/cpGearJoint.h | 45 - mac/include/chipmunk/cpGrooveJoint.h | 50 -- mac/include/chipmunk/cpHastySpace.h | 27 - mac/include/chipmunk/cpMarch.h | 28 - mac/include/chipmunk/cpPinJoint.h | 50 -- mac/include/chipmunk/cpPivotJoint.h | 47 -- mac/include/chipmunk/cpPolyShape.h | 56 -- mac/include/chipmunk/cpPolyline.h | 70 -- mac/include/chipmunk/cpRatchetJoint.h | 50 -- mac/include/chipmunk/cpRobust.h | 9 - mac/include/chipmunk/cpRotaryLimitJoint.h | 45 - mac/include/chipmunk/cpShape.h | 199 ----- mac/include/chipmunk/cpSimpleMotor.h | 43 - mac/include/chipmunk/cpSlideJoint.h | 55 -- mac/include/chipmunk/cpSpace.h | 319 -------- mac/include/chipmunk/cpSpatialIndex.h | 227 ------ mac/include/chipmunk/cpTransform.h | 198 ----- mac/include/chipmunk/cpVect.h | 230 ------ mac/libs/libchipmunk.a | Bin 246224 -> 0 bytes versions.txt | 6 - win32/include/chipmunk/chipmunk.h | 245 ------ win32/include/chipmunk/chipmunk_ffi.h | 107 --- win32/include/chipmunk/chipmunk_private.h | 766 ------------------ win32/include/chipmunk/chipmunk_types.h | 242 ------ win32/include/chipmunk/chipmunk_unsafe.h | 66 -- win32/include/chipmunk/cpArbiter.h | 145 ---- win32/include/chipmunk/cpBB.h | 187 ----- win32/include/chipmunk/cpBody.h | 189 ----- win32/include/chipmunk/cpConstraint.h | 95 --- win32/include/chipmunk/cpDampedRotarySpring.h | 58 -- win32/include/chipmunk/cpDampedSpring.h | 68 -- win32/include/chipmunk/cpGearJoint.h | 45 - win32/include/chipmunk/cpGrooveJoint.h | 50 -- win32/include/chipmunk/cpHastySpace.h | 27 - win32/include/chipmunk/cpMarch.h | 28 - win32/include/chipmunk/cpPinJoint.h | 50 -- win32/include/chipmunk/cpPivotJoint.h | 47 -- win32/include/chipmunk/cpPolyShape.h | 56 -- win32/include/chipmunk/cpPolyline.h | 70 -- win32/include/chipmunk/cpRatchetJoint.h | 50 -- win32/include/chipmunk/cpRobust.h | 9 - win32/include/chipmunk/cpRotaryLimitJoint.h | 45 - win32/include/chipmunk/cpShape.h | 199 ----- win32/include/chipmunk/cpSimpleMotor.h | 43 - win32/include/chipmunk/cpSlideJoint.h | 55 -- win32/include/chipmunk/cpSpace.h | 319 -------- win32/include/chipmunk/cpSpatialIndex.h | 227 ------ win32/include/chipmunk/cpTransform.h | 198 ----- win32/include/chipmunk/cpVect.h | 230 ------ win32/libs/Debug/libchipmunk-2015.lib | Bin 2641300 -> 0 bytes win32/libs/Debug/libchipmunk.lib | Bin 3179954 -> 0 bytes win32/libs/libchipmunk-2015.lib | Bin 2641300 -> 0 bytes win32/libs/libchipmunk.lib | Bin 3179954 -> 0 bytes 184 files changed, 23486 deletions(-) delete mode 100644 android/arm64-v8a/include/chipmunk/chipmunk.h delete mode 100644 android/arm64-v8a/include/chipmunk/chipmunk_ffi.h delete mode 100644 android/arm64-v8a/include/chipmunk/chipmunk_private.h delete mode 100644 android/arm64-v8a/include/chipmunk/chipmunk_types.h delete mode 100644 android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpArbiter.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpBB.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpBody.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpConstraint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpDampedSpring.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpGearJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpGrooveJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpHastySpace.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpMarch.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpPinJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpPivotJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpPolyShape.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpPolyline.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpRatchetJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpRobust.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpShape.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpSimpleMotor.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpSlideJoint.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpSpace.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpSpatialIndex.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpTransform.h delete mode 100644 android/arm64-v8a/include/chipmunk/cpVect.h delete mode 100644 android/arm64-v8a/libchipmunk.a delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk_private.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk_types.h delete mode 100644 android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpArbiter.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpBB.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpBody.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpConstraint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpDampedSpring.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpGearJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpGrooveJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpHastySpace.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpMarch.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpPinJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpPivotJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpPolyShape.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpPolyline.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpRatchetJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpRobust.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpShape.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpSimpleMotor.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpSlideJoint.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpSpace.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpTransform.h delete mode 100644 android/armeabi-v7a/include/chipmunk/cpVect.h delete mode 100644 android/armeabi-v7a/libchipmunk.a delete mode 100644 android/x86/include/chipmunk/chipmunk.h delete mode 100644 android/x86/include/chipmunk/chipmunk_ffi.h delete mode 100644 android/x86/include/chipmunk/chipmunk_private.h delete mode 100644 android/x86/include/chipmunk/chipmunk_types.h delete mode 100644 android/x86/include/chipmunk/chipmunk_unsafe.h delete mode 100644 android/x86/include/chipmunk/cpArbiter.h delete mode 100644 android/x86/include/chipmunk/cpBB.h delete mode 100644 android/x86/include/chipmunk/cpBody.h delete mode 100644 android/x86/include/chipmunk/cpConstraint.h delete mode 100644 android/x86/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 android/x86/include/chipmunk/cpDampedSpring.h delete mode 100644 android/x86/include/chipmunk/cpGearJoint.h delete mode 100644 android/x86/include/chipmunk/cpGrooveJoint.h delete mode 100644 android/x86/include/chipmunk/cpHastySpace.h delete mode 100644 android/x86/include/chipmunk/cpMarch.h delete mode 100644 android/x86/include/chipmunk/cpPinJoint.h delete mode 100644 android/x86/include/chipmunk/cpPivotJoint.h delete mode 100644 android/x86/include/chipmunk/cpPolyShape.h delete mode 100644 android/x86/include/chipmunk/cpPolyline.h delete mode 100644 android/x86/include/chipmunk/cpRatchetJoint.h delete mode 100644 android/x86/include/chipmunk/cpRobust.h delete mode 100644 android/x86/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 android/x86/include/chipmunk/cpShape.h delete mode 100644 android/x86/include/chipmunk/cpSimpleMotor.h delete mode 100644 android/x86/include/chipmunk/cpSlideJoint.h delete mode 100644 android/x86/include/chipmunk/cpSpace.h delete mode 100644 android/x86/include/chipmunk/cpSpatialIndex.h delete mode 100644 android/x86/include/chipmunk/cpTransform.h delete mode 100644 android/x86/include/chipmunk/cpVect.h delete mode 100644 android/x86/libchipmunk.a delete mode 100644 ios/include/chipmunk/chipmunk.h delete mode 100644 ios/include/chipmunk/chipmunk_ffi.h delete mode 100644 ios/include/chipmunk/chipmunk_private.h delete mode 100644 ios/include/chipmunk/chipmunk_types.h delete mode 100644 ios/include/chipmunk/chipmunk_unsafe.h delete mode 100644 ios/include/chipmunk/cpArbiter.h delete mode 100644 ios/include/chipmunk/cpBB.h delete mode 100644 ios/include/chipmunk/cpBody.h delete mode 100644 ios/include/chipmunk/cpConstraint.h delete mode 100644 ios/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 ios/include/chipmunk/cpDampedSpring.h delete mode 100644 ios/include/chipmunk/cpGearJoint.h delete mode 100644 ios/include/chipmunk/cpGrooveJoint.h delete mode 100644 ios/include/chipmunk/cpHastySpace.h delete mode 100644 ios/include/chipmunk/cpMarch.h delete mode 100644 ios/include/chipmunk/cpPinJoint.h delete mode 100644 ios/include/chipmunk/cpPivotJoint.h delete mode 100644 ios/include/chipmunk/cpPolyShape.h delete mode 100644 ios/include/chipmunk/cpPolyline.h delete mode 100644 ios/include/chipmunk/cpRatchetJoint.h delete mode 100644 ios/include/chipmunk/cpRobust.h delete mode 100644 ios/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 ios/include/chipmunk/cpShape.h delete mode 100644 ios/include/chipmunk/cpSimpleMotor.h delete mode 100644 ios/include/chipmunk/cpSlideJoint.h delete mode 100644 ios/include/chipmunk/cpSpace.h delete mode 100644 ios/include/chipmunk/cpSpatialIndex.h delete mode 100644 ios/include/chipmunk/cpTransform.h delete mode 100644 ios/include/chipmunk/cpVect.h delete mode 100644 ios/libs/libchipmunk.a delete mode 100644 mac/include/chipmunk/chipmunk.h delete mode 100644 mac/include/chipmunk/chipmunk_ffi.h delete mode 100644 mac/include/chipmunk/chipmunk_private.h delete mode 100644 mac/include/chipmunk/chipmunk_types.h delete mode 100644 mac/include/chipmunk/chipmunk_unsafe.h delete mode 100644 mac/include/chipmunk/cpArbiter.h delete mode 100644 mac/include/chipmunk/cpBB.h delete mode 100644 mac/include/chipmunk/cpBody.h delete mode 100644 mac/include/chipmunk/cpConstraint.h delete mode 100644 mac/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 mac/include/chipmunk/cpDampedSpring.h delete mode 100644 mac/include/chipmunk/cpGearJoint.h delete mode 100644 mac/include/chipmunk/cpGrooveJoint.h delete mode 100644 mac/include/chipmunk/cpHastySpace.h delete mode 100644 mac/include/chipmunk/cpMarch.h delete mode 100644 mac/include/chipmunk/cpPinJoint.h delete mode 100644 mac/include/chipmunk/cpPivotJoint.h delete mode 100644 mac/include/chipmunk/cpPolyShape.h delete mode 100644 mac/include/chipmunk/cpPolyline.h delete mode 100644 mac/include/chipmunk/cpRatchetJoint.h delete mode 100644 mac/include/chipmunk/cpRobust.h delete mode 100644 mac/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 mac/include/chipmunk/cpShape.h delete mode 100644 mac/include/chipmunk/cpSimpleMotor.h delete mode 100644 mac/include/chipmunk/cpSlideJoint.h delete mode 100644 mac/include/chipmunk/cpSpace.h delete mode 100644 mac/include/chipmunk/cpSpatialIndex.h delete mode 100644 mac/include/chipmunk/cpTransform.h delete mode 100644 mac/include/chipmunk/cpVect.h delete mode 100644 mac/libs/libchipmunk.a delete mode 100644 win32/include/chipmunk/chipmunk.h delete mode 100644 win32/include/chipmunk/chipmunk_ffi.h delete mode 100644 win32/include/chipmunk/chipmunk_private.h delete mode 100644 win32/include/chipmunk/chipmunk_types.h delete mode 100644 win32/include/chipmunk/chipmunk_unsafe.h delete mode 100644 win32/include/chipmunk/cpArbiter.h delete mode 100644 win32/include/chipmunk/cpBB.h delete mode 100644 win32/include/chipmunk/cpBody.h delete mode 100644 win32/include/chipmunk/cpConstraint.h delete mode 100644 win32/include/chipmunk/cpDampedRotarySpring.h delete mode 100644 win32/include/chipmunk/cpDampedSpring.h delete mode 100644 win32/include/chipmunk/cpGearJoint.h delete mode 100644 win32/include/chipmunk/cpGrooveJoint.h delete mode 100644 win32/include/chipmunk/cpHastySpace.h delete mode 100644 win32/include/chipmunk/cpMarch.h delete mode 100644 win32/include/chipmunk/cpPinJoint.h delete mode 100644 win32/include/chipmunk/cpPivotJoint.h delete mode 100644 win32/include/chipmunk/cpPolyShape.h delete mode 100644 win32/include/chipmunk/cpPolyline.h delete mode 100644 win32/include/chipmunk/cpRatchetJoint.h delete mode 100644 win32/include/chipmunk/cpRobust.h delete mode 100644 win32/include/chipmunk/cpRotaryLimitJoint.h delete mode 100644 win32/include/chipmunk/cpShape.h delete mode 100644 win32/include/chipmunk/cpSimpleMotor.h delete mode 100644 win32/include/chipmunk/cpSlideJoint.h delete mode 100644 win32/include/chipmunk/cpSpace.h delete mode 100644 win32/include/chipmunk/cpSpatialIndex.h delete mode 100644 win32/include/chipmunk/cpTransform.h delete mode 100644 win32/include/chipmunk/cpVect.h delete mode 100644 win32/libs/Debug/libchipmunk-2015.lib delete mode 100644 win32/libs/Debug/libchipmunk.lib delete mode 100644 win32/libs/libchipmunk-2015.lib delete mode 100644 win32/libs/libchipmunk.lib diff --git a/android/arm64-v8a/include/chipmunk/chipmunk.h b/android/arm64-v8a/include/chipmunk/chipmunk.h deleted file mode 100644 index d7faf039..00000000 --- a/android/arm64-v8a/include/chipmunk/chipmunk.h +++ /dev/null @@ -1,241 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_H -#define CHIPMUNK_H - -#include -#include - -#ifdef WIN32 - // For alloca(). - #include - #define CP_EXPORT __declspec(dllexport) -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h b/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/android/arm64-v8a/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_private.h b/android/arm64-v8a/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/android/arm64-v8a/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_types.h b/android/arm64-v8a/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/android/arm64-v8a/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h b/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/android/arm64-v8a/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpArbiter.h b/android/arm64-v8a/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/android/arm64-v8a/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpBB.h b/android/arm64-v8a/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/android/arm64-v8a/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/android/arm64-v8a/include/chipmunk/cpBody.h b/android/arm64-v8a/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/android/arm64-v8a/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/arm64-v8a/include/chipmunk/cpConstraint.h b/android/arm64-v8a/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/android/arm64-v8a/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/android/arm64-v8a/include/chipmunk/cpDampedRotarySpring.h b/android/arm64-v8a/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/android/arm64-v8a/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpDampedSpring.h b/android/arm64-v8a/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/android/arm64-v8a/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpGearJoint.h b/android/arm64-v8a/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/android/arm64-v8a/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpGrooveJoint.h b/android/arm64-v8a/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/android/arm64-v8a/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpHastySpace.h b/android/arm64-v8a/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/android/arm64-v8a/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/android/arm64-v8a/include/chipmunk/cpMarch.h b/android/arm64-v8a/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/android/arm64-v8a/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/android/arm64-v8a/include/chipmunk/cpPinJoint.h b/android/arm64-v8a/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/android/arm64-v8a/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/android/arm64-v8a/include/chipmunk/cpPivotJoint.h b/android/arm64-v8a/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/android/arm64-v8a/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpPolyShape.h b/android/arm64-v8a/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/android/arm64-v8a/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpPolyline.h b/android/arm64-v8a/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/android/arm64-v8a/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/android/arm64-v8a/include/chipmunk/cpRatchetJoint.h b/android/arm64-v8a/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/android/arm64-v8a/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpRobust.h b/android/arm64-v8a/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/android/arm64-v8a/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/android/arm64-v8a/include/chipmunk/cpRotaryLimitJoint.h b/android/arm64-v8a/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/android/arm64-v8a/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpShape.h b/android/arm64-v8a/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/android/arm64-v8a/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSimpleMotor.h b/android/arm64-v8a/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/android/arm64-v8a/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSlideJoint.h b/android/arm64-v8a/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/android/arm64-v8a/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSpace.h b/android/arm64-v8a/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/android/arm64-v8a/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h b/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/android/arm64-v8a/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/arm64-v8a/include/chipmunk/cpTransform.h b/android/arm64-v8a/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/android/arm64-v8a/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/android/arm64-v8a/include/chipmunk/cpVect.h b/android/arm64-v8a/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/android/arm64-v8a/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/android/arm64-v8a/libchipmunk.a b/android/arm64-v8a/libchipmunk.a deleted file mode 100644 index 5f92bd39b49b63cf4d6605295d28b90181466bbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373472 zcmeFa4SZGAl{dWay$QJigb*S|g?n$phvDPK5CR58y$JyWM5GXv_OT_GB#>ynOael6 zN>JLyk7=Q0EOneQqOAnAL#H@}dEu4%HMF(!YHNLbp7DJe(P>d^hZa#X1Lgg%z4tn2 z-+j)7(2x1O&-0sofA^ey{(J4U)?Rzq_5bD`A^xr5od3Ycgc#C))@c#& z`!6pSf%EhS)|L}ka=zlPLT>KyLU;mN_-o0;V|HnQQ!SnrJ=n=vH z==S_WH^oHS|7{H-ME~`D7xsU0ya@fd{{JIig#L(s#zpT5-~Zemk@2Vg-wIiO=>MzG z$Nc}~C6V#}qkm>riSYeT*ef#6^}l*RWb*%pJdrt+fAbEJc_II=LxzGFp4vc9pRp`o(9VWV+qXGuwF>+0@IHn(*fU{&Lq zVHG-<$ zDcXW$eUr(Jj=h`+P2sYzxuv_Yv!Zi#Gj?69-onmCr$je2x`nT7PC7Iuz6^PrySf|O z>V31VXld_Y)|72sXJ=zucWrZPoo+F{flXm99Du5a#kN(p2UDtbjnV`D>Y zQ)gpWQ+rE;!Fmx&k?e*;m};(QX>9BuX?{6Ybc4R$v>asI+y!4sb|;zhqPAwoCl+

PVd-bi?gv=wP8 z%fx*u%S<*a3%FG!K&&bOlD`vBqJ6Q=sOLG#G>YT%D8aKD0?{IikHLhN_wyHBp ze&>3{qOKbnlbws(Rrlq@D|ENx05Hw6reqg2R1;fH&BnyE&pR~A&z(b9$HN8~vq{mb zvmJiwXyzU{y15WlTw8q;+6n2Bf~%v7G`L02+PfUI{w@G*eMJHH73JV0N}gRRD?hca zvD4|CmXYn#AWKm<=&(8GipI6A=mJxSO>ALvr$I~}%%tS)&}4r5I(eGXht#iww?1;* z);VsY?uw68=dOh3_sJ33l6;*^A8QaAdlWQ%lQ&Sxav+TPiM-ct1}PR>QG9qU@U(&lxNJ-OYH3-Kb? z)jh5j?HRf-nOP7$M4=?vXDFX=4`GqcTN=@As?mc^n2$!+*m=_$_Z+4Zq#3k)@FPc%vLMYU#$wO(R~_8S$wrDD0+s%&nc77%%FQ zCtlSu30TtH)`;QHg0{xawbYLhCS9SnUGmY8a(hZdjPkV7pvg^CXKa0}It{mDNP*2N zgfnwnCf4fEr{0j@UvEe->kWrSz0r|bZ#cH<%|KGd2U?kwDg$k;TV*)1stgEMfiACs zc(^OTQb&On7g-Cn?Xph5c*R{9%Fe9fE>s`t8rDauvgS8;)?=Vdrw*nzAb8A8Yu0o% zl2fO`%aaYw>&W*FSo1d!j|`O7k0D@(p+3K*sAOW)jH!s~)F{aS$&+m=w6wjmHQC}N z^_9f7F<2<&O*v3=L0dxy^>9>lD`{zC^V+7>?dtN#;FD4~GW2|OWsQ|mV>)#EIawIK zsG=k)YiFapzR-tmHYzll1L>jDyx#Am@CC4TPR6Sm+t5XsJQlPhyU=D+L1&=A`4)CI z*Xw?aA>E{$LvB+HtbnNYPD5Mn`5c0EoojF@Za6ll7;Q*GTvt@=)WH-Xx>k4~By*q& zOk3g5xllJP0^G6)5U)i5rdosm%OZeGi{LQT00j6K7%6svRg-7ib?FNX9M5lRtiNML z^V+t?2JI(qf4Zn^S#ukYra8)OoR7)Ds7$W28k)#2Uxf<)yAmqgjL>p;tXJ~+yAaLb+)S3X%70EzzYe!4- znvJ-Jw7!x0YKNOnxCK`;jT=&uYTH$DtJk&AS%VrBh7Ia$<{lFx_sA^+^)JR4b=7JR zG3GjU3M{)OiBQko+1}g$d76KUDmCrx9gFCek<|A_T#h8ylGmt#3o=!X2Q|BuVKed=sc4TM2Y%UY;uUU`1DHHH~d+yQvXbnG}&6aOy^E6Bt)! zW|H=46H-oXBGjUs4%;`uE(dZDowpoFNLvo1ox2=FV3dP=qXI*M^|-!-NzB8PLBG7N z&;&AmYjbxKZlkPoZtpS|VgW+sK%MRNaQgYw3$>xC$Z@B0``hg@T>sELh6|w5q*7q% z0aX{ychfC^#94rH8*9L<)?yRHt2dvcN# zIJ5{*Mz1V@B#Td9GAm;$zpQh*3C9I;0IigBtTb>A(eTy4L*G)VpxZd|x}?E%V>8Wz z(%o==gjLzNwz-YQM>>Zmjarybn&S^?@;d41@@tn#mt7~P$-SbnBZ;R#jcIaovXNVL zBC1c&#gUF9@7K$-9ID4Hs^L^FbyZ`BJZrd!ap~ZK&c&+>NdbnkU@xIm1*uDK?p~*_ z&fMJ6d&rdx$a4YWrWq|xgNxR-wRckI&d2Iu7aw)Wd(r4q=-Guq)g|xq$m?)TN)25- z&(i>mrt^7ih%~Q#0Qwdaxc8#U72+*ZE$+v)cwAeeOBT3=xVfzx4-u0zO4i(*D>Ane z#Z9wj3_2TcZ0}arx$cqEI$a2rhi4#UP9qmLT9-^WTNj|Bt9+(pbu+yNR};=PlMS&B zHV#G5i$f2;gl4*TX(wncZCI&lqtMr%Jtau?=#%L2oE+ckvyd}nFw^uY-GsCzDV9if z?}MfPta(d~XqEb#hYEYElosELb0sSqyqMi2-SI7zj%2CkwEjEWoZTvxF;J znj4&_WbOf%&P8O|=ouOH89p%e8!51=s8mQ*kt32l)B&`EI>)k*UZD=0Dip9SlprY- zr?qZ8AHppmUGpx0lF>8zWCQhQF06EMkHN~1Om;rvN_)DaoXMDeQ+kz}>qxU5^{`Yv zU@fjMZod+U@eq|IFQi z{xkE%w%ym%jeH6Cts?I?%KH{mZjUZ~yGCes?TOly0gNr#9^r`!|(} z{Y^o!zj>6{fBPsgct;_yVlkK}#MbS>#Na!j=oyQx$R5(d4u z76`GeZjL%02t}t6Ubj>XI`N1RFErxQjQA8Wcr?1`?`N1a&7H`TedyY{IX%~kOzcas4`5%6J?VUl z!Rzy4ur8PZSyx2f!GF`v&|IQ{JxV`<9Vp)Pg~VX55PP#1BnGns;<;#r80`Ln82mbP zJ9BqM|3GN$?vHMIVHedC=(mzSnfN2Vjmq&Y{9lOoEPoeu_#Xbmlm6jwVo+o*j8nd; zBNKz+qC|f*kbP{k5Vg~D5`(J(BaX!aqIMOqI$%^jNsBb18@S}L%h)$0E?gczARZZt zM^ffhzC^qp$MIC8rSed`!}qvl?H8)7fqTSYEFlI-#+kdH?>`d~+o1oD%gK2RAKrfE z?jP&|kGzj>J=p)zP4MNrgZ*dj6Whp#$u`{)=n+ipk7kNHr^5y(;h(+3V6TnqPEmSq zuxI~s!^F1dgW+RK&YrF9F1$ecX)gWKn*aUa9|QkGsOxdHkOesdp>eza;q2MxNEa#Z zg`#6W{{7k7cTkU1??h8qs%Y!x=sk3oICPSG$ddahdVjUvFVy?%^nS74FHH;{f(`-L zxBzu3^8%Cm&-ftQvVLIwzJ<5E+ zd0-#T^J6XNhq5m2IyC@0VxXy%-!=*o=TLfqMz#L z)T)q5NWFxAgTU*myf^{FwH2($DE{ zMkWrDe&JXwatHJiBZWLZpMI5vKKkV-ULr^F5PAAIPao&&<9vNQULTLw$1!EAKup;P z`DLFG$P;oe(6>mNmZ^Niwgmlp zA~W%9CHnREQMW{sy)`&@M28p*goiyVX7pUkdCtxcyng2H4D?fhZP~~_75QUgbzpDP@`H1M`_IVVxh>jPX?_)0l z*~3p}&6j@or{-t+;0d&O)=jkqI`^w{8nuTDp|#r?_4)6Nm>|!2O_wF)`7)f3bMEj% z*NSk@wROX=&%i#2z391?+a38rQ$Wn-dYXp%kD>kxQU4g9l!j6F!;QK(>zsUMg!Y>| zQ1{uQ=WB_J!b_9*zw;E;?dEy!_|$Lqysvz%2=$wt_tfu(QpY6o<6DDhi|9YKzmYAe z?UFsCfxKgNnWDCOn0T&tXJUUiOUzzBJc04jIN2|gA3Q%?+*v2j&kCb7vOVm+y|gWixsTW?FHxN=|n%sg+o`cdEXBS;UQBfW68 zx395%stLNX%@RRTTNF|@LtW42e!BMvY!D1=i-z4YvaK*zV#s5$N{pk=Ri4#IKUaC~ zMY=tf^NwRIKM27OGPECLirMSn2S3jgd)JRj3_gtgKBe}*{KC-)t6ZkPRQntD7^-m^Ua9Q72Odv3cFBK@3pLAq@hY9lAd ziow)25=4I!z*s|#^-lgw^q&|l2KyGeV|nUVsqAW;rEJ4Kdva`Iko#HFkBBFo+ixG2 z7`%UHqW}89a5>i96%c!Ghn=H1PT>4{JNh9`JB)EabFLZ-*U5G$N-u$p(D&?Z`Wntp z7l}J@DOTHr`glJSDQ*6m*uOc5>wx)eW*E^|oE_U~RAu&k(ZZt6VSReWh>Px8atw5WT{ceWa zhd6b0j=n^d$rxj$X-|b!=WZ{RNIzG5*@<*dSreqYe_8Ew%Vw07%2$m(vJU-;plcEM zIql8(G{fY7qN}bU8HX~TlricuC)l47}6L|?I+ZAz{wHlCol%2KCv(((Vq~}H$NFY z{?vJ|d(hSo2i3LbP_KK)uk7oOPqM1y^@KepYC@eI#@L3g8|fO4uG8c>8fBE%d+1Xr zjp~N*0LDHvE{Z|_baiy(Q{Fo8v=hiBA1VsE?V$(uUXAwR*mHuia}VSbPC9T}2x)ZP zQFjhKf-BCg$E+%Ko=5%emHpZU=)!u0wT@k=rxRz+J~t#E_R;I;=<%m*U$_|c@f`YX z*l8M#M^LZR-od$9*3tOBrLh0@kLkQMVb@YOO^w}pVKbFq-N(qr7>uq-RQ_?hr=ou8 zd_gu>m>!#H-zJ+Ae@dtQ!%K%@TO<6zDZLIg`69c3rGQTuG0Xx~^=+B#X7}SFUJZhspBu+Z!6MtZ%Px?<#GGZ-~$8 zY>0OxJG(c=TbfsQ#k)G|k%(D8&8x4(ONli3C!XwVol|yYeN%Hs>$l#mKJ6qg7+`NNZ|Sai|N z_4svN&U;jd(*&Fv%=3#~du?p#%{4V*5zT~eOSZ)1B!H`9^P7@wc-p%**4@+?YrtdV zwQYDF)euu$VyoL5HpcF1YHn$i1bFQ(hAA6JZEk6aH6=ku61rl^ZagP!YHWZO1VAz= z6DznjCL`k0?dw2JWow}u{TpM+h6YH%Tbo^qMXbABA5q5Q7-f)#X>0E$;#f0wu`Wzq zgK;p=uCZ7Yn4*RzAqj3xjh#vu7QlnBc{V7All}xIj-Sil)ZeJ6#IAtJ1l#IJRtEH`%tUQD*6iVKy=; z0dMGzcOjRA=|#0-LA7x~rj^zA2Uyk+bWX!E{|mD#>QKMxdO?M8v;85?;^x*u&si{+ znq*yA@si~B)YxKEro>kBftc@Z9Xf!Gu}<}JaIAgx?U*CmW%Q-8R>&1p_fj0YHHkhBla`v%Z=lxd)%(&h z*-cQ#Av*)m)9hWEFLCm+-M|C#Tga%5M&5^ez^$T6A4^CGAc1#W6OZCzYIh-L&r1pp0I?DkJS6|*w^Yf z#)m@GjGU13x52;3`1-Kz#EbHD>vYaTSg*#a^qw$$^hE~7NT)p-lQNn#Z(x-6s!k&v zM75h1!{JfF5H^rb%M6|VYWTyX$0YnmQX0aCw5hddzAG`1ztOFgicWn1a$O8n_TB?YFZ^6b)B4JG*4RNC6eLo(jhdHiIYvSg6lk+|@t zz;X$T`Cw%}ShWv!n-A9EgKhD_cKBe=_+W>8us3|LqdwSaA1o&%O(5%yVq}9!8mm@G z($~s0wuLaR4@9N^>$GK*mf~w8WqS8{(zomM8I+%S>-IzZ_nsr2>irF!F7+q%U7Ez{}w#3QBbs+|#!ZcS5%c&Z#_ zpY1yR0Hr(ntNtSfXs=E$N~0&$*;|^1;uJ{khZ=jE0E;itjl=_Q3TB>|#`aNyPo9KN zo?4CdP@WV!j+DH+bvn1R7|41xCi}*eJh0n0a%9~-qiHq}Uq_d)EZbq7)|-;1Y(`~2 zs?&G)q{o1Thf#tMvYfX3%<7yxq|MMY#P59Jf1+?1;-ds3@LUAdodu!}Ag!mkQ$OVTtE^ z@K%Xm>cOidez^y~T;g8KpBhf25fA;(B_8$Qe=qR@5B{>`ubsq5y-eDn&_Go5h@_wB z!S_pik_V@USwc+q;AA?r2>Ywr82PJ-+2Y*E3pYz}alE2)fqy?oN>QXQ|_`T#K6I0Uu zMdG7UFgn;LaX$09$>nH@L8ITsX+?&O=(2;t^?$Z_AG)xhaQ%FSravHYw_Py(FD35! zKhr-bareByu@zFT+y67Z8Hxpk+g`Zj4@r7iIH^gM)@Kz?MM2^E?E#GsU`!emb^1t+ zTj<~l-~rL#;9SB!$=|IP=Kmwf$8D!9DK6!@e#Q1A#v#Mbjv$Fch))O!7|ADugtz}B zvXEgPGh0Zw_DRLva;4&IT@xk#UcVxWkTasQ>AmN7Meo+HnIj~;=XXV)Z<0Cjkno=0 z6}|WTuJG|rUNaK%Iln7<@A+Nf-t)V{3r)68JS4p5aYaALp)n&NpYyn)_nyZU?mdqy zyvSth#6!Y+9#{0!92zqc64T8?CmwR{SU8Z3goO8eO$j04Jzp!_d%jk93GF-qQ+qrZ z0U@KmG6_P$?Uzzd^D?D}M8YI<;vrG##LY-Z-K{Vo84n5X zd6^PIM*n7J3W>$$p%V{@8YgZ>Lc)7qru2~To_`h2y}QYU=)LD(MejZTD%|ZSO->=< zJ^w2Dl_r@J4+-!2SJB_*(3p{s@ScAaeVs|>#6zOqiJOs-alT-@71zu;d|>RWa3b)- zW9XXw@CR_J^TX$*q5pOo`rFdbzmkUj?lkoOnufkKO}Xg)fS>-q8Rm~q!l}-WK9a_s z@2BCvAPs$e8a-c4BlqPr^xsaSe{LGQ0^J{Ms~;fHsn(G&A!ed&LZM$a*6{3;_2{&5=pzn-RE-auQ+HTu=pblZCd<;^wD z7h5!*je5y7`dfKF4QZPseTk;ReP=R1DUzbNv<(YV}Bbh?ck0>P<$Egl=M^ek#X-E?KjsL=P-S-#NBZMe za*c5so?@M}jJn**0e<|fIbLjW!*w>}p#SSj-8RO`;vb;qO4skNnNIOsS;53;! zS4{EX*UNf$$Kh3)g4$EAyfdo+ZXs_={)HYsUzPf}*9*+&VM$M3qyp>t8yw~elA=Pb z-hWQk`wWJiXF1g_?eK<~}&(H?J#@Vhm z{;DGP(7%-iXMd;iuGBQNdr!xyye58J<0SXHI!?RO2HvORvZ z`j=Zc^Oz|K|qI`V;=7fj1cRCjMv| z{E&hFO2=t;*udX6@YmAdZyEUC8uSBc@S|z)<7x0yX>i>1lY#8;cbbNF+)fEM_2Kqt z4#j8L~r^Jvn1TK8~Zu&`2iDQ&+R%L zJ-2txGG0d*=XM&i@J@X^N$qAE_z}S%%;!SO#r+cLPcQLs;Bt{%6CbGwi2g1n#-95_qBn8o zL-ZRAdbSVIn>gEn=roiXEcN_Fg2EB=QYnwzeSO2gP5MU++@$|&12^?C&tG9pL-z5j zciSJ>--v#N!9QW}sWtE_9Vb2}eYJs`^gSB4>#NtGH|uM=#_jrIJqdqG)6j02L2tI} z+YJ2MI!-&5OMIR)@Yi&l^xTR#-bIn&4GZV?`<8_#HT~NfC;OOu1}vQUyl3Ie=eWjM zpXW6Hk1U+|oU-s2HT`LeKl2efo%Lis85Yib_$&V2GUAI2wZdOp9i zT;{{)cgC3ypWhj0K4qFe)uY+}^ZA`{v;Qwq>dJAf=|ASU@o`NxpM^6Y+s=4@PX@L#%Vj=nXU6fK zune}Hna=^0?D~&BK4js{hwab&xqe^M^o+AUZ&*0j?^_ms=41D_%xA!&XFeZV{BO)q zz;O#_J|9_lgQh>FajqBUWB0er$L?>L5BICK-*Ufd_hT_FmvD3ZUt;LFS;uKtrsJfi ziOwx6KB9kB-~+G0SV(XS=4Sa+&sdTjT7{4{ARduyFQ=_bi<5dr~;6 zc24_ZKJ2&bZ_J1NmT~5DTJvFjxV^9+GR}PXyw5nd7ruUH{>+E(voX$m*q<3^K74*B zyP4-}KED%g_RprDJgLhe5#MPSUB_9s&Uq5rRL9m#W?G;!=m4)=^wTDGoL;SXFhC0)}Q(8vG{ZS?zM2{ zv(Li0eh*l3na?2$XFe}kIP-Z!ejNn1P%9HrFrN?S4%|yAmBIyP0^C#)-e#KgSH*FGYka%>gP!{$N**xqMuYyefv+*}9DV;AZ>XVc=%_-Dlut z`+dv6&HK+E894Xhq*hLbQjW^|7lxi?2L1&DuQl*Z2EM_-dklPsfp0eOeFlE7fxm6w z_Zj$c1K(ocIeNTF`hU^DX}%~0!oQ@Va$9BKUp8>Q&LH|;1K(iKo8z&E4EzCuevg4a zXy7!DlmhYRzK)JRH1NM9K!=ff+(h(WVG#Qg12@l8qPVlMC0UH6ySj_{Ln-c3<0&}4 zOTo*xdNc8wK`A--6B_i@2_Hec47>b*4c50wL&i&G`Eqd9Z1<{!mB!O>#CPo7FKmbu zl~X>xfv;y6OTOXr?6d;3{y;x{(Ss0mSSgpOqqtWOiIRau5{p^VQXZO1Ej${#oKrIjDS^m|l$q-0jG=p<7zI36N;FT*$(Bfg$_&8EaW2at^8l@p4%Vi9_ z0@J{1u}8h~N0(0lVP^O9Or8odlU(n`XOu`UTBD#d*#@r4r`tQ!fmrOVbYWn@n6%pLC@Stgh|ph}CBHF^;UFmX>Ct zGW@A{H6e$U)yf@ND_XFSVOj(Dr>bwG)Z#l(a`^|N%(S}1t({45l$Fzv>`qdwxU=0< zQ5IViUg9 zgf!W5Ju5pdqjee$Wtn4F;|jHG3RNX?>l&rXW?ob-dF;&&mGxJ_JZ5BEFKTI2T2=c} zd<%<~kyEBOj$N!0WvmkZ@+h#N8yd!in;gzl?eE!YD=X@mKvIsrnijKy{hV)#{N3y7k+L>I8l$UIB7IDINmfGum z?8QsysIw#VNLh?k*+W)a3ZCMea>Yk)O|TQnFYRe}V#imf_Wz7e2o~cM-JM)5in}(p z%DvO!rB)J3?ktsMdx4YSEQK{6=H#whc8|t-WM-PvC!|Xs+G=fb0U;WK!6hr519wSn zUE8MQb1hHjXk{#{X6EHp3DYEV7gZr9Z77~Sm$qecJ43NeOEK5T-9@oV0`!OO5EuKL;$$I(PoCL#ZNm{x9OX%TIo_&S%rx z$IBqVFMo~BZxtWk;zlA7hbhqrwk*1T zV`D^~(DF-k<&u1u+9Ut&H06)!`zq%v|Cb=#PyZP@e-$ZX1Y6ff(&Xpwo1HKJQSkPY zzgNpQ?{ShEw)}T}Frw?YhPFZ+l3O9jeq;-~{%(PAKlx#8cfJp+*?8oC3Yl%4h_+;& z%E8T?$>(paZJbTinp zXbz~25&hBYR4%jpxqxi>G_S=^K7R+y=4~Hi9R^?d`PVD?+)kprg{ z{i!XpKCJ(z(wu)9hN%DCH2GU}{wh+!2)3?e$ZumrUY<~y4ym2&zoLlS`VXe@-#tUr z|IIY{_YE=s_tNC2_pm9jzUs(Z)~#vsA0A@<;V_<`|GYND{2!v9_sjp*5c6lJ$v-f} z{KwL?-=jm!e@7bo9Uo%;g=zAi8e;xCG5++kAAkDjeD%LFO@6GeB*XdghalWfe$Ei{ z7p3u^{2}Ha4+Z_?(|Lsgopa4#xAl!_{HH|cuQoFyZs+etejB4KrxLVv=dn=#N9Q88 zC-;BfP9uMVmcNCV7{QkHcpCXd6)F?Y?<4u8_}lWkz|hZrr?vcLhHQ%3^4kE|7}1qf z(l)jHWjMCw|3jMoyG9e9PyTn)^xt(p@@cGQ%YP(|{6{t63@U^X?6Uq<8u?p&QJ|A*(REN|(YB%g-Fw)}rYKkHZi0WF{38`W$)WyLzC9*k%Q zwEP6@LxJQc@VDjvGcZ5-<3}I?;Wf2$ws!e{h!h(m;@Co!h37ete5w*#ehB*c$^THx z&!e`l4_M{pHcoQK(_p*H1abpQu*uD&e__s>XF~Zi1_GYm1Tp@N#!S# z*z!M}#{U|$`~x~a?`&DMY5cEliOQkPAnTvvw*0?L<9{)_SVbs0kNtbo_}?xqzsRsZ znZ%ZVeH!`Iqow%soHOd)zbr@P z*E@B9tu1Q+nf>xt>5TiFoGN1H{}*JoF`_(mlcMMQPvn23tF8ZiY2=?CqW-JW)ZfT4 zN`8;pIa^!T&!q96L!VMv>U2)hpXTw|`d^Wz{XC@QGreZxvDL0L<=?LJn{$kahpqn; zY3v_ct|XRd!KD8!__IEIUczEwzV#obn>%kS0sd1uRtrK!J!o^<(^&Peh)_i6e2h?x;=StkM57?B^>@(<~}r03`Gx8?uOH0Pg{c`D<0ou7BM ztmXRp3C$oSY|#13Q&3kv!#5(o&6Cph=t-n?nvnEQ;&1DJ0_SP6U#X_!-5xFf`&Pvg zEd|~uA)Mm2{!N!lGUE%z>X_xLBg`L1en0(lsIei`$*mgyG$79T^EDpP_UCr0VbQ1M z>)V(NJ9@MJhqe9=fsXtyo!`beALBpQ?N6U385RRNf5NgK>(7LApTn>G9lHGcFg~Y1 z_1AgdYi9S|HThNbFd(!)BbgT}YdEj~~0?k<|t}kxCa^~!rr6qGqXU&-v zi_I>X8H>eAvGh(XHnXH;PFWf4%Vy6ZAXYbg(}J3X!GLR#fcU;+UoA%NcEsGHgp4Lc z0VuOKBnFEDJ^Q1X;!dm$T{|^1G57)2UyN!u_I{~?&zkMBX=IRfQ?{N1}y&Qrhpi=Pc(9n3)U zhEt>)VV_{#`d?MA6O6v&Uh4nAjmnQb#g|&b`0>9=$tiuaE4hO?a zqJiu?@SVxphrwri2y0m)9nCLq-BOY(N(2A#RXUq)$J|}4A$c*@fK+SiN_wojilM@g zXpe&LW4VIX{~i1Yf3#b&*={-}yt|UtaCPgR>)o^FD9VyOCb557wivT&a`v51z`v=k zNXI6fM(b#PfVJ9-3U>cBI__<}7W?%h#hpI_eK?_bObrA^WRFq4bms2o`_EuKR`A)1 zR=E{j$5zC*72y9Z{Db4X>wyZ zXKQOVFL|Km^x3_)Z(jVsaO{WQm>9&jCim9-HZgYz*6w@=Yq@ShKd~7$s=0{rWgk2A z?`LZ_VgER=CBP{CSSWk90ABOB*tU4H*hbjmz(bEL#yX+9v5qO%!@25+>nDWzIa*I^ z!zb*J;9#MokJo;2c z|Fn5uS^mMXeVs?268&`xv8L`{4FBt?_y+>nsCKNu4LL`UN3MH{^?0 zzZ>nlA36?)4HALG!GbZW{;6K5?)g}t{_C!zbyStk|Au@h`;dLwUjLo^xOXv~7sPI? z1G|5!T;~>jd}s^}d$#wYpP=>6X&qQvBbKm_FY8&}gFJ-MG5V|5pIaT=w*Ktd=ZF{6 zC5I=_UMkTBD$oXA+y&aabbb2zH$ewoz5$zT_)20w*GV+2?99hhXSi-J<8|mMy$Agp zA5(f5WjGnkU$PE#O;o4m+UQwAu8mH83ayP!{T;1!+lxN)`C#~tBd|C1i)LTN=aWsS z!%e6|Rd&@U(OT&zRUPDgIQr7l$DS6g?>`Y}9lS&go>~<`xie7yOxOW^$9;iqVXVy? zE{H|Q-WBk(Gj}gU`U22Z^`BZbzkl!&tl$1bMeDJr6RjU+-5}S|B|lkz%MJZ4=p&lu zh=X*FY$_G|ccG8JD}sIj=bHy%gHz~l(TGavoRYV3!>OKeiNSBe&!~>bE=S>~J!k`b ztbAYf_q%Z3!E=Fa(NOr<2z}n6bD)%kbL>&b;<3UD>kDUOit)5>EJvJvTDFrj~G<%Hd`9K@UKz-2fFI~>;e>3mN1 zJ*;gDe;MpW|EtD2C@1+)P@T((Zy0?gVTTR7()k?gnjd7{j)HeK{DJg42K{dTP9n~> zO+csQgr}DlLO-%`hJgayd-9G$Y^jq&L>Chn#8s`k3VMI7@82%Nf(q`06bDVu>Y_Xi28> zrMpf^nR=aRvK{B6x*(a*Va#K}>^mOB`HsrTdjF90hMlq};arJ&p*6T;(*82fw#Qy5 zIz~LmR+R5)!#+eS{kU9?8wP_|$DHz-zVKt@B_BLjd!@DAsm;R9d4KLjsntb^sBgy- zq_KI|#^x_ubz{ZKRr7CJT3a!{cEze?3zn~{SYElPcENJ*D$=xCZ9P`8UbkiqmRD}a zf}(3$+V3h5f9yh|D0mM36w<9VnvkhN#IWb*KYIwX*Q3LFc*JWNr6KTjAYly>ab-=y z@dn1wF?e~YbvcgMH8?^C}nGg6SN<*lT8(t$+t*tmf7=qNRA$4so;etW% zdY`nWBdtG*^27kgNI!%g+W4%UNM)(gG;a}&M@M&!(iTmZL39Y^`1fc`uJg$HIXWQk zH*+(q^D-BW%UqnFx#Y6U8v7=URPD7{E@Lh>tnhN6R1&LcX zEP#Js;`)KEk&C|h@7_^x6L1ZNfKi?m)HkR`TBs0Tko5Y2g^}7VaeX7#z%NC81&uq7 zY^m>nCTQ5F$H;TxYeISLKNW|-;xGTq`^DW;Pk$^AO9Nk6Mi^7Q}n}2(%=}w z`qF=#2ER8ApI{pNJ8AG3%4L2VU-s3&!fE7IrLhC<$@uEui1y`YhqpnWYxo1VFNpP} zr)OBX&e_ZTj_Pr#zuPa#z8=_X5_kPpo=bo|C;7-mk0T)xa*OZqOWf^$Sm!&C&T&mD zcVERe*H}YsnNFN2`MCX(JU=20*Uq4K{hZei-Xw9iUFYDKLVp^2PEUh3sBH4vl9P3u zc1=1?-_S5yUx&u&+aMY7E?@zs7Gy;YfkxR;j4m9x`ycal?V%xv}Z{4F8ntJUr$Btn zt0ex$BjIL$$o@chOy*P@?mr1HFmSF%!V3)?@5AEN=K4l{A=dj94Ed&ZeRrk2S%CLG zeSJSwkV1jVkZ;gJ6umXOn!aV=ef=4)yL+hgyY2D=2l}HNUGmj%_X`7@ z$NkbkNBdoC+%h`f1JIRG(b3VeaZzi>x|S~W?!2^wMCJRz4W6_`Yunm8iI#j0Wih@X zkp7)~U9pB9=X|rA-c?qb%9q3clkUpd?|Q>2NfCZe8t(?`NlEcDQ+k>-W}$* zgZa(d`mS!g1`HB@8F)jn^SUph{6a6HXQ@)gYGx}xSHJiPN*rhu&dgsIp=x$O1 zjW-Fi?;s>nsN4hH-8;bFA@jNN+kEW&KTngtM@!h_NKz3y|7*x^V?Z`Mzp=U z{5*z=0i&|p<)`sAiLmRxR*wVTK$;nBS@~(?@AI)gUCr9^=^X7RzexKnk2hHdTRw@g zF`~`agA1j!dJe!pXc812AK@DtSvxoj0j7#{6lnr5W{~I{Q=Ok}ki^n~!<_BV_Wk-(j7f?^iHy&d0|uBVuEec3kVfhnOS8@Ta>Vw*I?-`N`j* z9jXWEX0T;FfkYc4`aWH88+7Iv_H;Mdmj3}TKl%Jl)mun6gDvY{k!WK?pRWg%rhM`> zTmGAA`j6vT#Kp_omi0RF+Zg5Bs^x1lNc+>c*p|Nb;d%ZQ^jto3LA)rC|6uTQKq#kT7)f8!XQjg!9ec|D$cPydgzm}lb7MLV^ss(ju{QNNHl$^voosVGOUH4sf>U*%m zF3g4a2IeU3-nk(D^tTtr<@0ns9|H3r0)N~O%Ip0~ z&;IvAV%zZF{>9H0UyJ!_zrN>d;x7_kD+mn#@%5-{k~tl76lh*j6!Qari0A&<86r2D zAv!+@MM@V3?tdg(4F56aukIZ&Mm%^&fq4CTG2++@!$d83y@@@Q_~mVZnf{NiP`@h?~296x&>*&zfw1mk@u`ww7?Bd|p%vPYKt*cE~J2NOkH z^0-fIqx$H-?=z=pZr~4Kg}UrtLp@wdT4{tc!m~?hE=>dKV*%=B3bjGh2k|DFA58ep(j$;z(~u0JOQN0k zfY0OL^8#q!1#JfSkuREa(2BDB^(Q{I{y%oB*Y29hg(7ljL^3v&U>SWTG zy3;%xw!@3i|2^=deq%U!dxFsf{Z<^&z zS6>&wrd;0psJ?PleGNl>z4L%uUyqAGbmz!mv^PH|`Vh+82mAV!HHmtnv~>2Mvi>3Z zWBhOUTTT4iksIT$y|O6&(|=wP|10?07U+Hm`yXI`?`qA%Pe~s)z{QTaeW8WE= zJ0tSq+;}7yjzw07Ls6PbS9z!)QkY*DsQ`wyyzTM%`3EY(6C=BV!Pg%TAOf;(`E1Fx98;z7)79CR(j7}&S7QL(_5X~#ei(XuEarBas zOQNBY%cGBnI^sDw1(9JnvmzsNW=1a0nHb3*$cdJe1xrLEI;BQ`C7|ANXD$@7j zEeCeazvaL+$Wt+GQe+}@QnKhBj8)G1yfj>WA8c!Enbv%dAnG2X%otwERFLUv@%q98q+YMVlMxh%W zrD!@QeP+#NnKzElTpG!|DMne+26{&1H+S!CDi43e#>o9siPK%P)Nn}R-V5AcN?hOg zF|xcP@k|3z(f=-SDqw2ZhQpw6acKi!xu6fqFB2+yX-l0o{hT$gT*`7GbJKnddiDt| zPVPQTgRe+~&r5?(OoO+k!O8Nu#$9*mkHDTuLtg~D`RShkJq4PxFhWJ;wo1ooPJxLp z(>OhYHJ_c{rg7qPk&e@@PREIliMME+_|QEq4*B{<1mXJjgG@?j0>bGYpc8ORfpBxC z=Wzo!?`!hh3Zggd5z{V9_-MsaZh4&wDi_(DL!Q22Mfa{vJYVBXuMfp|i=OeAMb92T z$)abx$f9T2Gc0<>ODuXWbD2fYc)3N-w_WC0^o%DgdhQ>qEPBSPEqZ?5U1QNRzRaSJ z=?bW|=ow#W(NEI!brwD2EQg+fo4wphosV$S|9cJG^k<)ktW}Mx*R8GUOkzz3xq1VA z!JQXnSk$$wd3}5L;`Zh?TF@aiq0JAzp|c&6^8Hd)v@|#91n-kxM+sL1he^q_c9jn$PoAD)m&$sd2Y>T?+1NDs!D>^#mb7Id^cSiyBeRV^&0+h;DQ)fG0HsV8LUG&PmM79nOVZjWW=@mI|$`FSAIU9a0WX+<+U-Q?a`g*R-KXha4IMFU)&Fj z1Oq?$eFP$y=XE-^Wo3cR#)vLQcVsMw$Lr}noiOVo&S)7s0i!N@Lc3)TQWxb9$g{T8l>_QOU}>rO3y@W*_36a?v#sk zBH4&-Na>uvzT<|*WT)&-hx8qXt7es!U+6Q7K0Zl8Zi0kk8$+!P;GM8{MvN~7koW$? zgRS_c2;PIo_Y83F_9(u?@ILN?LT~w8;t1}^zKeHki^e~`l->)ZXBf!0UEp4e$S;aC z7mkS6triD2wF$f*OYfpp_MaF*_vT)d_jcc(c%bzp_@{m^LEWooJ(xG~b>-$k?pS$0 z)|A%|d3})gyp(q_6-y3 zvT*-6t5UvG3w$e;AN>V&U)u`s{}%p7E{T@Di#kKwraIeBf4hvbEVm74 zgbO3djO=I-{#cP;5J|2P&bzFS<5|wV_}701boUoT3(F@)lH~;vkr9lN?^aYG-h}^# zX_30ysXnwXjfVd|k!bxOt4h{Ocv3}wpe1oISeG~$nvgh{u>kMEiQW9e^{uLSuXs)=VH|74^O!@mT1W4*CR)|Mslf8CK8rDtcWbAr)CQw+M4 zL_~`?7z962J}FWO+JYUy6d8D-#E~JuR~(8(|anOQw5a}mj-{{~7&;J%*r4@pGx;QKbfX#BrRr`a11ZoV<0@JA%B2SP4; z(Iav1y%_osQ0mmH)moie4WJg0J^gW&Sr@KeywKItbrCcp*p%VAnS3 z=8*pVO>euPJfW1C{EABfcGOPo(1-f+!_R=w4{u9@(_kZ4xOQgE{vQ0zdw=W?T@rWw ze3@444avu~Gvl9=xZ57=9`3}R1xHwC)4XyRoGmiGjUbewiG4BX^jqH&u)^Rf9?8GKCs z8EN=%xokccNmyxV)qf(-Ll$*W^=9i3m*3e5w^J?L1S* zX;)+5lMVbr>yh=Od$Q*HKCF+8FVnKPyezub!nw>VEu71Bo5s1k%%{%6nNNd-GoNma zlb)u1HW;{RpA3!LewfaGSiW7}|MCZANV|Tuc?H)m+l}p5XV{-GuEz$A+y2mG;moJS z!kG{Em$pCjXnMj;e=yq-oeS&`0KNJC7yAj}F@rcq#|bYm@O%R=G;r=$>E5?H>TvrF z!Z|Nxsad`b-vFvdUhkIpt=&d%?A+%gG^}d+sT;PP%?Y&dA%=+%4{C zNp_{Yzt)lRYFV1~a*Z2act>t|vb#BDIb9%PB!*(-ICSh*-^(tOcNy^ppQ ztA^?~zZ4*8QeXS>FE!L#)|A8>WB$qXhMSS>JUMWeYOVKKPt>ugT2u7T_?W?wB8Gx?h20oxvz9h!*z@I>J1GeS2Yg$K86`|GjSkl(}dA8 z1~Vkg10$Yc#3}j=GM_8|NQ>Ui{}eLY7-d;GLS^K>i~0sCC-<9-uLR~NpZnuFq?^H( zMbG|ijOaVG{A!(<Et&dv!DEGE&sUANb<=fw)~}O za$e)YEI(Z}+VUR&<|qFxUH%=!%m}uuFCxvxh`cFB zWn%v&`_tV7TRx2w{N#7&PO)6EakjRsbk8<->HG~&P8G59V~(t^e14BgyRpN?&i^+^ zA^q(>oad&*oSZ7cYU|Tlv-l{u>^ehLE2amzd`~UT<{|oO8sCTwb;GL~AcjKL+P$2EI&s})u<$k<3 zbNl!wmM$5;bLk8`3%$sA77F`qt-xIL5axl`VLtk#a6u#^2lMkW7oDC<-G}EpmH87R z33`^(TNr6A9T~r4+C}l^!cp;La727lxPYt*WtNr0^i=HdH?imFoZgqi1#V# zQFp703L_!Z-)g*1z;#FUMYg2pxawJF%e-_*WnK-xwx567^A>1cLX%O~G^c>-o8~N3 z_&l?wwr9^(NLPoI`Cj=SjGiE$RiD7KYMwhGb(m7opB%L$zWTD7`1)IJjOYH%qIk~B zi{p7eQO~X?g-as^;VUAIIXTgWj4{#1+|luZWL3QWb4%lMe^7P$ldH=kw~%W|WEvELY-d?9@Ls^o%rWldJ}#gRGDSHfeWg&8A1mp{EQa#hh)k^B*pBcB|Z z6y1mSJ9Z3Aj1Cl*N8)(*?$Gkw=ueksMV|`hMEe$xiSB`aZ#{Gc(n}%_z%D(Y?-QZu zFNaTtA54zCJ1QeOY{#VNrhCPHw2{0IF3&E#9dVp`@`fM({&I@Hi+BHq!LH)s#F-Z} zMz&FZmyLE(|3=@a`pWR>%!?BTr{JH1XV^3GuY;azx8Aqv<)X=vVOyVA^-5k&^k4D6 z0ng71@fS#|?421Ay*be%`D3D6^2S6nq343_lcJL^og8^GjQ31>Cr5UIw&C8~c-;eI zs}asTKb4HA7H+m4-n|Bjfb`_i_^S- z%pISK7eH6)AL{WBqTE>(3*%!@?)x4ph|*kv8y*crD-VfiR`#&?#N1Fcg!uu`|KP+i z3*%RSt^_o%K&Nl*h(#;V_at!cIFiVW76gXH3-w%r>=@<}Y)u@@9l0zXtV*1jbZO#D zCjMD8p8)@1hZdjS_QtnHy@$G)4ByWfHnOb|bu%`x=ycwpMW>G={^hqP7iazR&QTfL zYvZrHamA=9Z%!GNQ*~4PpWdET{H6ajrTCS%O1|(b{9i#m{R-~`jU7HEGV7nOh;|My zjZ_!LA{bZJW(~h0k~_R4G9@xBdIkLHmHaCr{}e8Xyb_)n$-!KQ*WpiMcr0?fDl0k$ z_7H_LBem^W?;@oX7rszAR2^SY0ie6GqI&ME}&;j1fl{yATe|V=L^_(sGNLi&WyEmE_j-E}cjt7t^GRZWc`n6i;^WRI!Mu;mMZ+@} zkEC*L&@%X*3t@D9K!NWM6V|6Ovgx@3$@H6(ks&YEycZ}h%L@VX?zZCoj}ni0ME#w_ z3p}{`HswSQ9+7hGD@D|+guKtre=qrSt-I__NZh>3uhNc6+`P-L@c&oh=G}aS4@%s= z^C84TpW9;mmrL#W@N z@w9{e<`>8tG@f>_@BB{Ut{s@;7l8+ii>w%qDLjmS&}nr-NZ*wybiMDbM@kCGyNsI1 z*o8cIm{elOxgs@)5&iRjo7-z=(jX*<_o=!l-0PnT_xh*8z5c0iuYW4strt4x5Hjk8 zG1`Yj%siCwiP(C*3g0<}pZMV~r=cf5@}n;Uo@>0h!X?L;8@THa+!Fpn;_PL*uLh4V z!_UocXDn_Fr#WZlx2O3WLhBUf z;>UsU$!Y9%2!yVdoXfqpLUT&^yhy1rO+wFrr|LNECh0gm>oxHjjngyQVjZU)+k^O+ zUbIrv(EDK~UZrv3W9n0_aa$jjYwN@3Y+Ii?gAd8g(8o=B&-yUVds{B|w6@#}rJrQz zGfl^7S7hN+^fB9n^db7MYP>}6NgtCB`9B55nNPWb9h~{Foyl%AXzO{r*cDXL`mpECS#+nGdjM zKO~&XO35sTaC0sr*Dv8k1|P0pnv-OXTKPOkIMYzJI-QqrbJV)sz|E`3T?S6ip*V1P ziBF6{><4t5@B#xrZQz9lo)0<-L{DR24rK<;ZIjaYdWh&vd){NvoA%sl;HEvFG;q_N z)?_00=FQM&ZMk{U&D(M*{`i?&Lz#Q!zHI$RO~4xJ6e_oPfBs2St}LHvRH+lgTvE&& zt7xllYVWK}TiuvFc0LktQ7_w{lgs%?94-~-(nWEppcl*K=f7vl?|);1>0kH?_=e)4 zeF_|3`X0)sz`+#Cw96TSc>jGS4k6-C`6+O`{72Wp-td<0#3ovay16rY<7NnH^;_^_BGvsbAL^J6cvU0d&cQo$0Xmqa>W5cjoKM^ zZWO?>cz+vUKm8kY{ylonJI=?)w<2O=ly+3>&*xXtpKNUFPne&4zSsH^(#>GYqP#Xn z^mY36kgYm1$tT&ie7d&wlTY^#D6pN?kyjR7v-`-w|(@3@w~ zOy}pFE$bfSw=trPX@@wjGm?DrMO*&o(#TH$r|_iOIa^y6y{l(qM4Y2vn_8yJLGtM? zs4f4RH1glm^3PZPIcenA>4B43{v03q^!*>d`Y+S{#`(%m-_rLh|1$l0m|1?R61)5- zA>2>?TU!44%1?gcC%;eM`ZCK;Cb8wy_qP1x^LKxGkjD(Rte>Qjzg17UP`6J*Oj1I$nUle$56Bi#&k`TqwJ{qpm- z*m<1EJnZ~$Ai>6n_LSDYL}w)Z&HFptFMSByPkx6ksBQ+Di&xeYI=^-|hpt!Wk2#2n zu>BbRTSWZyFVZh&)M-M}pRNZuKkJ_j!K8nwrsLf%P54~~^qy!b@P4U|vz=rjHlNN` zvFjMnd(OxEJ-|6`l72(yH!+Iav~(RvnC`9|@*O(=9xDTvp9#ky-Oql#+J0vLF%g+K zKiltRSbxoNw;lRddSq*Vl(WcQ4`Ih8GE`P6Bf| z1LABb`1-NwA$+4bqxIx;n&*b~>F>_!Kl5T>+qXgcOLig@LYaco9>6-`KgOK2Rrtnt zALj22-@NDnyjQ-rXmj-gMc5x2mcX~n>3i`P@1`;y4J8IKA9U}LvH14K@WjDHEEf3y zPm>Sho5TZI74dh!UWso}UyL>DmCn$2+L^nnpv!!Gi@UNPx+xv+Bim=f_QP6FUPHDI zL)UD4*Ce=2=_Yoc-4yCSGGE}k=ozPe20h;$d+6HwVLjKrI~x07&$aNoyb~`%H`EK& z71hmI)D6`G)gRRz)d$(stS_=D)fv|l+upQ0+x$Z6rw;SM&fL8SWv%W%c@5ReLe$HG z*0cBNdI<$yH@{1B6m>FU^1}Y%Bi;JI`DE|NaAI&%VC1nn)W`JAiyy$cp?ephUfze@ zvwxeI+aJJklo?zvVOcK&sE=eW<{!lhA^>U!vJPEa2U`tmOb&&K!FhZQu#Cfh$wnKojPlF2elNX_((LLe4)`?cmsS5yv<3~DeVAtmO_iXCN1SP>3!S6mGm7Iw1ubV zw|;ne;*8lIPU3t1W_$Puwx@5eKY;eo58pk3?+`rz+dqxAL2aQ&w}r*JErhXu;%gQ0 zKD39O@O#xJ@I7?2iST%l8xDxFUE|<)~)IO-Kay#HQa1!65r|;JcwH?@XKyz=8 zVvgKd%*%a$Vpja@L@{`DiP%r=V*u?#);Zb-)j78hyS`)_G3qMgJauK-o!VBzWvcvC zuT;lWw_I0tJq@KzoIu^2xf^{I+OpFoa#Wqj_JH<5?P1{mWA9zytE%pN@qHdi4k1Da z0VCo$Ckc=6IGBWhK~Yaah~XU}Dz;8Jc^pV2At4DisFjG+NyX`fDbt~r89}in)K2Y; z&PWSWeAIGVJ7cG|Wv1R~Q11w0Z*4&vER_5Gt+jqg7aeWpH1;dM)EHrw4UZF8>y7r|O^g+yZNP5aHh65{c0snIK8e~z zlC4ojM9Xw!Yqm4d{b$AoeeLe_aCQF((f7!4U?ln-s{3L1ilA}eZB_RV;A~k~_gE%v z1wWQ`VXVFLWXby{vED8`6Zfz)*>Wb`m*d`#HFFpropPkUYtKLviEw~CigC%hJI@?`mgoq$MBe!+xL})k%#`K8spR0gYW;$>c7}1 zrbKsPO=qHP-hjQy&L<#~#|5&pJ~mMLV<;PPt|5V{Zj1g6B7cuS$JHYS2`?vWK51%9V;CbW$&rTk@zfXM?(yEW$Uqd>m z%wnp{ru(d?f8iZ>dH`iaV>p%FNu+bYHy*ZEWBADEp_AyZnlWA-KpSenKGamt#2Amf z9s5mmUNhR%NndC>o(*#k;2z)TY&?m5&6+E%d2%eNMj96)4^{ma@w`N7|2X!bE`rhc zS@SrqFR@!hUFS zJp&qs2q)>7yvKE7zoWDzIcZCC<^08)lHA%u=cM#yiTM!TKS?~)Um|T}lVW#2a_X*tj!>vo;BOUY`1WsQ>CWjV*k4^@0M{9?S-Jk`{8iA`9UILMaPY4{NjuB4d zUf+*Nlsm92f!p>GZ3x&xl#AE0^R)vQ1&qzW?evQ}4XjAes~3>C--~|=NAa((UvoU{2AEajh^1Mx#2&BoE&X8@mG}m zFQuTrPSD%!>$swC0lmJDlIUL%*DC1k`Y-xQVAR*;=(~^Op2Fk!&k=9y#4WZTl;`a@ zyQP1rj23g^`rK%p!fB3M-`8Wc!fB3P$Dh^Y=xdOep5C<-C>lEPI70H(>k<*WP0^5i z9Zw}^IO(T%ZyZ<-$=C506#=DFPyZbnUdTdlzE@pS`t>>VUWJo<9q&*$$=BsnX}E5G z&KJqo=iF;G`8xiTCPz;{%OSm!6b+qvGY7dy z)iurC>!U`EhU@jJRm1btHJx^AxL!}5)o^{(<90)O^>XL-K{%(4MCfY|^m62PdPGls z3kQAefnF}VK}Uh;!{SOFj%j$lhU*i+%dzWlybC_MvB&1ko8q0DX*YIq1g#-S)7xUJ zb}dqouZpj0gQIjQ!pV>-Iu)+AWfv)N$aF^)OJ${^7aPGO-Rb#e1zNJJTROYCbs9Z! zj!1{$6rc-GN^EN-Xl(EE!k)^vx}taWs*X6@QMgi~EtC+Ea9H0;o9};|yS9q-3KP35 zgpkVyjQwPKu#-I^q=)cJ?jiFLPyXZG5T09{VYhk|li#4&@v6BbfHSxv%$$3TCMc3G z{K>a?33zG#;|9ISUyOJYBbGq6WQ@s^=p!hf0d>!P7^T}S{dp>*`xQN(OkG4~Vnl21 zTS0vkJ(ZgJ8zI0=|6!${pFc<@1yk3jKxbk^*Q@eR_Mt%f>1or{e`5;$>~m!YF>Arp zb!`g$PbvLuXVOnkwWj{Hz$mMZ`lBl4NyO>F)L)NC6C?U#N`H)Q5J*2gy_xzy3(QSF z&)x1pydF$ly@)h1qAyZE9rXNP2He#Ddth$*Uu2;asRf1^qL z3n1TBKUG$Qz2ayeOkG!j*~Eyt!zKR&nfhM==BB?%RS1gLgQ@EWh%_;x?^F6?bb~L=_C8b+5yOM%Z%D1M3B z$A5DF37p_#N_u`HS>iPTgE+sU_)oGT702mk(iaf#mj51=|FGgG`_pqN^Rr!6Lb0iv zWb?jV>59?;$ID?g{XIIpkN!Knk7i#BNbio=c)SnBJ7F;FqH8*>^+9%3~Z)_lWQFNctaUNcw~9`_$I`Qd9yTjDy+zAnnruCaFr z(;O(auZv>#^~s~!b?^NN`jgfJiR&ViCCe#7S@QJ(lqFw#0@gY4-rtHIqVu`YR}K!Y z@nB9MdF_GNrzAaks0DMYgJRy*e=u|8u}5w{5%_Z1=FNleV_xUCnAgGY)u)>=7jZx4 zB?f$#i@6h;t7{%%&Dn+dpECI4?#_vx>&Bb~%?IV84T<*Q8$-)?b~U4&(flaQ$smnl zzNH29C#POn+UE^yf2hIQx&2`8%0(kA%$Z>R)R%d1J^Yt1uD5oshwSDY>)dX%rN4)K z(ogdxJ_M@}bV) zVUl-K9sK^hc5q6+;7&TtZSwbH9RL|^b8C;CKFZpJ)ziq_N9{JkWFaPp- z_;UZ@o$CkDM$Ucz&KZMm`?3yZA&tU_Hpe>49U9)O%?O$o9D8st>clD7=F`wa zd_PUM#{9w?SpNXZgnhc`dHZ19xBK1Ng+nj=Z6eIIN;ZKQSXOR)QmKId zFt)vI4tLi#w8jap4-0r*XS}{U-Wl$0uHO(YnOjmkx1{u%vXbzMHSHgh4;Ok~;b)dw zT5&rnQSDw&t%q-0@ohKI9lLNO;|I9pneE5EzV;Eu703t zc)GyV4-XChoye#2f%<)cXKIx4^49{l=Q^0+9f8xY*yQk*z-eWAa-g};WY4TJ{(lIZ zYDsdqh+D7b!$QSu~8x`oG*p0d#_H@Ik ze!Jn{NFj%c#f|>IrND0nuJ2mN#z74poL9{zytDsolPeQb5;Ph@v z-w&e}7zH_ZXV*{Bp8%)%iX8Elji^-Lfb)0pulqm|{R*(33*2rOoc=4I*G?sfR47b= zbH7S+FEf}J=ZWh28Uv@kkV3hEQ=deE2oPP&_{vhru4ZTo_k@OTU4(>zh1Ii+Z0Z7bh?~A17|r88#v3^qj0hh zwGj?nF9_G?n(kEugzNd;q2XZ`f^(K8U$t( zi_dlK?_LwHJTCbeuX-)AXhT=L6EjX?rYga?pnVg3Fx#FOl4Gk|TJdn@;sRNurgl?T zvnh|)Tivpu$!e5N6Fx@A2#J?dPUp*RZV~Khte#oI2Xn#+ z0zPAvAFd*Y$se;KrkLiwxR>L~^Wo3*9hLKG3Gc8~V=ETVN48v5Z4&_X%Y-@RA`%qI z7yjg1YaW;{#b0aCoBTA_ZDPdIryjX>D1K_IlusV7xGhrO;ijMYniW5vOkG)sFfpRd zQ;#$;x=!rx$o``Uini(4Xh%-qdy01tYp1rT-}1Adr5yxvZZ6chg^`Dg~#P zWKb~mF9GJpzjT=Vb5iivDgM1ATnncDV#Jvkk(aAS#~#H?`5%dY&JUOWcYwL2|Evo>=gXjR;~!M~JZ=eLIGA~DNx|Q$8suSSRA-ZaJlZ$uFE!|j z)K8+nF>s=#z~`8{rgG53PZj@Aa~WH}#Ikh$TrMabbfFy$X5u%xDJxI$^O_eHV~WiL zvuP8eeM;4zcNHVmA9_Auey%@10l%r6Sn%#rgs>7$X{6^VlmF^Db1+|FhoR;&N{Y)$ zF{Obp{O{m;v zvzzBy=eFEOa}~;0x4E}*U`fOxAIaEjncg?0_Q`DTJAVRc)paA?yI@!4KRnrwH|)HF z(sK~$Ie_#WKzhC-(xdtEPNYfsU$$(Y+8>oa?}pLNJ-z>{{CQWp_}>l~d925q9&4EX zyenONY5zfa`PA@zlNY$`!S9+E_|B&KG}Qb{fy;jRe^6df$K<@;(0iq9GmuYp@~7U=5IsWsxA(%I`ab-J@eOVM6=C!NMc8*8 z{?+fcj!;^{^TNR`oz|h)UDlCa_*LJB|7LvuLVbzoGw`hn@x<=4j@%D9TdVPnQlAyN zzuFRVAH#h(V1@SLp5M#AHxhF$g)a&}7gRrJPjzqB@`#1KyYunyL0?o!|AE4wKWjy# z0^f;xI;g2&ir)bF z4vxD8Ug*Hv1x`6h4)|slVM;QHyI%@i9FpQN-;bakz_pmS1Wr$a$>Dnf=bB^39TvF$ zmQKcfQ{WSALUr{Ofol(I3jeae^|y&KVu!%PipoAcFL39a#y<$$SsG6YoZlGQa`p+F zTcM4AQQ+zarVU%$1x_WO9C`(=zm1den*>fz)yd&sQE$B3+gz?^&j{SM1J^Zr$EnYO za0-qIJe&~DIe!U=$I4IOOz|@yUhVCsXa|bwqnk_NR3y}ki~oD~9Cy}p%5dtv#qILd zE#$Mp`fcLcrEOBESI@42~d=(K-={>Kg9i~8e+&r2bP-g)bDJKQ6*L%u#I z!!4>o(A)LDRwau3qPgu+{yl-SR5d<;=L!7lb3`oX7J=LSScj5N`t`lbw<)|_q{r^x z#2AA(nj_Wcni!|=Ds!}1h;AikvygAMccxzjdN+ICpTf@EQfRKGM9HQT*C?7Z!DC1w zgw++zjp+D%h11-^>;$!CMb$OQ(Q93m!by&fmnod&=;^^K&Uqy0kM%(s=8yG3+ToA&;g9v<|KTe>*|X;fzm}m*Tiu z!;3V$Tf?VmI8BaFAo+T^@OP4g>*ex_Mz5F4n;Nc{OY*`C=i5ZbS{3{2?C3Ny*l-)aA^=P)VXSF?h?0x4%PCBJoTa@99{p7P&OZ1vT;oa$S4pMy#u8?5J#S z+Fa4t-EtRJPAkHXW(WPGoI7)i+^odc{}mh7wI(g^Y3y*)B0n~5V+XJDQR{SuP$W0# zAA*RghInT!?NYsIL*p=v>|psAmkc?rf;aKA&_b{X9_P(%bf&%Xv3dR_cF@Nj_j8Fr z97@F3@!~M7P4mGFtC;JIO2s;(k7~7%?2p#qy`OmXCvOwSUiGTL-ijVYDT{QLMCAF)5o|m~-@$<>l|GO0V537Z=VU-WkPgTm)|0pmbG234m z(nVpY{67L3Gfl)7Rj&;7{F6yc{awJ^^lwx8hsys3@Vn_RRttmm{8N%l{dYjQn||)p zhRXkKV0P1AtA2p!`6tNKUz$RHt?D<2%6}w<{-|2$tmmKJ2AleyOHuz`R{Dp^|6%aE zK%d%5iP# zr+(7Jh^0eyT-<*Z0h@?_Q~!@slz+K;)o;o+@4u0Pf4<`9-%pe#3MT*aDfoHKBd1q# zJNe&41li9R=B?dIf0!B7*_8JS;AWbLv`-l>MmGp#zkK{NKilugGSF_tPxhOFf97ZVt%Lnc-6Z=dMOduTL1M^8Ccpe$qBd^`550dwY3ba#WuW^o zYaWkPP>N)Tic{43B&;@oeHA>H_pStluC;ed>VL_L_#4$#ue>H63VhbDd$+i)qr_6s z9Yt6#IYO4Br{TXo-T(D^?B%|t(m%N6K41Tq@zyzHI=JO- z>(G|pr}uC9TkBBs6sv#BeVP4Xd~aTq9}b?zIgIl`oW=Smte?uHeZ7H2ub38W@p>aa z(Bh(36a|T{+3Ta9^1EW`3nLAqsv?vgzvt-nTPm$X7W^CJmlp<`p5Hb<_TWgdZ!&#P zeI~J9a>038Lj`_XGU8kt=F2P1mdj;b;|s#HcY;_>>l$BK;I=*vdY+0N@xx|&!;^x0 zu|g#+TVA86>nJ_`+~|?Cyqh8!(dtNOqIGVsA-pNPE)>Qt4(RF=h zRm2ws?^iM-En7!K3J;737+D~eU~78T#xPa_=cSxx4Pq2mZX#PQF`v2wJ<{E z@}DgyDkHb@IaTD{)|_8} zF9x|>o+n?ocAoNjb`n0_)AtC;Ey6j9zHc1Neq}a_C60|UzVb0|Qv#j2VjXKO z?B=n4J&^I}1aVJkK|e|5OyyWF>>nznI1law9rd= zlY$od)Yt^;NP0z8_byg0 z>7+CifG3=XJfkcd##={XLD?6_9$XYzUs@Gu`21q@&(R~X$>?*Zc|s3)yrDl!^U1z@ zZkiY)^?tjce`Kg|#LS=veK+;n-T)S@W{nK(#hT@M^yLj(sV}JNKXWCmH?D+zE82cJ z`@3S@u@#l;xvgzWBA2p1_YvII^|ao}Y0dY9KBv+eg&&RB+wDQz>+ai(XKvncy4eFogdh1+KxpmG{ zg=ZAd1W>liP}jI#l0T0Tm)$ftGVI-%nHD{_^f}K??7j2r?PIn-(t2(&5X?0vz_d=$de7zl!onp(e?jAa+t-r4J0E#V_YuUMPbgYTT+V?G9@98M? zwQR+=E00+_LmtoRGS5Sg^rD|Qd-395_F|6}syle3&22&aouDI{8qen*K^se6EAOuo zHab;!r0opW!SkM8W_h+0_)$mjJSEnozaZ;|zj~Ow=`OrC4U;#+$s1MWTP4qKV>8#o zX0e{WqW?^W_Kic$F!&a`d>f&@ZSa)Iy`(&rI{W3>`|zTOf7jwj`kp0`N<0_E@V_6z%G z(la8_Q5m7)Ym0&v6a1mQNJoBAF}`ic427+cp_s6N^i!ih!~N>IZ=rwipr7!fANIAK zDWrM>A0Y6TMRt#W3g14!k4fX7FN(ArTpW4gh0x(vq#+J_^x{7<&J$Yh@r2s(OuHTb z)b2UmT`Q|1&%ChaaMSq3Nc$3z_TuXUp_P$9D0})GR2uS98oWOzJv5NW%P8dKGL@Hw{bvfPk6VDWS0WD;ZNIwiB~h0@l#S63H+^vd z`eE32O7zIO@pz_3zV-$3gYoY#j&xMxdAqzQSb+ZOD8__1zU_FefvRvfj*4A+1Bg7xJ1~S>`FE_?fo#@8tGsA*9#(l z4?ELX(gePZ$j8c(KuFkn`rP0Nt7dmM1iTHe~JahU#-=n~?2iNhG_9_!r~5yeYwS@OtrEiR$_Zv?uyaRgmcq6{22v zAv=cOJ=VnZP(?Idv@0u69r1w2f}REVMkXJ5rsslYj0^M}5JNxi#h60h*AxMxdm39T z&{;+D8^HH(JA&_y?7a}hK3ViUr}pQ<_k2%}#~3f4=>q8I<(^z8;p663?8(J@e!YL& z3*y@)S9usGSl$818-cyOGWS_KN8T^}3Ek+)J>7!-e=hp=6BtKy9e^ZpRMUlt+u8#V~c;trG_Qv(`rjKv4E`Dc&r@of1aC=9* zv%b5feM7jhegizXha2MIruGf-a991>chiXi?>C`yn4~JaC@gs zfr;wQ&9lO_o4T>HSG+4OSh~Vk89+OKb+mVNN4mfz;D-9f^|REpHl~g1Hh08}8ZgB@ zEqwj;;RUs8Dpyq9zNYT>+J$SXZeL!pY|#Si_V!Jj#ICr|5N^YCf4F^Zczw%;cpEa& zNXhBy7FQ6~67QO270)VO8=il?q@6NFp67=bEw5g*d{N!))-saOwy8^G9BFL96gxI9 z+t3tV+p?jhJ3h;5Yo~4N!#7+XCRx@pc?-3RHehd#mU;*GtUvsFD)jw4g=Kx1Z>m;f z@YTNeas8&MgM=eY!he&vGJP!t(rPl(7G zq=(*P(}y-t|_f1J#A4y%mwCB{t%*c;P@{DtT1kiRovcW8>s!& zvIReXQxyfh&X0FoR)^x}_o;;O9z9t^k3bl|Q>AMPbbeCt&J>7T3x)SHA_%#O@70p> zoVGM4ZCNg;NXEO09?#Gs5aw4eXBi{;N?5$8`EcnaOX}NZv_9Zy4BlU0$L-Dcd2Q`0$QE1h!2WcV!9_ z=}5u1+J&!m7<}>@E&ClfrD4Azi}L%d!isTiwiV)GzucT|;(2EXo-9=iT+7N_bSmPe3iM>^|a;V(^ljO*#nA4)Z-L= z0?Ec+q$0dV$6?6M1{u$Pl?zT;Uuu<{Dh+EgurT6!6jn=gi8`eAX#^C;{~krtgljh% zvg=Vr(@Qjo{3$uK-y`9d2v^{Ts@u1eauP-f*ZBX3_)Jhu*l747fzua6$wB%Tzcm@e z-FrgBY6ng)hn+Kh=<5WoCY&{{4}@NQ2Q3--Gl5^BQOe7w1+MQ@Ch?sDr&f|2>IF_e zlaj*?0uLpFxVuc?`40STk>5fG{zHLJa^O=$ekVKdvqJt<2mT|0Q;kRteqirpTB6)su|>p1|o93IPZIci2ksI04G#R@MSgio(2jmi z;1xEYuKrTU8R5Vu2s>0d@RNdmfdl`pz_}N)qaPFaLK{$5TLfP1z*h+TCI=oAINr(` z;ddfmw98X+I4*F!@iW4=1x_p6lEXS7pLSqM4)n4eonbPFyVnK%%?|uK0$=IC_XvEI z1K%w0ItN}Q@XH+dSb?jBXj<&MB41-PL|*<_;A-KJ7JCrSB3?23Ey0);_u;=K7D_Y; z^3o@E^m4$K&vMo`qWbXrvO4V`2l@@tn@lfpkO@@1DV*NpKZUv@v7rRaYt=Zyd82`CQr`@kI4&N1!UnGU&$T&HK&k?^Qll49* zaJ#={`dfwGLWdlzzk(dQKVkYtf!pH?_sIPi!gH(&hn#glauS{d>~xlhardYl>b`=x$4?je zvd8zR;yf+n*yA|k*Nb%8zdKmYp9{OOwJa;95cPM#qg9 zJ??Ni&m*1L3F-DlI`q2XA3%;9&iSCdJnpi^h(&;OOW(fQt;w!;v=98(HF~Zg!V z=kyZ&lNvqSsoapmHGy!QzE|A6+iXB#-n;dkszf0v@mQ)iaX zawZx$%LyAe%bBTgmcLuw7aKUsDKl{DHz`ngQ{eQlocRXMa-s&#a%vS$<^ByRQXF}% zfbdNk&X<&as<&uXB5=Fl`pkH(iYGarR@Zd8L&LwR;koLX<+I$03TOF@FV*De^}JP+ zqt~Af184gX4FxV2u0K5zPS~02^SuVna(WG%)4T?WqeXSX4rw4;8&xpX&^q<*YVvmeZ_o zGhbXE%=*mrif}z&Gc`GSy)D;pz253_^l_nB(bIVGMRiT5Ty;%)b$Z>-I=!Br1Dc#X zbxro9_L!ya!|KfKg>kkI(Nlk(t>{|Snfr6bxxSh9Ii~0d?@`xudR4MN6k{O-{Fl_ZT?WlY0$(qvGjRIM+88#dDsFvz$JIp5<_TCp&zD zh2XqL(G#w>qmQcGxqqd4#cf$rpLh=8atx?Qt`Cfd70&gC(^q8BGd`$rvp!7H@~gKO z9@mIoZ!da1*V|pKCSR9xhlcBN!U`ul==Fr#3+Id5NtvQ&J21XFg&dYo>1P@u)!VzC z{tt_@e$$?*a4r{cTpRenu5oPOFG0sM}mK=Qe)>3*Vy-%NlC z>~DkU?YA8GJ*v^$Z$;3rYB-lEiR#nvTUa>Gdo=u34QJo+r1v%re_5l~+tE83e!E7G zmw_UXoKI-@Bn|(hhL>wN_Z1XKRvkL!w@Je%X?R@2%QbwhhA-7{dMCpnrs3Q+DXv??TbLN5`Z7n6&o_?KgwnRu*9CTfB3{+M7D-?`rAZobba$(O9?Vh}QjFDG|5Ev7*t1*T!9# zu;0w4*7{DHM)|l>dL7ZGh+8_a+fUq;y$ajebhamFWeHXgV*TJktms>Z7*m>K`=jL4 zu$qeQrR|ONt+nk~^5_&&(b3Vmc~M)(rq-_bFet0rI~xtUR9bIq?`&-vmewIDl~$cj z(@KuP?9Gv!S(Hw~E=7SVB^OYdHHlH)Sjtfba_1-(8<%J=i&cW23Axv7gp#aV!Ttks%;y7Cz zOU1E79B}}N*oLc29A}GT>0B61?y%L^)h+kxO6=GL2C-RJnK;fC$5Od{mpIPRdCN%q z9C0iY$JydoDvsKAUvuD55XltB+2U9#jwKQiQc4AhIL;QwQgI|VgiW)=Lu3hVDQRNcurhI+Esh`YMq>A1oQ5uqj(PI-nm`iFuelQ- zyn{FWYEi#EAH$i+-BLGxew1gDFcjif0p=<%Oy1a0>h9MI`-hWk<^YW%xJs-=3oUUsU>s zvVUC){ZFZ>;o~wH;x{b4OEmTW3o_(pe_qSpqxkt`=KqHPOpIvzu9h4%ijnd^2LGmh z_B)7fC@Juoc79*Rk*2Oxeg|Js`t|xZ7D7z@)N#4xe?TdUvSM{M_5UtK|HDhd^!$%= z(O(6DZu-OOcj8`Ee>fSY{u=?97}3_KjPv^+vj64yH}n5LQ}n+_Re?moqX$#hK#Kei zmPjr=|Fnw1)c+bVxBT;xOjDnEpPeH8e(LNHh8jOcrbvIZRPysULH47uz)b(Yr|7@3 zmHuogCUG>=|0e+4@*h_GsvAqmzZ(3eOd?*b(y!P55O6d7|0_lRvsCHt7^422O40xH zDgE4kkp1#q^wW1CZuvi~63XcXs|aRZYf{+%#bNRnr{I5C@$X^9DfG_(znLaMI$JW- zC_c*nWc+h}xL*Avh5gy@Dbp)44qfCE$IX5nG}s~x#owDE|2@Ox??>j{^!FEB!GNrUg?M)k(MV+oSkdAB!;gX_#>1-#^U!6R#SFXQt%H9GyPTIcT4|qm-NqZN&j^z`oCPYr;6JJOi$rPL2eYp1PBDIFs|U}a>L1Ow zy5%2x7mBdMRxPef{l5aUi4kGBOZndf+${h5Qs{q0>3>ydwGXDQ%_;QPy6C6A*3|#~ z6#Dnmk7b0Rp1;1ELVvT1{w0uS>aR+EiWK^LUGy(=(NF7+@aK4c zHj#d;BT%2K2UGvP6#R9Hze;DuwaNc3FgN|XhsnPY0^RsuQ~b3<=)XM0^UKU^$=Eam z|JW4mZ-?UV9fCg%6@t>Qey${_v*~38!Vf4?3w+Dx&#LqnYczEE^Bf7#nm9c$AD_vG zEnn+&SB%x~>}!+u1!aFEBPoOx|4H<3df@uc*gt|Fe~z$Q)!#uCN#oyY{4+m~e-EJl zH+7S+0R7lUcuJK6rJL5Fnf%z$=F^xBE2&c37?;c`DJ`B?I-52so>N?c?Gj6iaR`?b z7tbvNc1_7#asOfVFfPxfl*kYjC)!k2?qPf)VQu}{(|?16_g@5sle1h4x> z9DDsKvcUA{U-d;_|0i}cYOxg=w1HN$w-^*AqNPDq4_V5EQ$)J6Y<^Hpk zg3by@#h$$8eoo_n(_T*G&;C2<*2dFVRy95sdn~3`4AMS;z1TnLnRM$%f8nw>R3O}Y zD3oSx+>X8fMu6vSU+CZru@{r)bQsv;GznAA3&S^W&B&*kc*_Y%Yi%BKxBr<`PXyI`%<* zrD*#A_ACu!uhM`uCAbLxMW2cN-O~kDKha}fi!sdwv>$LK_R6a0XIqXyer`m5)`n*5FbH#=8?cV+m*7>malplLur9pps|Al)p`Y*iT*-7Pp0O|XCyY!M9N3@vEs%i@!LA{&kcq z$-i*VO|V@xY`74%tb$D!^q+69>_0g&dI7fH37*_jh2L)bE%uOn|28jZeXz5?|ANo6 zbG)eYKGb>d!J3JWi9N-C0b9I>`nDcFxfOXmv31Shjo4ckT}R!3 zSK8o7ZG%Zo-3G@^MM>H1% zIb9agh3`vLTBZdlEtE!?9%+A0%NH+^7At`L?eK45kL!~^dvt=e@6k_CeTDr#o=~x& zsk6PMDcsmvkKN7gig$L=7HD&370;SoTwGj^4!)?NzAN4o2D)_Vt;@8iX-JV8Qij}{ zi^iy#DhG9RPV9dq_eQEwam{p2+G{3D{Js-7qKYV9<0bvu2tx?SlNH8!x4K?R=OlTV zU(5nTe1|Cxp+=s>JLOl@bswFR__74gyDDDf0oNqQkAZ^%kKKgj85rfAzxU~;xTdVD zvj5uqSN<<(``~;j=aJkmkKdD*Rx^?Ed54lA@{-u!is`e{YI4#R(Qrz%ycYFgT-$qL zIcbUhX(gAR8;B)U_$6rF_TKq3@u1<9uvOp_9O6DL@QDr_eHsFK86$j0;KlVa8{dJ5NGG3z8jF1Z?%uUE{5N}Sum z&jr1m{(y|OXnm|#+lzzh9tE14@M<$WqTK=iF8;m3;}TIJpYkNub$czlTtpp596gtM z#q6XcA<<1#=T6yWQKF!X_xU-&6yic=pGQDl*WZbrMGH#b+GH%;B8F#iX ziuY;uXL_15bxZw^Qs8I6=tfWeecbja7$b1IpW%8!4=nn(=glfXkEhVPKZV`{Dd@R9 z(YGokN;aLSf2Kg+suashapd+&-y-Qaw?F!JW41;=UtJSEPs76+uIrtoa8obKH}#fl za&*1i?oGX%FT$@;ymZp#=;`cHG?bpJHTrwiHKj+#cPO0XvrK}Da8JRM!(*{2hx!2u zrW~GorShU5sb=s1XB$!+moMRyHDa!tgiq1%JatX@R1FVnIF|)Md`M=v!_~4Df$+#qYw7bfdQK1F1scxvgz!QQZ&lZX>-Ox^ zaNVAJG+ejmQ4QDa`KpGq4GB7{;krEoNCyQQ6sRwURb1w$0m+J76JdWEu(7MX z6U+X^I^4SYhSvBhaqpsL(FQDNWzxj!rv>es=(7P{05A4g#`eOkizt&$zsV|X+OqhB zBxM*Z0gpF!Tgof4S|6;~uz0>3KAW+`9eX~%xLn5UwwhUKmJ6DbbGM+qwY8-QzM5(4=8to|u}XuBOJ2F;yNOmAW6`TvKrB`V zYpZ~@^}YWYkGv53kvZR8iRWGCuLsL&R*%5{ES`sD8>XXbRtey*6^2)*Ngp{er7!e;(`g;^7>8Gb^Q~zpUZu+_3E>iq_ zGIgy&gozPtSpDQ;JClC;m1pYz2{1SPJPt5D$V4!8-3ewl{&E5lxE$r3Gp&^=`04i# zg&KKE98LY-L5!RJmlc0sf>U0Y{NDm>VnkW)Vn2e|9&FcCbDp%8mcmf=w;eQY=|7J>(ZN(YId--{+c z9$)AS!Gz<}q2>%r%ZumC4O56^Zdtgr+Uv11=&}C6VIN9Mp4JIO39zEpT2O-XoHt;d zYtD`y8e#SRd7ubB`>dnahu*d3h3@tDhwe@54^2w%55fPE)qDT^(7hS`^e#PMMbGuo zYf$(}slYjGg~XhYId|6uUnPP{M((5p?mWn{X~1=p6_5T1amUvHw^zU`wm?1%*X!|_^%x4^f^hs zW{CIX=&Q~r&uv-jQe$!~)4RUrhPq2>AHP5k~%vf+9crMBC6k)z0FJJhcN+qj) zdQ|Wi!57XY<@pyx!k`iPhg@-1KE$kT3*pyF`UJDyjn1Pu(|=hE=_X%}q@(*c);zN7 z*%i+VzcBDMr}7&-e+F}A?1z%_8Bo49@jO&VGDI5Tqg0lQ=G!ZUeYcKru`hi8Nc#>` zU-j_yRgQJh=U?RN^Ni-YDNpQkjq=t~Fv98gtVq^3Pm!!s)=YVy!p5RrbkCCW(rn{^ zzZ$+b0|zPJ<~%UXm-iwa>}!b9@fXW!zBGB>_TmGcADKSCn!$JC0c+=o=N1m0!W^LW z+>7%Ee7)B%&04e*)yI?~zT?WOG=b5SNcsUH!3I4?teqcp?MDEmxh9hTJ#GnxMc^ja4ecz^Ux zp>^T(j5PR3OK&^70`t!I1kew7kuT4|hbHb{zJB84%a>wKl*^vV;N+D^BW&=_)oGE7 zu-VD$tV5K}fzd~=k0G4{BXQ<*K49(agMFkuFb5Ccte7`GNB&tU%>!d;u5o(s>u5Jb zC+6vu|5oxNy7j6jmp5MZwdGatzesr{o^H_L=T&Yu{0Ned%z=yw;cMAT{yE_@(gQ!g zKJ)>F@XOVBG(Xq?Usyi)t!&6E2u6Wdz&}CN? zMlTG&?=HP5@(pX}8>kO7w@vndfp?t>p^e{$^#bH~ z%4Z$wh2PYHKV1~D;L|c6{{w$&MQCjV_VBDD8j61#Wq2BLPGPQnG1d>P#~gFRWm_Um zo~u^&f0Q-k&Re|v#7Ncs+99vyGfbCYy!Orh(t8-%XM6MB51s&O|)Di?YVe~sqp zXGagc{y_BWCr}SB+_SvDxzsw;u+{o{J<9s*ie>#5U+@W=4PZ@+Cs+CdXTNo4S9oDV z*=91)U(!7LH2Cip_Cwi_FI@I(T8Xlz`uDklF_DKJv5t^^M~bmzYOq52;S8W3#hA8} z#@$E%$?C^U^`Y%w@kRQ!`Xi5`-+uHyfB&QRrS(5LCB457_2kj}GSIKk_#^#&>Hh27 z(nx(C=Y!Kq>87-#O7n2j`-M#FTq3QM&fg=QNFSy1b92!LrAQ~Wcl-w2F%9{~I+)Y- z^z+1jv*@#j8oytk>Fn=a%1ln=%h^eHn?_KQ&m zvS{o?o*L&(3-+PEDVR4S*gJ1}(2us<2)}j}^JWHp@ZB9ny$@UPv4{5TFMsa`^3mRDtx)T%F_Al`)V!pfxmdvx3+KjBJHSeTTtJ& zpd7cLzHLE$Yo>ll)Hhm}vJm}C75W#aPsdByi0T;Ilk7q^BYTnE$YzuWw%bQ#v;V)_ z%eB4^xBg>&p6N5)UEa#!wWp}F{=3UtH7t40R}53$v%_njk5vvW4?lhC{JqEKhy7U_ zqW;_sG5^F3)~oxMTSvFgr)Qm^`hcwqoI2hfJ@Ndh$E~*auqI9K^Qm1nW8CKci=LUO z5A*n~x;rOCk96O9^E7JH`Z(Yv|M9B-Cx6l8`%*kNpzhb;dHc>OzDW12{%Nu4){)E9 zb2s>!5Bwv*&N^ckiXVhz6kj>HuHDpa>`pp+v%@G+uqUgXX2O2 z-|N-R{F(ic;~82jKi$7C<(1M8KTvhtCwb9_SIsL5rm22BAN~3RS^iKJ_1D>+&^Gkd zt>2P1A%Er6mv4ZL?nfV7iT+$Xx22DbY(*bkkN$l9^f9nSjK*u&!)cHJ8gP! zG1^M~1$+rz#8UEB)M#wHSzR@@qh8<~4wD26u3zYqUg;s5z@{QGlrM8AqWTfc68qwkr)H*esxHyhrV(XM@-=!G=M zBEP-)@MG)C9^d6Q~3GKs7?=!yEQv>X7$+6ugm8KzdC((@C*M|7CIA{9h|*)G%#{cfN*NcsLvpfvb8 z+S%I5^iVe1Uwm;|D3)o3o`>)5#{y|0|CO-e8+g7dm{1U`ALR)xK-wx1AM5ppDz^DU zWS_!-Hxl-HB2)7$@g9Q8YEo`xBpqc{kW~TS#uzKJt~Is6FaA4FhK2aA z1W!XCJM;$5zERns%Dh7H`=YXEO7LdrDun;?N#nCaQ^8~5_s$8>d67o+*P+R%A1~!i z4jzD=pF^1+MI6~9hPqG)pXdH;Z;0%ij`~G);1 zQO_Xt8R--2BH6jOM#e(Vn3`K6KY_39LHL1wCbKx0cUxMh8+BwX$~sUO4jzi;2RHpw zad7rOPYxd1S{Awsbay{k7P@Z6l;FG>CBfUkd&i8a!B5O64c;?yZg3v{zx=CfLbtzl zO=$DTdBGyc_$BH^AL>x=IIC_P{7>J8|GB7>J@|hjb58I-@K1I1t;}nJ-yJ_blz!#- z(5}p~V0I`k^sl*NL*IiP)2Gi1e)ihQ!6#5R-p$Pj1t2dC_MVP9;G^`A`4K z#3z=o!!v3vo>8mOcRr}{L3YZ3{Fh#aT-3#vipqmeOdKEjD$?>6WDbOjgMXH7)qNNC zrgHo$e5I4W^p~Lfu{{N$$9EKlj-oGk4!`B84CXAAb@DFgcndblM!R?m_2pdNlpv*r z@=fWQf%Hv)yl~;Qs5f@nuzr8~%dkuJb@PH#M_v;w9$7Bh%rzqmg5R4sE;MIkVepmc z_|SNy^=Efjp_l4Bp>Zgm_v$i2&p_8R@I8LZm2-lBpE*^O+bjR>4}J9!f9RNZO7I~5 zr-TkIKZR!t@3QCYr?x`po$rvDQE?;yWN!;^#9x1tVfG;+IO^Ib?|*R^HA zjT1_O6kh}$qTddCj3s*%%tpN!Ii329__ZaFeNC_w{Sj7L?kIq7@~3OZh5oi?d}tH$ zzZZ6|MBLWQT-9gH2^PY4c?0^4eJGEGfwJIA^fiy6&sgxFKlF8cSFr>(m>m4(@^@eZ zO51ddv(r#+#S=Y|q9X6KDXK4_G*J8ud<#T3B6r6-+hQ~{S2Lh7COm1|d?JmJ8^n?n^7K8Wv136?XCv0ikR294f0rdL!*ESb-pJv1 zT*Rx4TP_0BQlHcky5w3Q7GVuDU_N4a;bZ=mpj@RQ8)wv65%RQiR9)B5+4x4_4i$&~ zPy~|Ep{^MtS=$u0n$E3ijXo}kelPwhFg?wuJuMLVJ$lmj0%ZV2&;18U9B+Yr8KlEOxQ7DD||12IFj?Q3(sDK zH6vb2H+-v0o}(^2uMWX;*5C<4bU;l=itjIMVBh? zeJY;qPdvQGb#j{M`wIDe3hg~c;SM_3X%=(N$5q@?m${S9Al(bZD1p zi!##|XQeF}m9`WHE=D~2`4)Xb!Y)RQ(yT%}yOn&=2MvPK*uLA-~aq-z4arnHeo`RZ%pq3W2MIjv78f;LdM2283Q(MU)(l2s}3# z#N8tTcYfP(r@)=xcHAUzYAMNKlEAM>262bA4+vK}aOo$UdbQ;6AA(+07%l2LkzacK zk{o;j4<&=R`!^vc-+}*wzzZC>7!;FMsY{Y3K~F6;IaCOIN-~H$`k|A&x?hs~PSl@i z@!Je2xRp6S)4hha`DVBwhd7L*mjO_;n6B_#K2G4oPuWi~Q=INo4eI1?i1Rv~=@N z0vRU+%y5* zoP^QMuLb=o2mXY>Z*kyT1%8_YUn%h09r)D(|AYh261aF0N{U-1aQxCW!gPW2lZhRf zA#k-2(uS>{3A>Hf5P3NbxYx4t8&woX(4~4TyMHcH_*HmT@>;eXcwG9dz->DWDEg5? zzHJ8{pZb-2mdoc8;PYx8OL**x3i-Bu^zke8w}#ICpOWRXoc*E1g^}noDfnF45fOZJ z-zGZCOUieam&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdpm&Bdp zl*FCml*IGt4pUXH!vA(3QsdRehI3?+)+CxW2`g% zf9FTtIqt}G+Wl~HI-SqelHTrzlj-e#I2pJ5;bh!79!dFjf16D2e4dx|_ISbcCHSqL z%{SVaew(=AUqjdIhToP#&SZ4)ZuGRTq#M2rdULd|hj|2j9rAOuuWV~oT3azr|nP?w!>F21nU0DIlnQ1+wF_--^2d8pK!((iG1Cpa--f|;I2#9!EW#39R=_UNPmv- zs3}?aJ>BPp9Q(PB-^)pV+V*o}lhWiD^mhB=cYqIz^iNY%>YWqro)CJG2^DxG`w8rp zqdh0osQ79j#~x<`3g0Yndpu=((!0DI?fHS}K@Qv=ml^LAdJC0Q`w6~E(A&=mT-MJC zoKtPne@T>!Jx+0Y1_W-8zpVFNVK@6ZlX2;%-G1I+IctR+`#FK>vqZh3+{wWB{kYZr z&ollTL7&g$2}?aJ>Io91LOEXud)nh;lfu^u+#UzHUVTU4_VfR0MNfXxamARt+y! z*Nk&c$_#w7x@Y;cmw+y3zKUm@7o4g zY51fR^qfwUJ}(9RP;%IArxkxxof&64R2lg1)qRaRv)xz@mp|hyhwa8V%ZVvDrahZ9 ze4Dza({S@u1iMm*ilf|Hg36uKW9Dm~qBrx!a)z5PmJ?HYhnugkMz7bCROOqB{$(YH z%5j~#rqe6xnto5~xNgs#8a=mfs&AjwaJC!eYnO)W_5VQ)U#+ewJr8L39qO9ugN}21 zC;7Twu0N*Un36-duD40yrrzchdi^Qr*$!qp*>2okV$e^aNS?%ACVGA2d@=ntMPIDw zxm~av?#CGCddvL=<1D8}$ss%F{Swz(!nY|JI{m+vUoJR^Hg4X{f{bol0)g_{BXPAbTWQG(UTlK zoyRp?Pv>izd}@!Jo&klM>12DD`C|Ph{Ul93wTpd77X{YC?SkvMUM@uclA<@;3(Fa9 zdto^>Lc82U=s(k5INg8DuQcQz%U9Zg>&5?V^_j;V&KI{k?ynf<_8V30i*asuRSM_v zi{)^8WSr&j_{BKOxkJe@$Gez@Z&TNF3ae{MkN&*D^_Kf9MV9nDzl%Yfo76Sw)t@(* z#(X}1O3||&czl1_z&XFq8aR*dhZW9tU^zz(oaMY|;4J4=g`0NM$Av${ZmTu!x5 zeu2+i-}t^tqo?sbOWoJ0Gmr0#?^ihK)yH?eeD(1?3v?7rJI_=&+l|{JzYk-a?Zdz0 z8Rz!Md*QI1SbxnI5G7Uj2pYTN* zeU(PPSi@r)zC^>jHJry>g8DSvo=vc<{Tfamka2icT~K=Lx9FC2T*GUb80U91+qQOM zXSmsiPOd`O>j%Dq%jc#>& zXJvbjQJ|V_#3s19Xf09p2D$YO_6E7?J1f*0sX^cOwgS7zLZiw}YOTpz-%?pPcgfWf za>+>4%oS_bcEzy)Z;E^%scsZ1m8y`sSJpSRY{IU(DTF|c8-*?edfZ5~jHIB@g+R~3 z4NV^BwsE^wWHqEFglI884ZS}2={gl}N_!th^PZoVk2hs%0Ek|NYWO7PVx4FY$gEAvl z2uSS2thHKMYfuWRO(pJ^#k;!d*TwN6U)(JL)$VYY+Nc=<`O2&ttLU>s%XR-}&0ca7 z=%kEm6U6ZM!EEUHRahwMM?V`Cfc6Ezgu;<{|GpkG-XNzO0IF^W`ILx_5 zkci`KaV!a6rYY8hO$~od#CXTbk zu~ZyOBrZs13z6bDTO3Qpu|y)m9HoLp9A}GTsW_I%Ya*FjB4mkU8IDb}W{c}maV(L? zgxyfDN@fYFxy6D{9LvOUwm6oG<43k3IG)R1z;l{e3NOFuw*!fHUy> z0gr^1dfZFk(Zp5qg?cx|D@ty&5G68 z%7B2c{u_W%QqB6$@2j&Brw3El6hyl5?^5}X>dd${`SV>cV(D;6|7hT5 z`magR{$5r3DbIQ^^+z+@(?6j2Ss%+V`H77FP5Yf3CVy87{qHLNq0%2ig530By~<3^xH_BpuL59VM7md%AGZ^#fAsE|?aBDJfw`rh-%Bw)$V4!8?FH(_U#`;M zEZGuAlmE+zF)<>3R;B;A;-vInfqza9r~lu;?52OO($Dltj6>IRDfkZzGyU`}vRnFh zlu31T^)UHc)7`p@Gk{rWp_Qex_w zlfwRGig2lsGL!!U#JkzAR}nT1!M_OwLi{-f-J6P^+N>T}Kc8b@cGJ(F08FAtEifNL zpG3TgQQT9?{`&I+tx`AZ&wr$_-y}64@_Y*GGj(C_Jy-n$F6B?Fz)k%(rE0&Z7Zir7 zzm?!O(?ooOF8WJ=oBIC>{j{6?o0R_jBuopYuHE1_F(S{NE16>QWW{l&A<5LAn?ip; z5gt(dd@^;7PNBa;>F-gDq@PS;>Zf@bxBNe)2y0ofI-B}`mO}qYrT<;UNBZfjJyZW$ zv~xH8;$a>1L+P&vznLadd7P9X==$g3-qc@|qW;yY-psP<3$ff89|9@(vWE`sezYKmi{dw0)e!cuFT=c`=yKDZr;~7f-Eh+Q|sIU=q z{R?n!=AY)}-0WYgD&A1~&w$@8|AQ|27rN+QkfQzV9j5*pQnbI5>W8nM|C?O&)BLGh z{@+#lo4}(7Gp`p@=s!-C9YNQ>2=}J_^Hb!%?lQqH_w$jL;%Mrhm_q+C`eBYxPMJfX z_DAb1O#RVMCM_8@WFYlan?ST~e zFRzds&079f05bLeK1KeUvn4-&N100hxfJ=|TPZp8{L{J;Q-5KK_P=e6tQIf@k{)xTTt&w6=W z+LA(lt;*1V;^&j8>+Tf#167hk*H7zcO#Nvo>|Z=q^6y~9>TK%&IdC`o9aa2K4Z;6Y z#G5jSrQ9X`w0_4-|FtRX*O5z7uwxb4haOB_b5hu^S?TBeQ~A+vAya=Yo)akl>UC#A z)t<}c<(m|#1-|9;H;^E@Hj-)e(#sNrT6szwSw8~@!Efe?;s#yPPwSAFpX=Xp)&7fF zpgO;z^s8<(5zFc3^Y}EG{se)#7&XB}Sm{IL-}+oDJ?D! zi!gkjZarE8qeuhZPUG?1V^w2c<#pI=nf><2y~7KGy+z^Rz9RSsQRjT@U2M_5(AXn- z;Af9c5PQP^f%}hADzfQ-;JJIH<+(TLxiTvxFt)9F1d&88NBTYLw%6QILF+8lZwuV0 z5Wv1GaI*yo5ber|_ajR8Z_nwRC|SfBCsl1EA|`U}#U>8#$H_D4ALA4>*R_;$&j*6rGEuOkf z^f`PV#)WAUisQAh-2SMqA{(21)|Y{qx&bBj+C4xw2yA1Mzp{k(wyJIrmrt21dzg8ne3|+GKOw&X!*AHY<#N0- z@p@Wb?q4!2e??ofoxVIy6&`6j1OJB??t!m2`290|{^)*jDwO{fvT1A-{1@WfQZUl# zQ&KiThdP<@2CZ@70hZpUVL8*`ilqhrUi@O3#f78v|xP4 z)-??~9$OQCXmlifT=YoBRna5GIG5nOU`Owo${qKwdAxS-n#XGQt%>1zFAaW4D&UKx zG1m&k4pv7h;0NLUy!>GOgVquDO;vv4Tr2hgU@WyOu=)lPdbd@I6wA{}}$a;opOFWiPCb_>i{!I|@Q+ z3!_KU_biVTAN7XvU$jDvx&BagT6)B{&^nS2+QKo_k;#-F(7gqJF#nsqZvl_8I`jW# zCX-CAgfL)0_-2xDnIsH`n?}Vt35ek;LabXv$Ufi#q?((hLpXR$9=gzd^9GmZa-|h2;t_&7zgzmC% zCdU+~FQaUf`CoGieBBK=vv=J@6ANx|7S9CJ!L}RnAg}h0s+t<4t`~vVhD}AjDUb1d z9>Z5M+vOXcnI0^Gd`^UOAuY_CeDEHLvA6r-5kBfZgtQzAxqS|##VONbK#xY3-#P;r z75QwAHk8X@C{~BwciI}&4+mhtD8VoF;0eWV%pxNuM(osum5s~&OT@UqF#gK-i?h93 zsP6*9p|H_XX-9aC+xt7mU6bdYMp_J4OMkfE^Djj>hE?N0HICwSGvmO`;h(loyC09w z5QB^GFS?(6Y!80Me~W%_$>M)xd7UwSK00$cd;Fom)Y?%Yca(p+IBUQU|Cutb_?A&C z_f3C*{??x7`3SR8hEZuJwoziQDM9fbG4Ax zE$5dFgKr%1?neU0IcZd@`EINMcV*CrPP9vs& z{d-%ocXvkn;`{g}>e-@`sAmgL)U$;r>e<2*^=#pZdbaRHJzIE84}4b6rRiT`yt*{~ z$K#3R&x~~ZOv2qd-sA2qB z$QdgS3NMF$fmXj%J^BOid>L22sCRCzcQ4aC{PLdbr$=cx`!_nSU)S*|7A)4;kCykm zRBE_Rf0D%Q^g|N2(^vZAdVQUKS_(QUU3NNOG`vbL`c> zZf_s-c0+F;dbIE=jS>+h6 zCmtIW<26&pC9aRkA{wq}6568S!{j|L&uX|nT6x`x>*+xiHL?CXZqj9W<61);MX8Iva&`T@we>3{BvwI!npiZ911amr zTt54%;F`5{i5F9*Bg_;ftd~uuXJl#B@`N1ux}M2D8o%l+@v)M1 z-59Z86$?=DVN@(P#UF0PvQqrvRxBUIA8uo7LZfRx*Nus;@x*P4Rh;klF{HeEO{8hWD+FMB`ffwT@ zh1gs zQ}Fk=7)#E}TDRig&VN7({sC!Uq^F-*V&~rn`I4nyt+R?~ym@Qqe+-fB7{e9HDJnhv zREeE`HLzs-)jFZG?A`|_$%U_rxem)y3xU;qY9H)}MtS*cqoL|QG%V%{_=~vG`$BkVk`h}(b!hC?E z{y3gi@m0I{nykNeJI#>f-_FRIqpWo5dZ)av5NPbLN5(&!&Co%ORxCE&EtH@-m?Z4w z5QMTI8F4Nk<15=MJZ(qAv)+j*1MTkI_0=F4(O8Tp=O zkAGg}SikPhW;0ZI!G+_j@SopKa=!LL7J>}u-D5UG11y`N-ts-mj+Qu<9UH)J`>u{t zFB`2ruopTSXD^fqdm&HMUZ`y7*4f$k?yu};mX>7)X)m;Xs&T@yz9kV~d(d^x@kMiSQ*#$7Y zln|TFxGe=-Iv-o`D)QG`Tf}>zJ zQvth~2<+&pVOO)La-?}^^PT;i1snP;yvU&4%-)gs(az$I%^MfEH*Z_;a-hTZc$zlY;?-r-Ik~7i2=Krx{F}L0lS${Yowp^ z1OJ$6*zS~oR>)ss=E8OiZQ*8@Beb^~_B;mcf2tv8@!(?I-`Oub-8hxhzQ%K9(3Nl5 z*0>922a6zQ2tV4M(8eSKwkZ9PR@$MY!OrAzX^WCUJCp*Kk9IY*S)pCcD1@V3&3?$V z{b7HcElLq=QHnLY8pqnu-Za|Qz;>$uaTssp;Lxf5_&K|#o^;oQPJM^6m_MF99BqJ+ zp0j*0>=g&Rb@{UW?>?6|2haUK7(S-|n@{8!`Bw(FzdJVX)ptkaJ@vu(F?apvh%x)2 zo9+1R5BSaPu$O!b_A$@GCgu;YS2Bvnn)uFFn+1Jc34P_iRAd&QjQj>+evLfIC>v{D zK4g@+A7QuSm+tK!9E&uLn+1Ctl#k6QC!ZjH7rj;C8#O({S1~)^M|+)dNW-YA^k5h4 z<+s5Gs|5BywAEo5au1H#>f8z2s-kAY7lysm!ooD)!H~meK%Wj}tCMym>^=Ra-vExh zWIK<-e^wVaeFU4Gn^vq9*0cX}Ry&GgO1m8d_*+@-XmhG5)&;1s;&5ngwA5Y$uTk3+ zX*=Vdp68yCFTTsw%5Y+wo6L5{J-xs^!z;o@WZ0d&o*`^Lyq}R_)i{UOE{TbE8k?=p z2huOXYt+^z-quGA8k5CW>*-R(_k(PRgD5yLCX4DM-d<<1471h>D(11*Nz5;=UifX& z?q$%FmqiGh%x33NG4SK4I^J0}Ci-l&<-bmZ*JqJpRKn%-VwMQ@W;p)&j?%&gf)Dt zz&V={@9q|O%yvNeeoNqTLPmkOt`T_5ra*Z$2t3iogx_wQQHu)0P-WzIh^X80sB+>I z;bZA#xuLrgzhpK$4*+*YPjHjvlo8fK;bHjcXSIqx1Q`1l-L_~ap6T`oI6A_sey;^b z&wijhDlWYyNPmSZIw~I(uISXr@XYt~-zb>@?a_E|H^}< zhflO}qUsnZ%GoA~tMCe!u;Bn5&aW!xkvGJLD-c)J zw-8r#g5IjW6CbICSNY31etmRNA;S>=JT@sCweX52p=UK*w@Gsj}nJZx2k+5rgQqz){vBm$4eTho&|A2*wVs&;K6BROQC6Zue zqC%v$Gf^R;G!iULREQ`Iv1|J0wKa*~q&%tNiOm>F@k4oy-+26g$SCD!s8@+^=a_Pl zuSBOXuGXEbhEa%Z3^Dl$GKz|IIQY`Ez!~&OZn&8UG`a zzse^`CV^J~9?AIkN&c$;B>!YKDN|GE|D@zUM=_RHJFlt~`VZt=5q>Y@k$*0J_Vf== z!JqHZbP@3%`?K@+rQlyEU$y-*9pq1y*!eqC@PA$MKU?}wfxcZPN?V!4CWa!}`FA5e zMYOjc+!Ky2BK~84c3%IHf`351^6Tj*WarPdcjPa{jWT*n@>k)NhvKiUe6L9+|27$4 z%>Sy$xT<&xYEFXDuf}VIsIe|$?8GKn$)oB8zD*_N|A}O@R>oHsJO88bNG88Jqs&iF z&DrB0fu9{?@Xb>G3K^H>kK;o4+;e-yE96n_Oj zikoEecS*)!8Iba`uT$}r{twIYW4B4^lKg)t@;pjpxsbSo@b2a?PEU5cefa0t zdqmoWbbrU_fW5-*(=R*vPLDEnXJQ|ea{P|L4yDWy+TDoX0!QZ34tyo+ab=akuA%eb z2BQPx0&kBi6VDFVuw<1T1nzNrvOSK>Z1kC%VK>$qxTc}+P>IpnjW7pYu1>>o>3cor zgidsC=$dqJ!@fzhBWWlwPK48q9mlX24P;9kdGjMZAn}vwnQ%e$8dn7U7#{0DFveK}Hw8+b-f>69^Z^{t2jK-fq_@(*e9H z;tZxW&kedjvnD@uV%pHi?vY#O1}9^Wglg=OFdX=Y*~7*Kin1Ox9(MbRHoJYUOe5%U zID)>x#)+Dtq1_(0(Z6P>v72(9y7fia))=i&FJJW%_Fp;l)x(Q$4h9Z<3@g@V?UUfolZEt7JGeM6>J_kH@NYU(BArg#CLprM^3*G-{P^S$2NS! z9)bNc_9Knk3thgcxL%KI4$`^3aHRPgqXt-x{EA-$Gv)Y49%M(XiS*a^(Scl+50yW=07K{O5ChHFD7GEary$#sk} z$Kcmq?dS_%_74mf;$B4v8#Z!%9)!giKeZ90eIe4`UJyFbVMcZ{e;oc?pD{eo_hg6D_tFlh zkNJhUiJ&Xf%BObI%BObI*nR5OsjyYLtmAkI?W86{@72(M)w17R{4c_0>Gb5Zw|mQT zkQcejPF|gdu>Fu1`N-F_R@D2=$DkVz%JL^D!`%1C$o0%#Sj{r+Y~6}|pkA1FQAeBW z(Mc!+TiT$D56_#+;o+7D?zv}6DQy+-{3OzFCw@mB4eh-Qb{G-=2y;_EqxQ&#(BAD& zg!b}zAN05VsnFivdY=NHZ(*OOAK5RqS_QTNLUn72-f4GRh{r>qu#{D*a8;5#)+aC`2HX{DE{48HH<7Y#LmeAh2G#T!q z4Bw5(@NFSO5oCZJN63H-{x}(CWE!=1X)q z^Nb9mwk`du!H(+CiNK`$=JxdNTAk)8Gl%DA3mIoY51nJCcRYjgS9-hW(V)Zg+J~du z9laN%cN|`0?EPqRMjvc9ybMEswJ+glgzFve?)Y#N!nyK-2X8g@M!@H8@R@wK-z?db z?Q4JzNdF$h-6ZJ;1bt^mZ;7kp&}7n26Z9EIr_XS`B~H*sIF~1QaE7t>pliyGZnR@) zBeDON(Mmfyw2eDh22R~N2j%OEj+0lQDpf?h^=ect9w~I&Gjn7va}{de(?~b{FDK&N0v~I()wwP!;s~UB6&GV|&Q9u&ogL zG-WWfem-x_T74QUc-GmOY-`GaVY_4x66`m`$z`>5qCJHC`{U>@on>fXyPQSUxa zy4#?$t&>>?FGd}FELsQKN39igaNCA!_lSCjv}~*_F*jBgo1)C;8@1b9*X-G@mHF)` z^G{8_W>0**vzPf&)H{!;cQf-6>)m$5S7n~{F0ss)qReBTHsr<3oMdG_fHI%?H!t(| z+!xw?_jI(=*k7p#zXfh%72DQal&dFU@AQ$&*V*gxl?D47t=k@4AKX!8v~n+{ZOGpU z`iGW%EkicBjn)kfCFTN0PVd1#pRUFD$ICd&&>#LV_q8E!zL0h9=(o#Tf^Uy$+0ef# zxP5R{@LtrjrMHJ3pzT;2ejCuwcEN@zjP&Cjpmw$+JNr$yaplhu|Kr_R=e~xpV-O$1 zIPcGKU(vr`%g3&q&JSJLogcaKA!EPJ(*D^kZ#qIJHsQB*!)-fC-JugZQ0J%P*TAbI z_cafG_B!}+xwGRVS)W-SkD^Ya5TZ_AfjT+6kc52%l5_u03fe%bZ*@kK0`xhR(? zn;WchnW{f%+kmp@Vp*JoviSF+EIzT}YkRh$>_zaaMxV|8yN30!KiV_o$rJr<3U(l0 zRDNLIX!Azo2lU$61KlEA>s^1hKDY__u^s*Ut6rCn<*Q*|^N^*;k8KUZkssO7{9v5& zw*xJU2UZ1hkT3T_uRnZ_`7)+uBjRt%clqu@zU)B0GxcFt4D3i|o z+MvsORd6cmQW(E)7dm`xs83xeQ=!*O%sXBmfzKf$%>aG}|K;%^#_i$fRayS+_;mC) z85rkymYrOY+3}|vvO4+}WOsaebq@H%%DCFY@@{8nce|7C0Y+z|!7f&$VV%NOybt3szE6BcKa927AnPyx9De7&@#}VuGWX$^gE|++IJgSGT-;9@Y80sW zLw$wg8NW}Xt$3c0v^}T8?_{1t-)P|d0W=KIU?1tkugq6CuL%7~IcP?Z?(BO*yK|s} z^^UBi)Av38$c*3K_Rd3%OZzaT>dn5x*_zYpY|Y#1Z0+})vvq;PShdt~-y@qG-^DMq z`zHJzLSFG*`x%OHzA{b4CX17v8#y-(`C1~T{? z8-xrEkf9MWG(m=?kb%1QI5s^}>S)0)wA;YXFJL@!kO~_XTz-gpANZ} zII_yRM>$IIp4)l|<37A2w{nlngV_J|)1_&ppRI70esn>4@Z`nD?!FSEv^&EY{1ETl z2Kt|#1)<%|PVCE?QN82Tt+P=dXQE!t=-@js>;Io_nBH-6#Wai;YfyhL$GgkaWvV?e z{Gq)?_*ECi#&~?E=q>+eu?D2ZgFYYcgNLEVhLEE#JroLN%&ZPhm>&vGyslb|`&gD) zrqi;D&3gRa#_x~#y}!B0cVtVE@2>qtzUN*m@(lr>3-PU}(jd+JIMc>$ncX*~r>4a%hdfA0EZp2(e|Ln2ml&sqCBD`VyC~>o2Cx_U>+iXG&IP0hz2Cz&t&v)>$mHvY$1;Sn^Udv9Bh0DL*X4sUe6IrAhkY_X#NP3XHa~d9 zUGUp@&-tdS;QlL09a&kwM){oPFfM49!P6FQid;TwT@jI9Bzb0{prd=bhv@I}tZ zC3OYPVEqtdFW*y+q21h?RULe}pgQ;`yvqlWH=JX-9(~kZi2DOiz|2RyZhwXOTeNv? zFLg~ihSzjVZPPFeT($R%9}6MFg1NnOCZ%OjWkJ9z8| zos7%?=41?C`cT7{4gGR{W_v@qnFZao`O7d*Q)Vtf``YF&H=DrAfd0~HKX5)px<*~OrMEo)t@z^uZ*DoQ0uBxf2R7eH1uO_>D9q3 z^lu*YZ*J88srbE=R~_7r{+MNSB=Wu$efG1^M=AQaf~-;IJJ{1TR6O1+McDKvS}L$H=($T)L9@+N;tx!E82upfDoe@mH}f&AEy^yg=dHU9t|{jsvb+#eW)wIQR- z3bqj_o0GFj%xbiq`=&U2hjZM%t`PQJ^`!ZVFz>Ml`B#m6GcfnTckv_XM*mKXp;%T9 zZE&E^aI|)xYn7qCa!+Y@NoMJhbFzZn(9O}W8M~(-&BKw7k%1DkKhot!8QqWaum!)T z3j6ye%nUpPV3Maq8}>S7nl7VF~vJ!R24%{uw7o^j^CfbSO6M^z8El#LMe@Fz$^ z?cfRK^GHY4wP>SIZ&_!%P&OyeHhdA($BjrY>*OKSNq?5#9C^<)`#I;9UK4n<`D=kk4M*1{OVFl-(WbPywoLNlIV)Hl96hl* zc<$iP?l#oXiMamg!g9@?6Gfp-Lsq1s=byUTZ@v8oAusRuj)PGdq3>eq3k&vX04M?IGq zt)AcBcK=a~%RY1!c2+t(Kl9<9@5_VBjZ(-vZpb`Gsb`ckIN)4k_hgjAJ4(yUCrZoB zmovv;AAO9Wa{KwJ()#(_$j^o7UrGu~MBlflVT8%~jCADhqCFV>%(X>UPV6t!1eB=>oK>v3UjbkXqygi-f+ba3UhodIc-Ghz2 z1BV&A@oC80eC@zTjeT8{IImZ_XyBt4W*DvheUV8l12q}Om43uge&fd)Z(m$wygh{9 zKH%qboU`;p=(^c8Bs&x3D6sXMb2G1*_$bQF-a1!k@9=@u!3C~!mU=PAP=Y*iBClRU z|Az0Q{Z)7m!aH-T#XKGJ4CnFn51cwZ;g>jjfce=5xwpFJ_8oE!E=vR7!^pS%)2F}J z?)qvU>te@-ulD&InY~-lU%oim`Sz(>r=kAVpdMe2`aBi&`ZA20r(oQy&-uS5=KNV^ zjGEAigQ%~3KhD~OcNjdY`3KI!+=;y7Jj_v)ksQp!Y-qLSVK|q?d91L%*lgT)x0r`n z*iald55qWRx8L@F(YU1VAij~22YCKX+@h6J>$p$Tmw4FACWW7_hy^{bcH zHTf@Fy?Vv!i~RE%>Q>hK*WSFcevQ9wb-f>(O!?QWSiQD>@tD7Q>usT*e5obu+I!f_od$Ac~I`#ZLR5Z&m82Q zRp_2Q#C^q3VT1pejEDC%EKbnlWjz)b6W&AddtHYAfY;c1I`R?rqaR8C$4D>PdO^UX z217n2q{O%g3ds>=%db)dthdOMR{s9_@HKd>)Pu;*6#^{#u za?Z?Hnx#;@u-cMvQc9?k`(&$W+HWYt5lFgw(vOHHV4&JijF5p_NO#`v-w1 zt_^!!;4GE#&RU}=4M;Sv10pXQ@UeUm^#%9}q|0f<@?F$#;NKMCWBDuUCGZ9KIYo`e4VLp`K*@6z<6`?`#ne&X?1zQp5+^^yKAZU6cB@UeW4#}n(LMJKU7 zTDZPCB1Xw&_+t<9jyBDz@6|myz)pr=m?HdKA38f#( zGhU;w>qp0R`6p=Mb@_FCrVL}3U(vVgLD9GC!7u4ByiPwLafa9NIVt#Fr{TJOB8X2% z`sLQG_}?gTuEo;v$mh_fE{~or9S=!fcKxiCxRNJLKChEkC6B^yv&pY;m9B*FDdc|` zAFb#p&sghL{72-yl1J5-W{E5M3jau>uiK@ne$P(FD+RXGnQ!B(>c7fI6<*=*NC+T0H(O2;leXsOWS4CevtEdjp8L1v{Rr(`7 zO2ZX>JFe;x@qiZIFYk$$YPbqxr&FPYFVn(TYPf0x357JAFa64?a?Uk%`r0`~hq#_z z)jkl{)7u~k5?3-4YSVB%U2kc)F8}W}T$i8YH#*YS<*(Fmy&YC(A2Gb%4y%1ph$|hE z?lT%4y&kDGB@D0Ei_x+i64%??kcLknVdbP1cU3SV2lZmp59K9R)c-MDfkrUK^hATC23T{}k7OyXk^jrUlzVi_e!DwL$8`zg7i zUKDK%_S(jN*OnA(jOrU3o7Ofik4|Y!y>a=XHE~4LWQUmGkUsi8+Sd9DlInyN3KK4WhEq8nFpXYJUE$jjzb#iR8N3$9;Xw@hun ztx{%Pv1_;5T3e$bjmQ`Ok4**Hx6_6IwnKk4>5y)*iM3dSh(9bV#J1P##w6SOdhr;s z0k+!vI(|JOmK6T4*a*8C^-4DJsz!-xrEDb5w&t(~p;^W4Z#W@ACGk)7$I6Fm9?uki zn+hne_W1h|*^V)2&u}Y(YKzzgGo2m_j?TONAO-&;GF-d7s*9ahL5ldQJ&bFsK*Sy& zc4-M1c@@e|ql*u4e58);^1lHLBog%BMG#KCr&~{nybi#_E)&DPFZru}m5=0Y=l>kA zWc=sILZ!bqBWMDzXOdtH_j}2IGaumi$hTrUf4(avP+oSs|4E6s~xwE5`}R!3HyQu8nTxIj)(0u8Fq8PilOq4@^j2;m;W%ZWb)_aTk+Mrm-Up$ zYZW3Vi|>^MO3inrir<9D$>eXB@~@K-DL>1KUHiVR-SLqa< z_9kB68z5lk_ZyRaZTx4*qm#=I+ z)+vJI7VP_uy|?lFEmwzl9%-CdKbPywsyb+sax9~|kKcO(SVQS^7`>_XlZJe?4Clx< zPVjoX->|+Sl=DR?C-?gOhX-pLe|q*xA5uJ4)}9jsI@mabH6zh)ot-T61U2BKH=GbNI3=e{R z2lRn8ab<1a3O#VpHH@#PTWG8OX$IDG!e7b7HK6oUHaoHVL7j(O16cyMzy=6<9n{JD zQ@2irEYM6n+Q^V5VCs+J4WViB__BoXO6Uc(^pfA*6 zO%wMS{|xp6b&!kqpWwdP44r7mGfq5Ua!>Xu@O-JAdGT?-!jt+M&AtU`ki`vutkJwR z1GbcoR;-yUqYdSYS(XiD8}jo-*aSIXkMIz9A4NBK6X-uUH`MV^fwA)dY-6?odl-I< z;~7;I%sQ_+_%y;Fg$|mFjaJyDzMXYfsE^l>yDC@>`v}_7mfl=sPH!wWm%@HF^YrN# z+HdjA8wA^mgD!I%bv6@gI+tN>Cv_Jo3YxTuhmE$7=V!33@nnZ~Q??%18G8nVcEdJi zHyQ)Mw`ZKi_a5+{A$d1t!j^rXZ`acPq21Yc8M~%|C;D_RY0RLFO+Ss^ITpQ$Oh;0B zxsu+%7(Mg@n-`&O9TI6c2ew>R-uJvVvBkJ+J=PAK)5&#f4%pJ}!66a`l!wf_V;OFYK~v4`){eVcXOB6O_xNuJDhuZik&C^wo0HJuS4S z-#EBBc-OG1;O2%h^SO0J=D*V3?;_as!NzwZY&o{C3%~}j#Qd*yrRJ5uX$$-+?6gM0 z=4u=4?YgiArx*E+wZN^@9hogY$DrP&D2wH%PS>Koc;8Dm-hShcx4(1Wl4X6? z0RQDEvzwL#`=0*q)3v{X&65LiQtqYD8*ToNqYT{f?NA@{^AOq*ruPNVVSTy^`o9Wv z8Ezh~Y|jq5`iuJ3Ffw$4VW>Z@w_v;ml)In4WVDuD6`32zHBMlib|-AX-Y(r|wB7?+ zo=?9!_kh#W0z23fIJX+>Dyo7{!1icPsmx_NxmZ=7`-^>r%PO_Xu%M9{{ zZ7|Li+L?(ul7;#?9qs<5upP{FJpRa~4&x7{{U3Ow^h&HHEXF0n=N^)IS# zNtVBM-BWMu&m(9zvvOc7=J51}aSuDo&S|-!6U%a|`(|&2%_r*GiwO5KtS{kOxO;)W z2t6@f^tb_;D6SGh+m!ST&pj~LheOa)&L$&!_zjysG*v8rFpdV{(i*ud9Qt-R` z&!=C&dn)!|@O9?mdK6`(47{=-Lk|2GK!!%g-CW~xVzl6eJjIoDp6x*c^BQH$=fyPx zI+XoNwMepzn4Nb7OKcmZkJTrI|zR$F=)@&CGV9Xppr?WJ+1HbS)xgb zpj~EjnlXX(H{eXHXIo|651*y(x1;Xko!0xmsm`C?;CTBpoRRbC)h@LEI3wp)?7=aa z`)^qJuhv1#twJpJA=n zUw^i}N{*wSX@{LR%MRC`Jdb*|2E15a?EQQ@`bFxNWlQxr?Fip^mT^i0#wqQnw`(y@ zAuqQ7Ch)X&lcHN`RC+;3?zKox9U9nlRuEgwa^qY4yU>}q~z-$bZnpuG|vpi64HjH!xmyB@+ z*JIqU9{tyPj3JnRXWL)o)2sI)Ut;fd+-rsJ4b;Uk>I&tj2iKoK7Y})?F%srlyvHCn zbmRXD<$|XhSPOQHf zcuR@--bELf123LveiQ4gDle)qcg`K;JKo?o-$Odj$-cncg*3i!(fQ^>Nb{hJ&o_VZ zje)*M@kFe>G-_9ujWa9CFxG{A`ehdto4*NQP0&Rp<_4@k*@pEBsYU4Aoc z-$!9=JO{V|d?BzRgnM$&aPt8Cj_es}dax$U*i#|az8CE&Hn(66%S4Rr+lnWcOR#=| z<-r<{4D8&AF(coxOObYcoXhfKALp|Ce4cSG%MZu75sVY>#5i#=#<|yXocph-$B7&t zz5_XK!u1%&iI}GJDj8cSBi^$IuulQah1%HD-e-p~ZeECSvsG5CckoZIep!s)>}7-H zf_uzFvO;^e7KHX5v)1aB8U7-%cSmFp@I0*bgkGOP|J;UfcOabb=QI58Q2uzY*ov}s z5bwWjs4JH2gRo!IfX+jZ{{@T_6(7bA;@w5f5h(c%m_~sIYrhwQ4(pNf7wcM)2DT~f z#T*ZYcB2nm`V#s;E9^j#pX^sCLj=FYc~xj*t@IzlJOz0~(B@zt9bq4zZ2p6FgKZ1x zXJJh98tTam^!YjHH}T!5bv^c?n2x?5V;zj~u%;Me(@Pzmr7Xi?v=wa#Z>8HO(oK1e zBOUGcRrR%}89R^S-ssP9EXH+^U4`YC!@#(Q<5^3J{Ptve9+iE$yWH^!VpRR`OlwsFSp_9v{c13^#e zN6pLhE!czh+&(X3%?o`Gd}}Zcy$RO?NN2J!un&4E?0@GY14}RufiPSr?1HEDbLKm15m5!PZH!nU#Nil?ai+^SnUL>B)Vl}q!#q{TKYYv4 z@%**Uju)XT^qD(*pv$8RIUnWi?Q!1y2<*75ei-;q1wNqnfW*}}pYuq43to}$OwPA| zcd-NOz?@hc=E9oUv}N|W9o0TJgJu}{#_=5UYcc9u1a&VLdmh{boc?0Y3VzMVf1Xdr zv+HV-_D5xAF8U;fSN&0UKVvWH9_fcVe3t%b8v3Fo=!-n)m)IY@=p4}7ScbiK&?j}H z4Q)i9d#Ph!Zx`;F4*}GdnRp)vV$94j_~VWNy`7GG9+{5v*981=IcB9_Bi>0ip)KWm z!rf>qmq4dAxX&!D?(kzCsu=T7Q}9kQHOV^(_y2L?ox}rv%_ze|kk@zzMVnM&_I`T0 zHZ0nwVzY(!Xq!Y^g?r9b!Zz8FgfX3k%7EWx=@*3AgsXBto!*e?grkE*e`^*%G;fA#y!CZzWnlx_7sb1&)_$B(~- zZeBz^+tGi^BR@nvTaJ8bFS6>)biCK#o662+7FZ#U4(UK{s3zJbNs$8*~hkr=RUGOn})i>evju}86C1vP^;h1`FxCxLVf|n+)}pzv7LD!s2eJ<& zPx7$(zu5beb*83ut|j|E#@PmX_Omb9m-Uvv+QhyL`(3^Lakg>lx6fmLzo)Uk-;>zi zZgQyGO+ZqOcrnwsHGPx#yIM!&o3X4r=;czppuqx<5pP7L%qXT1O-sj?a zSLJ9k;va1u!F4;<o6APn2NG+ugD!9Q)9`w(8h_a9_U%cs1=Y%76K;A34$?F4& z&Ez#IFKFSh62Ftg;quYA8|rMp2P7}9=X2K-xTksD(+9a{6uM^)anBm+p6$1EQ|Vw# zxeg&p+avT=EBz`MK>6X8vaOVULYLYaO3J%Q`ql8N>qf>!ofEE)S4H;$kNDhvK>8hF zh&a9F2>%}GU&yPCwjYoO1)Z*ke{t(3q4)3Q3%!q)VW@99UNNUBoQ~B>jQK@30Y8j; zg%jt1e9rZue#B^#@rLrM%Pq?T!@MHHq}kJ^l^M)q2&c*n^?g!em^-x5w$_rWy~jm< z#_5zgLHR&5mZK^7FhGa?G_f4HYx3OF@{_E7we%N}aajcEDAyK=)ewm0vsG>bfOblM zk=Jo~6~AJ(0%0*W5$+kLHNK3yYjWJv^4!z&-7^Z@GrjIvgWR(V@&09~bpVv*Z0=GB zo@~wMH-+s2TbOt^THu$)gLuMsKe(y{{0~AglN0bqM0lAv&3A*q#h->krvhT?;@#~6 z9~2Mb>3V^y)+FYAg}^Z)x4BAzCu+wL>QPv9(h@$NGr=h%1bDGPI#iZPkS81HUHlSosm{IKr& zUjwX4zC(ki_l3Oarn8e;@J)3M|@ zjbd@nzaDuvM(8Kj&WN!9{AS?i)K>K6f~TU{9o;?ml&7)tuFb~PSP z?2qX0id+2~i{TPG9mJm1ol9%q6vnH|h}GYCJXRkS{yOS=veLON1uV~Mbo$JfBD+OXzg%$2L>tZ+s9Ti)?2f`0_PzbMDYs2u%@EbrU znVdUP$obDH^zdv7yetL%KY@QTz5`OwDM3G#Ed0(C^dC<_XLyS6N;5;?e}mKwFRF#% zn%L_#T=k4xv#sN*hH`D~&02U><49+!hF8dY($R6%f0E8kTKJjrp7;_ChkAsw%c;_3 zm(wr9la8KV)$`ivsC3!sRBCke^eXx7=?%&7_VnuM($jmLMqf|wP>I{+^lS9>e9`4x zCByJiBk%2cQ2jIMb8MiTl85r^_+lA=bXKdtxUST2l}17l4WA|NdD*1lw`jP^UzSf@ z{#{ylJs%e%93ADaw{FFMgTyJnj<1tA<-b)6zeU4!d8|EdtTpyu)55o--JrAUbB~5| zY^+=Z>M5N){B0VphgbEH;n!MG#lK(PUjST}Q%mj@M|IBY4RPA|{bM$uS1P5L^n+6~gVQ46n^XFXq3xwY4qu#8Lk zdVSd@ane_D2_2BQozCkLx6|p-!hc=f^YW3rXLubyDRJ`shP>w`2hVhNzWEZj^Yx3+ zR=N77yyr!|huP_PQqWQ5hvDlqIsti4zB;bwi=OWx8Q#u!ibhA*ztTCw>-q_6;dNZq z1?p{~48u!A-rMPHl(=30TO>|8>*PHz+vL4n{&tDm^*>zVq@$PfN(~RodtT|j;nG)IqPH? zUM6Vab$pV<$yYB|GbL_MuhOSIy(&*hM=vLTt9Hy*JzG&qp{q;yV24#f@4IsRU=MHYEr@w6#MAX)akcU>tR8TkBJY{Mdi{M&;-t@X zsq(r_;woJVZ?}cdkH$|p&jG&EH9TM56Td>k3pIR>hWj=AN(~Qa z_*@NF<%;y@X?Ud;zE;CS8h(|A*J$`xHC)L?`d4fCP1V>$8OVby?r>K;d(pyk%sI2GA4PV^6T~5ui<*T&3S%0rZ+6^tiO#KUZ>$| zPcepHsNuV`@QXD3h=woL@WM3ffpqluFMTT>wJv#XedF@Q_3N&@v3~WZLR5>#mm(#STT1WJ+2oJ*L#JS-W}##1mw$Z)|Fsy<%~F)#}xC zaUv_3WRkFbkO(rn{+qb1saw-9uYN5bwC#FS6akAJo>p;J=UDh@%h%N7S&K5Ku5ooD zD$|zep*TpNs34P9+!(*(lL{z3)Sgg_R?b_A?U(ABrZJnQEpLnyMny`6OI2L4a7q25 zwZ_t>x;1f|K&j|r@2JM*aeht6Jt(YpbzMBZvTpU-M(zj2JU|SQC-rrU8WuFvH?6E+ zt?P;<;Hs6_RjU5#)paXnSV{P@Rf!u&$sC(=vu5DL#olv1G|4En0a!@(Y?#1Z?|S$E*VMFPkxojMEvw>jUo!5ZHBM}+HCAn|1wd@B72RSBzy%C9 zR{Y~{@tE;qkF9amPFvz1e}E?ndg4F%23!auHsBg3{FJK+VL-X`y|?Z*(Jn9oioXL#2IRF4&6hXGXW4w zk3$V3WP4VRvYSzlVlSOD#kY@B?eX7%@OF&E-zv9QsBtOBZcL{d*D9Rjk!1YU7^=Y{ z6aBaI`WHmDV+`CQ`M1lMSE{h2P7(4{8wZIzltcY_V^#A z(BJ0KRs>bVC_iPl%bx@0$@m|U{BDz1b+Pl$Kx8|{uw9aWmyAgMS@_xc)7C2)|1d$g zZPq3FZ|C(H;@dF>js&eJzn3w|pJma`|9jw*jDH&F(y8#)QzEbX5jh$EmGYCPDyQV1 zr_ob*7qDdf)wo%OLong&yw;>BKf|T`sve|@e`yN+tG!=!I{?zK^S>yC{+ng`b^RA0 zzS5^kS0}J!>5s?;Nj76-Eu5YIcA$2Q0oR=;f=A~XsednicK%%{(!WRYSM|rDmdNX$ zQl$U)l7EeiNdAM8@Xt=c|0Bs?RwKneA+6~t_*Y87m7d9;_xAK-okddp7iL&2mHmto zz^?1Y6y<-8k`H%4V#X-I4W_$m>^#oQ%JJ zycNT*@%IC=^Jlt~@vmiL3D;v?qW^YYjBCdjI5feE^1gKu=`Y5;oqsE^Wc(*#p%h)d zb&3Ald2ND^9b@1^X%eEB|KY&x{FyJw_|N>D{6mPJjDJNE{v(s{r%iS;{?|$VG8+)n za&}%mw-ujltL_@kBEOcZ&MOSmjxpf-N%*r% zwDa$W$jSJB(4SOd;jO1cUbLT27XOHh@1>{a?6PvNKs(0Zp7X6pVe2C5FPk*G{Fj1$ zGX8zCK-Qjx|3&am#=k-G->mUxlV;~%oudDk$<7{5+1Xl8iM%dJ(SP(w{_Qd%%MY{E z&VOkN{jWR6ifB)p{rUP7`ft0yim$g{gzWt9O_BcFB>x(VO!VK*zd1$vcO~I}VG{l~ z151|wuSot!qMWT8JAbx`$>O)mgg*oQ=*}L$2%dI~;op+-hxq`<{Nq^CuD^LH^r!X; z<(NTtc3!&xP=1h!b1Toa9_PoQG5!jE9`Wro=~q!{g;4ebl%H0GcKNZVp5U+AIV%?I zDJ1`|C_r8*E1kM>vmteF`B?urzc;C~hi#Plvt^Tk{d9y2*b=AYSHu^mD1VhKY;c8A zu}uGD{8W5ZFP;W{J8#CT@be$vKjk=za`U^TJ-(cKQ(JY$_Ub&}@1IyP*6;U^6I*kR zt*AJE!UVs6{P^+kp$liNzij4Irz55jhw%?db=j<#f`14<{udymZM|_>x7dSW=r{z} zvfhb346$EeLqYQpvFD7~198|moGZDT{#)&zUy!l2cLxVH4I}911e=oy$-w*U* zy-@!Kr?p3@lFMU6c4wx62KGLHDt3GRaJx9O{?f)kANkWC;~23&Aj9!2O0MgliS^!( zI~=`T_@sn=6R-z{r+0c0_HI0VTI?qZdRGd1x8MFiX=6j*G^`nCd_^~LpAE65d$&j% z_?07VT$A5G9o>9mU&M)XU7eBL*o(0BMW?5ieC+#F*k$E8xaBu5>01vuk)^dfhnD-L zEk#_e`)B%MS7RKXjW1zsD65;Q6LWBHU!O)l*`!$4==wElonkHHz=io2^|RKtaVWHw zIGkVnTjTO(c|TuXDZ^v(UeJqM7nmd7zxPQ0De`)z%YVQ#*&4QaqRPnuszzY8!24;4 zb$gS*WkaI*t`fLgL#*2-fy)#TKmY}3h=jE zYmq1?Ik+_2ZcQZMiE>)u6Xkpt9xM}f$MJQ6wzf*;@gjl8^rOm4m%wBCSLL%+;4yhr z*`y@8ExRb^z^VlvORpc#bnEdeFk<-_CJ6T|e#zv2Jq2FKNN}_@(ciO_ymnj<&p8j} z0`i77B04@n;-n+HZGo^p(eayZOdGK?)`;u5Gv5j>!t1qTorcTTDuHa$aJ|;FX}GSZ zE)AEj7Z##@DwX|d?BnVf^;OgQYAF3fe(f_X19LK<+HB}ij!xeU)#hd zvMKdV^=s?#X*2#KnD7%{5aXEGz7R$~(20+3i86~XZma99k8JW=+n0Fsun>9-KFQ%j z_u9IJxZb>sSA04WC&!5IS>o%J_+lkKNm-wv#CIkBRmcqaD=%L`IZA9DF;oB?h*1XM2a5g)owp2(SKblJV8Ey4u4&1rK8O;OivtmWn8^D*qI`6*u-Y z(GO#D;o7Z>SOv*;Ud31CVk(&1c{7T#Wonb2l#%_PJwDFts$0FN;d8%3oqztsFZ>P_ z@lqnog~TO)KUs*uj)017;@63h0ozk$!lNrP#wLZ!q?h$u`707WX^ajlGOc;+-G@I$fFA)4e^* zXQbu&im-nU-@o{d(RRzEJ&$EzziHRd-hF>QUE7n5{q3@_-y5!mqvZP@(7YJ?di@D> zdPX^dAO3?Yc=%lG2L+nfBAx-dRk(L<%k=%o8QSZ}#C|p&m#_OgW3L}rk>T=%uxAhX z9V|EYk|*~MJ&E^AtfSf6jPy~ykIF-PAN}lG?>NAdvUV)Fb+7GqiJKhu>XAP0@t8kl+nFgp-b+ScIwud$mbcz@9D_*X~_SYj*}}c?>JgA73JbG zl#eOc`)l$tlozYqU@t5CK6%H=c}@b(K)~Lz=gGaQxL;Ry(P(oS_OR;tx5tP0aep87 zv^t9WHrxjszVW>868EOK4>*R6=X)y8X*h`T@!`-P%sw#msoB1X#;T`>ZlB%mGiot% z73WR_Zf@VTeE{~Xa%8p`4&Qr`3(qsR;#Z8HqY!zFJ+55OWc!L)rgA(!1N%Rfc-+1^ zydQ`CWoBrYQOmu*{vEnw+#>w$#6Em4^SlJauPQ7torv%Bczk})2>AnMkzvL6Gyb_S z-Nc?s2W5QnPKb|q!|@Aa&n6dm7v(GdMP_KQ6@RygA2jz}7)1Q@%qQ_v{Li!bm1usH ztpvX|$RcD!8kx2b_HDvGsUmGpLTBi&y&DkEkKY|g+e`R`3;kvh_W(OX`oefWXZj9f zFT%;Per(;~>+1kbzj5h%hp{)|)(s2#MxabaAUoxMLdsW{K)YPi-3T+>A9;ZCPWkSa z`m^*Og#Lrk^s6+6ibf=)G1L$Hm?HiiB7Q0OmnP_sb(8uxim>OIUH`e33{IqRm5m1V z%rX>08Hg`Kfw(f{&$jeT8eu_0<>TiqM|NN{qY%81%Sk^LUyU5hYAQJD!tFd-Yus83*{P5R#f`AF{$&|tU-&dwtN7HT3P%|!OLAQ!4Kgi4kEpjQ zEu_V|!TPIsu#D)sP;tql>sY)j)CKp&)MX(LrB~*UPD}8J>NRMhZ$$l_(sAru*57K> zn<|Vati3apj88znibt}re@(spGUkr+(SE3R0X3h*cP5lm;lz8;O52`)+-L3Y3Lf!3 zI_R-Ncg+y@w4v_lrhA6pJ+s(7Yq)#%NcR;1#O6B{-%siG@FgX>$DGGqljWY4T@Kb5+B`PEeRcXr*eOQN3uEP+Z~L7R?6mR zA7!1A8Sg>6C+qaeczm(I2gHMT+9dGAS(fhzJT?caBJvDH>up^j)^(l0_1QoRUn6jR z*3ZIU#>HvGaG^V3l>(2=jf%VhwnX4DdDJ^FV9cE)%5UMZ@O)OzrOmx6j8|6@JzIEU zx-2{g?CB)R# zB(CQE{FZl=zA8V%ZTLn>Ct$-LlenIbr2mS<^?W4$zQpx>B(ChpbUF2JAvztsp03m6 zQMw}ZjE3vqgt|1Ge4|c$nJ{8sLsr)})v2!)V)|@yeN)rC71yh^UaMDd1$DwXxPWW~bpFY{ozS2BB|AnHE+mIml?sqoJFjx!c8o#i zOa97!p6TT1)UN;cfh9}-I?4ZR`Tq{$C*$8v#lY$L&(WEke;cr5{5MMeYP^YH!r6H} z3e=7<;O`}WUH=>f+WG$zuw?r0lja6z)BjHpKN)|&98Br@XO`IcGnwSC=zh zwr@w@L}!>>E@=!m6H{Nr{w_3}5?L-J zE+OoYDYWkO7&y-<(^!SGDQk^Qp*_N;?Das4BR3RurdemW^qj*vuoCkqu7)EstIHL$ z=`xH6C`Nzlc`n9BI2WV09A{#bxNzQ18oou~ygm6X;S+oVxZ}>QN!|Fi;piWk%kMG= zU6D&bWJ|ZJ>yl&e?{N+Nag7oAWBAUFg|rto zY~!-xbxxbn4h&OfRc_yZ7R%lNV z&M}Kz=r^lzhS_k;y)C-1#B_Ubei`no@}0iLUYBoU7tT1tZzIm+DZ+2c;NfQ2aQdnS z^PAIf)6ekuj_?NNMPWy``={wf|3=vVedzL(9d%`u{mPlSwCrZzyiVA|(Vj31dJe1_ zHqTRJ^mo9fkn=E&(w>lMZ^#?el9Ord^^CR7!5ocqjD95bct659 zC+ge^p4)h|#IdYzffL`d63=eD5$Qr%!MWJRIF_RqtBqAZd8v8Gfz>hnvfLP$XJxtD ziZhrq@g40U==%-KE3&Nkp_9NHMJ-O~q{z+kjx@l}iF=+WvJZ2bH$whHIEVUh3D2Y* z*h!j)`$cv?1Uu38JXcHM*F&YS*DQMvXHXwN{x>6yIO_^|?^&89^PXpwVb9LmX7KjJ z<-c{N5x%{^F4O32M*bIm-BHRsJA$*kt+S83olfXZ&99OFhuIPEFgm>>LZwUcvRbab zrmD0TGHihi_do`eGvs-8+2hWvr8A;3WQp=O4g5<{{)$BT!?~|+%chp}GIPBx7hK~g zZ3O?r1FA|b{+`Za8~>w7ztGufUcY`;|*lw2n$8BZ*HIxUv>}RG~ zd_6hdmVvVzr4#Y$x9%HNr5I;ZyVYHp2uaK`!=u)=dYG2eLnmRM=5pMh&na^Y5FPCbme-HrZvzf%4;-D>pypz z2DA*k(oyO``|3eD^*kr9Q@6&>@a$Vqjc>C!iwWOa*|vVv@0^qBd&J2VE_}aD!*^Ua z>OeZ$Qk+SDs|VjFoH)NU4d>E3%f9LKW*>FBW|ZZ=J7n5+@3{edujTn>S@+9O&Ud{zzGd(LoME0>YUZFWcf48B;&h?ByFkJN1#pIi1uw8zHdhG z4d*qqZ%16C%n_iS4%$auuChxV1D1AUo*ie{_gB0--z;spyebsjk8>ioS5}z&(H?9s zbo;iWo!}Xh5uCr|HlLmS8+;?l#rNvQv{+oyBacr(JB%}Rs?k2PO`3u;fEMRlZSh8& zi?$JM@SVUmpsiBj$#?3&P_PWL%zz%!abD(j#JwK;FBAN61|`k|I)C3oLmE50=aLuC zCaQuA5wul1&`zqdj&sJ!j-bq`^6?nX++p1qin`YM=J_qxE(?je_SkyVwG6GUxxQFk z`w(ZRQ`RMrCo^|w%L0_`!{B?-GDm3>=Iu}2T7&$)9Qi&K`F|P8!4!PQpNz6%&AaoA zp^q}AiF3=@1|CFPh_dCi+rjs^zW(EG*D&}G8;AB+^rf(k!FR5z4z|PUjAT8YMsJJN zCl5nAD`}t&v&wK)2kGcEbX)oW&J~uEZ0bBQohIo$fU^oo`!AuZ{swz4DFvkm-l668}88`;%vh~y)7t% zu&XaPin#aO(%2Ug;Y&sMkO&_zyV;i_{G|xri|`m$V(bK);l%T}~X64D9TXc`VK_%k#Em7UBFsq<|PBd@TzV8msslWf=v={vi|Nn9RlrTps7`fX*rBM9BD%)HTNdKZOqNmbyOs z_|MyUx74*58>6p^R2!`?K_1H1!gC+N+Y7x622a*Yj+^PnaWeC#24m%?5w0C|yQA0{ zY)p^r<~Rg(eK+~D&IPb`r3h782=_E(=S7%H|7bs z%AlA2EWaF2f4*{S8%w`Ap=Hoj)>w-5o$1!k3C+~TK|L8$IK}Jzf9$;rU{%$bHoVU{ z37lMn7y?Gbb56o7L=GkqG*Xq51ZcR3h|yxl4hbQeKtf^?6e=xIXd4APL9tqOrg&|F z+OdjOrt*uIT3Q`PTI)D%zxhyU8wj?x-V%%Df1b71d-gi}>;pJ$=llNoyWnK+{j7Jr z@4CF}ve$msTKywWKVqKY%=k)M$T24KooVhzTPW=zbY8WGUC75qwS;=_VH{x$V48G#<_xHb{xbrfdna1`y<8L%P1t7^|fRhK{Y6^sqo2B8frJ`^|w>#=a=AI1l7%NQfEJ!(P!^;Nt(Ohp~wd9e>Yl6TtSz?M5-9+AEIkyp;x{P?A@XwRHjw6?G$ zREPS%y%6X2p`CmUV}n1GmxjK9GpsNBd~W!4ykESIcZzT1pB?&1W?5+4O=pLmoH;r4 zI{dGlIVtoZX!aCN3B3az{TSE&DD>o_y3pf`?hQS$s4Dc>qOQ=+MT}Q7;1@w7UvyP?)A7bj=qnN!cL(m6va6ITO;rug)u(IMw5{K^qdQj#&8+ao$1TSLK}Xu z^wAH!QoMN~WV9i@n;~b_ck@nr2y(8T7mJ>S^t_L8Q%7bbbnBu(cskN{DbCa0hUcA2 z0^!>-&kFV8Z0s!3|;-z(s27tW#P`^>7iT8&k9{Ne|WfUZcg|& zc&{8D3WWP%XL1N<_U*^HivzGhneSt}XI=fkxapx6$4w4#?8R~RJxEh8XgA~i?_aF) z(2f4!f*r5S+&slMHtTYXQ7Z7>%Q4y+BkeI_EKnF)^{c$oI9|HlpRr&&##&6vGT$ky zHsXE-#!>^X-#C_ex(e&dRzdFyFy5-fZxwV8_KaI^O0&X!K`ZIEER( z*dI2QHHV=~n4iUYuVLt+twYo$>J{^U>ib7)hS*kAajoCDve7@geQdAs?#6m2_3bv) zvD?sYe1tk+kJH9LuTN2RYcI~&>|J@z;5X4uti(H6HR8@oYH;h$A?`9hzS+w42( zrKuR3yn=ZCE|9(BU9?>%BYn9eUK<<1Z^?6cr=9#l-f55hynXPyKfikLcNx~coJ{NF zpZs7}-zyc?)_=yCx;JC2^bW%9Mg6(icT(0WU-nB6qujPU0iFJN^B~G&-y=w0_E)Sy ztj~L5FLbgX!#Y`=O|06TQ9CjxTG4}lI(j?n_hyW1dF@AiX8mLR#`m?nLw+ka!#CKtqb@Dry7r{AP7ykp~y^7!Opx-0@CGWI<{(0-*cYeNl@Dap!3uLX{J*#gO z;`<2VdlTY25ID8?$7m1E@MUGej_IW)gq?yq*oVFmdAg4}G!OBuR`ES&^P9*McYJpv zzV{wI%B2+B{@OMkGT+B3)~Wc>#nfN>S?(8d?k;Yxfwh1imML%C0za?SOV zI2DlJG=Hi6^Z79(@!UZB>_g^Xdi9v}dHLz{$?zC%0m{qE7UmZ$M+=s1F88X!3tTAd z8q^0c_ZKY7ny7H~Cn3yO1tr^zgcUwIftC+>3TM?wbQucAsLbeg(pwYzpik8rATxyDct<3Z2R*JGcT)+XBD3C^;iWsA7$^i zocJppfX~PH`3>6^Rku`#|BB5{aygRK{|Q?jTdtQ?3*(cVKQ?``{@8f3{@8f3{@8f3 z{@A#a|9qySZ5P`ox0{4=^uixWLH~sm_--)v;={dNa*Y+Es;vU;hYD9pt)e9DeHP+l zp7|70zV`bg5JqDId_#gpKIj5YD0njhmz~$zr^P&ir&$G)m8&LOW{uW z&c-txjhb@}8!^?d0J~S=PCZrq6R7#AeL<3){?}<+`aLFgy7CE`?^sA@4@NzuUk&npY^LCB9`P{E@Hy_DwcRcSP zGdSYx-^KOo8@Jqi&7b&KA;z`Yz|D9{Kj@}Ekb?d^WRX&*cUu)o#^*t}W25$1%uW{y^iAM~2lfTfo<01m&}Z0q5KIJG^_<|Azk zM;o~4Iq@+DF6|ZZd;{;)_r#rE0PUfHo9)9d4czSI-!*V^=q&nA{$}rAgl9V9oLmxD zZQ$l8y3xQRLX7L(23}y`dknnLz@`16TvJc1mWG!4HrM|6VqSrrz~g)Bo3@9Bzt^S> zDM-0XIJTG9M*$@6#$a$v-lIP5+0@e3+;ru-%dpjc!&+=AU*EQ{wY5#{c+V~7J>}{! zRcqR>Nu-(Gy5=fubicS^P5r9G?dTo*5^OnfO~cyR4cxW8wL@)ZZ;GjCYin;^+th-M z>p@vxcTGbgX?>f`pn6R+HnI1LUQMe(v22;zzG7K@)-`$Td*9k|B@4{hg8mq0 znel9E=v3QOct*hX(FU0kVqQm8b8AP#3d^;#g(n9niM^HlUvb|HiI~^c7i*`fecsg$ z?`kXeQfK>i?=9Q0!@AlT!``vo*_xf(v11Q*W$@{2!TuN9c3suR@1kGPO`cIZF;>)- zxY*^Xt8<)|?HMum8&@n&k$5BH4?)?V9xJ??-u*m)z;2AZyL4kIZ7kauCPn%Y!PAj` zFZr{{1TLojI)B`L382#?h z>F?EqOh4Z`-06Q6n3w$hNEe;Fx7bg~vR;CRmwc?lR!-)xC?E6lN%G$Z<|Y4)bQRn( z=K+YgW&O?rBVD!b{Hpl?NBNxXaHqd4MfqoILK#Pp2c26!&mwnYr0dc0Mb9YT%l2~v zaIf^|Yx(75W;nO3FT&4_k-XPKzL)K16trIQ7i;;m$;@zWSw--3VE~Or zW*Z;-Fi*VXt4U1w$#@dC%DH8cpBp3LyB_lS&hM80QwaBx->(Uq$;@zWS+5|l8zXr{ z53;ItSf-!jL$~~;z`W%1V-}svSJ+RxN~LBBovrD3ra$nr11Pr~Pu2yPenyF@6wNWV-i)%^h3Ou)|_ zzP_=kt!2&XRkCrwSLQQ~j;u%6d2Aitn~TpMPs_VBBCoYzTw+ zj@P^Kw87pgTmz>K-m~#bkK79zZic6Q#yuO)dj!$m7V~v2;XXFJM}GF8Jd_OD79?Y% zVb?LLnD{5xEk^n-LOK`q9a(l^AJVOC91CDeO#8xg*ydKyju`fR1=!Dn_SCdB`Nhb2 zv4?i-INx=>fEa&Fw*^}A3E;cEAGUrGe7CN~H*o9eLf9aWSA2Sk3PU&GyZn_!uwMpE zCF}-=Lngx)1byK^PGRVU;N;M-%*mnQ;6q#Q`w;dX(BF&e^ROS}J!x;qPD31r$K$AY zz)sQve`P<6xIm%97I;`iuq}t3IBmq4o^a5*x(?s|3xcq*%&CYnEYm&=GOyBc+o+flcG4Y!lqEoZ8H-8OwnNtd^tq(xni;(qQ@c#|&bBYT?`(_Ud=Vnd}{R(#6ql#fW zIeU2c*Lx?08^+{>UnrUox-WZJc$F`6bM+@jpYY|34_%M61~9e3@A{Noi?ZMzH!7`& z+bU%XXUC1UBN8{#n{i{jCf>Xuy6IFqZj^CDcOZO!`2^U0PEtBj58bFoo<7IDeh}Xv zzB>nyceF*2I8X-jl)8|%Cj#5_0P@NTOMK2S;zRobGd>J^yf}RgvNj=ao-Z07`oY~3 z!`o55_Xg9#_dre&;)8Z9Pi$n!U*b}qkG*@KbF`gjTm+}yvTTWSy@B{OKu5m{eJX&Q zO5{7!nT9kmt+c~z*4E-}Pq!fhL(T}TV#dk=n0^GaL?V9Ss3d|nsgzXi{ANFUP`#dTo3wUueO9`R?I z=70~=axXA^I>PWdF9H%EwE9U1-qRL z-;HB8!%mO(VN+mNvt?!R;QTGI!Obh11{YY?&`m3+3|^1)R9Ugzn?}TTlP7IhXcI`g zGTL7=pV_vetvT7WXQK@p^Y-w_v2pwH{`@w{~PB-)D>% zJm=C8*7T}#3q!T%7K9q0bLn}Ovfmclu!mtw&o<_P;MCBe4YiNm4BL;*Nb7e_wzh8h zQthojguXtA-)CV1{v!05woEUM3xxMXCWbHvTXQDzqz%8VE87NdS=l-`%a=7kyOu4e z`&(C@39Mvr0C}5IAySV zL~wIpQ|#$9tbKVFc0kLqo{D)^hdir9o^fBWVbH-wH-^lU%;-UJrI{!LzVCyG^p-+r_`wV#SlU1>Tu>2YbKp}oDe zeP+ap1J~BIuLdEYjJcRpZCDYhZ(Y4Y&E?LFOzg**BCRZ;M@x5uZ&D8B9?&e$;e=+>%BI>V=$$NT{fi>#;D-3MCzMpDf zJ^KEzf!(j~#gB5I(iqx%<%qqk@Ad1xir;>X#q^bQoM)nY*uJQ^V|=dM6};BC?6}ga zbEX2Gs%g|(Y`2Y+%Z`k46fa!!@S`Kvrg@myCJ#)$DVucYx0N%oJsQily_5|3UTMQ92t-zmua8fbgZP&j8{ z5?x5)@!A*nJgm~CCvxMcW&J|odVMQ_&YCB>Hx-_d2;%8^g=19ea*ruoPbe9F_b8mRvWc!o;hZf^bQ=_o z5x&c9Lw)h9*%8}A+J%P{?&yQm(a$K{$!EdGE8NjH*?(fG!kv5;`fC;Lq=${sAjulEv=>9`&7`0Yk6i#0pQY z?>2pMeYf%C`flTn9`adSAa2zyhGHP7advCl0a%r$mO>(K%6ZVKFKAEZTF0^Ey#9^~d)PJT+gdlme==>H8}RIbqu z3;hEr_@AZt7sit%^lMc7o%Uyorr@`NTxXORAM4CkxYMsatm#LgeK5~DQR7PZeP8i+ z+A(Q2us$C2PQMw`e14($tIk9r5siNySJUS6u*OF!dZ&H9LgVb&z4GlFD&HLak$l*m zg8nf@@ASVy|Em=AJRdvPion-)LjMHf=@p;Fs$871Q#y!j1L{Z4Sm+WReu-i`*Ih)LgTbCYclAi9uRLfaCwg*zS6*- z*7p+s>H2w(zDoQBe_7*hxvy$m_$<)RuetaLejo)O4J%tavz5-)9<;SHakE^ALyeW2 zs;@#XxQ65WMStA<1s7dly2xMXM6U1`e61EB^b&r(D?WmEy6E%tv+xoAf@|-1{3RZe zKA{)fO)vT?{z5PKc{%{gca;RjHHK$8;->AQ$YpxVZ4&iY@{jss;*xIKd|qMD|2ceW z|3ZBJJ_R4i6MCEJGI29q7yX6!T=*B_vmgbZn1P$=GI29q%ME(7yebXca7ST4G&rlL!;7!Ku8J^0__Z>=S*t zyRro<{kh6cT$!Dhs=w+_nKD5yRe#l=GIbndsrsw_lqt*fxPAKCX=Un|##C17WwwF3 zW2;`KY}HG(#d<8Y4T9iDwL(<$Sxd=kO^4E~<-b-0M4a{jnw?FB$mx9xlFal#9qKY)&;?)>Z0 z;foy6>Q2H5{0`{c82uur+7vPtWBP~V=T1LuN4@0tYWY{#Y~p|2veHt>U+f{Dvr%sO zlT*k~)8h(rtjb8Zv z0P~VBHqSj|W;nO3ufflak$k_0{E@)j@>_v<$$wZk3XGrW+_E@#K|uQ z-SVFR<|V&eGnMxon_IH1N8#ZmKjtBybAfL8M-bRcevM`t6T$lGmh}+;H%8Jn5BZ$c zb<5|OyETA*#4b{pF92!q=^6Y6O=z6!oA{OeS+cV zAiP)n^BGw>)UXS=s^@#tH6!Cxm z1m*Xnh<`8>!r+dlf16XpKSzHOH_M;%b?)-NI)(gkCn&!;h5V%+@;U#PBtJ#|m1z0L z>;Ku$vHdmY5bb4{hV0W&S!luDSzm-xJW2uZZ!sr3ZJ!~d)SUvd)VgvcI0VC-g(?=8F&ci zuil6ASHsTvtF)s%m|#bofptZ}B>VM+u!oOwU4vRTVC{fZE&)|*s8*ky6>XlD9bGx; zq-bNiwY%{GYiPrRw9)7J131SrjB_mStAu=;4yn{j0Pkb6A^un*=s0IZe5x`)Jg ze+Th?81deLc=saSy@>ZSD&9Qb+uo!1gQU3Iw%0+}bfXznXKHf~%l$aFgK2Q%b+BBu z(iTMN_sMn7VEvgoN4|$~L-W8_sI83S1Nbe^>00tO%IyGtj6Z(|$M0@=4`;uBa-ARN zgmW)ioL>Rkdy&n3=qaCj(O1CEy*4v8#BjAE>}ykDR+M|{-2o`c>dj_dC&^ znfvai(ye>PCd)j8eaH{qXSIAVl5H^Bp6ddApFD5t_nIXYebnpPVGE+mM=XrqKW29H z!RKZl`F7=;BRnI>!n(qO@`<56JzXRB=UhLscCPiw^|`a7UjfZmK~sVCO3OiWPtWxu zpUt^pWZiu0lN-jwKDiIS745Ozg|8KksC?}{{I-v%`eos?`Zr3x+=R7>Ri{n~6&2vT zig8my4Lvt3Ti$c;vWA;RMXP$cmOY5`b-o>n?e4+#zQx;@b>Y6U=lW&$F1}}39oC+v zW4&bzYl7;qCMbsWqZOyJ-zf@N-4j9^Zm@RM-D&M+yV-a_Y$%5FifX@V?PmYQ^C>Lf ztk+3fche=&`rM17wGUdmAAp<(Lvy1A;7Pvq_&s=sFZ{sWR+#bFxTPR`|J>N_<&{gK z4~`iYeH-g5@0)Aw-iUCU#>|a=6*OOie@-UW%kGJU>vDYITC4$k4rl*d?;jSu0kpF2 z?1Pc)KVvP2^x8A(QAVVq&!2s9G%asQ)JnS~nsf2oXz9GU(X-~nb`Kl3IGQuFG;}iV zmsA#n+JEd1w^athOR)cS$#d!9()nrOyy}{0Dfa!&nd=L`sLl|X9NL34{IIAbG_0sB zG`!2&J?wsK_oUIW-IFW8`*f_^g?|_J+OEWPd3Qnh`MVKzj}wdeABkzyt)YeG)+vdEE z*>x>#4J$6;r^2g>uslb5OtJoYpUB!wnb=pz`P3R|>WJV7%t&2ig^E_BL&Xc034i7~ zAZAF8&K2Jmmsq~_A>V1)I2sC=j8SC{f$x9((cQs6&RUrC>R|f3%=G!$=?g}rFU(25 zFgJZs9(i0rIyjM0g8Mdw=yf=W`!Zv9;PiPT(&y)-FUU<_n3sOxnDj;Y412#0BXQ#O zDUB`WRrV0ZZ3Ms9@T2SEpZNa6`iyNr3_nOeIIr+|7(CH+@lT5Iv;kD!{A0-HJ6nzR zTdxS>>xz(1wrsJtaLZ;`4xH#xg?;oGa$i19Sh1_{k{i@7BApZ--)Gw1OL_vJBJHni zKN8o5#mg-RbYer1Mm})F#C~G0LTpTICy*t_bPqzV*IJ;lO2Cw)u$&W0v`Vx|2GvWh zXs{FPHwrhcd~CnDijVSih;cVb;TT!F9NK(1bEiL>Afj+;T%sGPa6M6Lc>PIVG{nL!Y3r*-&gpgB>Yi@bM`FJjaKm=o(SS;roxMo@HB-d zmp0xv;F4e1-%_}=J`THoSNI4A(04B@oZ6P?o>jQ}3#DZ}sc`oUlV!b)I^;KYwpGyv zOYW26H*E1mmq$ZC{p#zYEmvaj6GiXjgQWaBAoCekYY{t`^$f1&8XmE+qW7m?OOsqK zHXn%vpBxwP$bb3<;uf|Jt&Jz=zl}@k-So-%Z__8|zl|r?BO6byM>d{Zk8C`-9@%(u zJ+ko#FG=pxuZ>BrM`Ri>^v4tuNZ6s+@d+4u;-KV1>*qu_0gqm}&vx4j=fZ9;oOXv^ zcqQm_4Ly;Pm{0fLt$JYC3JZIrk`zdO}AVanm+b zS}NLzn|O^)u58UYk11}cz9FCS0^)jwz9%0OU#M}Grx_n9A9s92t~)*}3_fOj8a3{Y zPjia+NW1QqEBWS@`)TRTd^T-uC7&smxb&=3jrbGas-H{rmGLq8On2eJr`&}LpK6UW z|D`Ml$vtriOFW-{;N1B$&W0^_{z!btXQrm%Qm5Rw*)N#w zp1a+UdhKpEq+UzAA@yBXXRB7<2rhiw?S}B_)bxy}**=)mf71s$ ze^QM%CfMGp|26ghf9m+*Z~E{*TOaZaeKy}O@-@zO*up^#EZ$ZN zF73R#f01@x`WNXJgpc$uf(sva{~~;vjd+^)xTl>JU(%QGiEMQfe9XmJCX3`FQ%qkR&~Zs;)0J1Q#)`PqJU(kut-`@53AAnP z4VQE_wCUhn2gS%>;gIEC0GKk8h{lqJj?RS*tFP*8JZ3ynkvX5}62BOxX2t_-@C}a( z5mUws2^X4%wQaIcv7)}S=^C8tqSp!5wY4>`o7d8|rny6)s~S2J0Yy`VRhtbf;vTBR z;%ge~+Y(nLu4uTjZcTHi{oNC*MeDIFvaY$g6$=nk6}5fTN=k2*wfb7AxY=tNQ?X)+ zyJ-LWKDSQ8C*ICFEI8~~*P^beVu=)0tgdftZLdt7DM-n2Y2th;PJmB^Is?X8+Gi~4 zGnVri3;ARTAJ30TT(t)vVbvZf;*0XI0#Gd_Jmzvd5dDQ0;-SUM32gJn6T8luaT1FWY{mQ~Gbg z=K=GQFJp&0Y&P+~ZdtS8;OIXMU6`scX#~R-+Rg5P7qG=*?vlv#l3#KrOa4<@{$d6;oLklwgm+^kFX6%|xOeS~l22W9%Wp{`U%u;i>F{!K%W6y^KQhJ+ z5z*;j`uSDFEq`7L`Q3W_alG`;P9Z;biY?zve~yQIp404=|8HpdT{fHeUw8T=Ddd-E z#WB;*uRree^S!`J{!;LzJ6`&85ZE0j74B3OJfZwqCEW6V3(QM?ua>{wW)uJGmUR$5 zZj8jTme5Q;Rl+U*W?)|OCupX}OMf@Qd&!rzSZ4XNNZj(TN+G{fGd*7Vm#2`wcpN<7 z%=Gi?oLl}^k$A84zk7n|zaD|T(%+`n5}4^{l-%-{r;s1hrYgrv{})oouhpM4&GZv; z%g3Jip6P#D%RgTEe-Yum(%%(^FgP>)5j?x)Uy?$8wjL04l8NEmvKFO~-xje0ndvVC zERw>*gW+{^C1lpSI$$J@*f(x|KLqUNNy^>=o4(e*sQ#1l z1QK5I73Z)h`R2PegXCn`0a-q#V_fOv$~gw!vwTeVf)0Oy3F2PD$@M=B%p~Az!< zYezTw_6=bT%-}LV&NvF-tRt^AL8Epc$hO*(tQp<+#&-4ltm$2oVnc7jhMRbBoR!;~ zWz7&w*7tn)xvIXwWtDwHSRVs9oF2@B?RY%gnz^x|4}8|nuCmzBy_LjA?+9Y;PjEEW z*T62k>ueW(vW-76Gd8paXV$El9~*ii-P(EXd0$^Ln00#D(7;pe+sDL)!q%vPF0Kti z+<0!$Jvck($oc=Q$ew(fX~XUB{h zsP^4>=V+XBHTsW;_oCPk*1zuDj`c+DxL%KVcOiXpPE0Ro`tG&1?zkb5&kUqLRX!`* z?-c8h-Wp|hS*=eDryi+s1; z84ri`Wql~i9hHgYd7COvI~^YkuNpj789wK+_R6xlHt=_NWPbeYoR6;xp#G&HU(%63 z!%)7%vCf2R{VdcotEUO;B{FfY%QdKzTyqjBC=TtxIWe`lvE4zOCsd2P&%$~HbmMuo zUyVgA+(#@Qmc$f=&cOX%e{5G6XUm*{{QLlQr4j2#w&VPzy~AQddF$2;N;%g0&^CZ4 zpRoIHhUVqoFCx%&DpYaC=UcwnVc;Co#^NWC= z@Mb)Z$0rMCJ*`FkJS7m@b#xfc!pX8~m{yps)(j!uL97uQyKdd!r9Z9g6TUp3Y&+sc zeP(>A>y7xVAkT7j=xp6~=$l+dkZ<#yUre`#{$;*3v>D;3mqnn@()5j>Zvy>F(2L(#(4RZp+IrM~ z>cE`{cm2@O8Vnutn63=y>luBOeNz!8iZH9^#fGMxZVlm`Y3ILz*Q>x^0e%!`7>)3M z{mvhOSJOOeXc6c(;LNMdzMJn{4cVlB3G^?6{$D{aeodhNXqdGxSb#Hq5bpLPN1sr7 z6trrtMLX87bp-qI*9;=B`=J}bb!!JlUtE!p*L6l-n|W*Fc3$>FH}a9raKP3L(LbEM zr1bAc;5{9Bmlv>hegs`RIAZ=FY~r6_nM&JJ3!U%Bv+ujH-RM$71Bh4f(%4Wp+Nj!M zr;Wll4%PlixNVokhPHtQU3p#tKO+ovSLy8^kJhlxFn&sxpDP+T`emyx3-~A3eHL|b zF6!hQ)Xmv_A753~=bSxMt=1{J+b?HruH7C(FQ-eJCv8Os&)Gs7U5z+yz`0|cORS+T zZ_RDX+p>(V1f(Oy<~hX09#U!L5) zG5k-D9zEsLj5oS6(QbH+7tVH#3!s;3ynz1wUUMAbF|67`utCOaFci#$rz@UUpu;j&=rTq3L>V^W*rU7d#qK z4>C}{Id*A69T;_~HFPr4#k1hZKY~66>FmJ}KWWYQy+vJ1@SQZTFNA;a82**;caQ7rokQ_Kre2WzNq5Dc~yVS#eHf6$Ewzrw$|0yr4`Hj=B>v5o~!Gc<$SP; z&d!FGHg$p+P7kZoU;83;Soya)x?tGF5o}e;)6F`X8yecCSp|A0*?Aoc zTkBUftSIW>wzpF(Y;~DB7*0szvPy`)np@*WTHA5U7?H7N$ZxwvQ>H~0Q(R+1M}s2h zh+yYdWKN{5wWBlI0U8A_ud83hTv2(TGO9+&UUMRgu-%ITGoF zR76;dWd=LUtgG5v*R)aj7G1hYUu6 zWjKWox{i*ft5!Fxn06ffUD0q%4gND1uA+@l&Rny~S9_U@Q2Qr3>r=M{Z_E5f_U$9? z$oXcT6#-ogKe|`>C%(Q@pK}L@^Q$Z92lqbzB+z6lyP8eJ;kXA@eEsLGnun5=duLvH z^_cW|`RVh=rY{(mzA!?*PcsnQFZsvCmuXNqu4)g;6lq}kx%VU;+C$|c_?xe>r+H1_ zjr1!j?>`|-+<2|A98?oJ`U8{^^gk7@Kg<|7-Xr1kgqMN$DV)uIqWhD=nSqJ!fWq~} zvElU}3fB`!2L5jf&omJGcDKTlQ~s2~@rLShk1JfX%klh4pC;1^wI<^q)(C{{wJyt=Fr}7`P0S zqj_GFs@uT-DFvVU6gcagSNw~WT*pW1W~Ra&{ZaK3Jg!K=rz-{CnIb;lPl4Zw^g6Kt zQ|+p8HP`H^_7d2SQ}Fps3j8_6$EkO!Ed=%p{JiA;AO#=5p7ce)>1YF5VBf00F?~;b zoPlE=MLDi{)1R%>^IDCQ-o&N8y7`M<5TB&O@*-_6ann|h-)`xMn>K&t2F^A?+(H94 z<5OecB|?mAw}BTJxO`KhT$9fmnw~bVryBIXbm3FA-+mWy1pk~Xy8i?+_dQweIUL5jH)QN8T2Oq{1kYt zf$Pta3X$}YzlrbF^pgKS)z2@xaLKn3@F_6p?>F%A2EO0GO?oq)CjD&4qhtI{db7Tm`mn;F zH_N5jz)e2u4cz3j#lTHIkNUmiv&XwTsT~?$5H!8uQolC2aIx)?_F3wk@DcqHT=;OJg-&qcv)zcN zSx@gbaI>DK*=#KKcN6tJFR9uw$#dq9Y0GYwqr{PX&f_0AX$M4JOra<%@L@Y3c#X!% z->gR~QsCPSyjb7!veUp#eLkRZDVIaKUiG_hNyA|mK1S=kw0n~O!bkKx0y5;V*oo zUJEXKq+Saye59UAK5W+fx4GmBpF3RmPECKe#)ZG|k@_yU@R9m1xbWGj`B2}?_Tec5 zH`@nk&$+fFN0bED+4`P1=7Hm`(ZHRz6^uU(JTFddS$hoJ>|gd9xLJRLI-Znk&K`_2 zaA~^~3w;2VJx{ivX>|jpFXyaoXuryJW|f-xn;oBX;;dStQN1FNX;9^@7PE9>ma1~i zl~*>j(_+89y$->643lNAe5r4%uIp%oq5izp9SvLw=LK#klD(`YdUzQ7UMxoML|6`txj0(V&{OGC;S|y9zV;OL^C>uf6@XN z&31M}b3R_cA$dy*L zHmSa&Q%+67VMgjKBL*r>dEn7s?vNu?q?^zV>8?-LO#AXifqf0QJau)9({|#H7{2Ew zxLCrI^C05^K`L=`tnf1bAoT9==flH|k@gMU=nU!z^Bt8*3DOfz+L9aL?Zl7iR zX@^Rd#s0xd{;RqXTdM<7K4&f6@&l0LB_H4Dm6LIY{gf>0PbuVA>jX->O8J}}b<2NF z%QxF}$_na42|Y17Nvm9+2Idw298DneJ}R&gUY@__fzeOSNixfivq=&kDZkr*dC7lG zPX+&y%nT>-7N`d|Zj64_`lUkTF#odgbIUIP<|Y48P1s9M!?|U#A9iCT7u$9jH&8xj zjotDmfWMdgrF!a3=*g4LEh~(`Zj5w;dVpZ2pW_7KCwN*4`L$a9(~O+q+_H|s&yA5> z&S?-mWcsP2Zutkb{+2P2;l{DB;BHINeo3^x0~+3!kl1kF9ce#YU|_tJaB@8xH*#;1 z{!WKCF*Cg2-__xDb0e_zt`1-BVlL?y!iVASm4EpKHpL!I$oylIB;lp}Zh>I8Yz8UP zgTF^Lb4G*XM|b!$OQ)B@PAKkvQM#pw})McHT}OR_v{mwdqZ}z zEreD6Uz9uZ#N}3w@R0j%>|BGzl-!_G_=S_4C3O8qCZ2!+I z+?>s}@m&gczhPO{e=1xL)C>{!x=uX+HgN8{>h$1_2iF&S*=Ag?a6OQ7$gOJ>o@F5R z?J9+zl!VtR+_8Bu2~yiUB$qqG1(M!0ZEgW$pXEgUQZr1Hd@>RN{gm29B00Sb60nlf zYvZZXo2<7seX`!#c(UHwc(UHwxH+pv#CCy%Sv5f!|75+TZy@2Tu1TM)w>EvU-r9Jw ze%g3)yHNlSuiW7~ju%c1Pq0-WW4Lvo&oxHH(!R}s9-904ie?lm+|dWY*ML{9@ikNM zKPucQcfrq9a-H;w+<#H@P6~wnaYgUcFTuIrg1Jwz;57<&%2)7xijPy@1`5a zvsHYY_C)ndz?LZ7(JR4!sc=W1+we^HkND*pv&4emrsCt&7r_rJ+-VObK4mIhPP;1j zZx!z7mEg<3$H`3<74@en1uiWKzqwR9-6(tedQd!$*0DJ3!kMfT=+C z-fY!H4~d(j!7d#i;-)Qx=mqhJrs1Vm-xDt|@Vy3JXy9zG=tw`_zEyvZ=zHQ)7YOCx znU1*mt-Qp*C)p(G?`#8~Y~U*lyvV@U8o2pwZi|8QMOWN*12=7!^11k zZ}-16@M*%FSM?!lnz?7&Z0vT{-kSJ{E55l~GI{bQZq7R{zKK<}HaElk93N(2>hB>9 z-+Ejm&et%Wq#P{Ookwo2+?CM#7Kbt3H`|Bp7TLV|BzOtEGRdvg1C-ynJaw}Zr)M8R%o%aoUNQTU^f%3gFzm6y zyXoD}9SH0dezumA?ULsXkM+IA+k`{hr~^vB%RY!f-*STCC!`23{q^zWKawK;cb}kq+U$G9|9&05O%krJ?)m@!yB=Uh!|!ub^i9`IaW} zk@)XSAz#KHLJuJ|TOI{n9s|1Ajb=1D=d`jyg*KbsVZkHo(fn3sI94G?T-)LmUe4n?p8Q`Uuvhq{Cn$ediuR-S1jF~Ih=1b=hCeGs{5h{pr<(!$0e{_P z{ck${WpN7oM)prW?82E>baLf80`Emn=tswW73q%mjhXF?@UlbLe;?H0O^o+$+DmnK zo!mIN?ElyA3gFg<#qf9M37K?h{U6lf3xP%OlklSd`ytpZ8)RxhIj?W%fdSbtkKEzw z+ZMMruTxf4)9RFeV4uZnV;>&en#`wf9cjK=UZF(jktH?xWS@#*57gv`y|Q!Ix~F1 zm!9!kTbE()lq~Ec)0GyB-jH1p-IP}uU6yTK-5>B5H)2l;uDwUz<;_pCax;9HFJX=3 z&S7b3i$05A4}PWiwd40VeglDw9fz?8%R7OQ5$6h7DbZg(MIac^ZoLT&C%pd-BejwcT%~{b^@aqQ;?kTe$@#P*5Z{f$ippZw~ zurE|G_blMPAa8STnA3X~5oiANZM{{;M`V98e>B7D<4`Cmc?n?jG;V9eQFNQC%z7)Il&A>P| zE8Do|igi-PAljmyF6;^M(3fMk9vU7hJBYZid}saRt8%TahhfhE8?rnLdy&kqu(obV z=e{`Dx5k&9^+<+w@jsvRqp|Nik#SnfE78q$H*SdDcXBK`0%bhQmp$<8jTb}<%EyN) zarX6ioQr%CcvNNk!}U1Zy1pn98h`5e&?COg&C7#@p@Q!5p?kkFEBfq_qcz<(@hs}R z9p=6)2glED891Y=SWnh*0P>)y!??G4J5BQb7 zG~zoyzUOV_z97(};(qM4R_ot${@akbKhSl)>uX-|+t3Huo8klP14KFf!>c$&ly_9=CF=M_dgKYI8~kv*sHy~&ha z)iUrPWmE)=kup9?0CvI{E;9 z_ePR!P9#hcU$jdV{=svC;EjXASG|MhjB4!1tolB9SreciS_j>I*UytfLI`MLK;Vjp!W`Y7(NGe!4NEVtf`r^oxK>FArj zg}!N)?we}SH!Vlsv;uw8EY&yp68fg%6YiVx&^P%%b>FlA?ben*t8en5&1d_}e#q{d z-qd{)G3uq-Z)oEeRG;)L^8A^N?2nT6nA>)E$WrsA|{ZLzgGs%`ApHobpQRo@5LFYe%d6=)-3Er*BCQSEgqKV=h^s-8|v zt~aXQ>$0*??@?B^U7=U|({1fOk@lw&`x?3Hd*+s|T^Qr`P-m85e?XjHP?H6Dh1?4Y zzv?f=ZfPpTet7S!|EUjoRK@lbee;C8SoF#td^tKfRvB%7cG=S$qy2DPTKL6Sdbng^ zMRa!NgwUMKiJ^Azm>kLpPZ~QaJo%d!L}%ybgy)PI6`pY0tf;kia;UO#a;RYKq)>h1 zq|g+MBZ{ymBX!1yaO3fdpxlalCctyy&<_odt>zUI-AAWvxcyD1O zbm-r|HMV1BN$9efrJ-9g&kA+o_t^X~;n$Xo2`?EtJ+$PDlS4HtCxvdQ92LHG?wIh5 z^0PvDjX_N#bbU_fu|+E|Ufvkmxo8UVb`|obEcD$) zqcEnPhds!yj1`3N?fL2}$4v^M{PI|SnfOgYnyT<)nj{^Qk!P%n7V1(-{-h9TeVLJv zl{q;y*%$ld#qz??#5{l4pW_ct4EmzW_Y{U=k*h)x%Nm-LW9@E1oC>=9DxZsDKDFPa z(og6M#_Bcc$ZPgZ$jcpBi0ikDCWNLUFVi9Os}-^6t@AcS_hApp&df=nljr)vHA`~B zGiFW>?VLG1)Q!Ab1)cjD>iFo(0^!n`GeTR(mWGOeKZO0nB83w}SRY*T1oD4+W?|^; z%<-X}ORVsF@2sC~h~}bfYw#;A zpAlMv-zAx4p>N=KJM^V|(aGV*KYw!gdw)MVyl#0;_?nsJq4$c<4SiHz9=bO3oY24j z{g`k+(w>R7hPrtezX9aylj9y(bS>(^Qq;eRkn?(FLFgms%Jd-(|wnn9A1NbeGU2gv&($pvolLWmwi4r z{5ts;PYOMme|G36i2pv|OMj9UKIiqc@O=NI&{X`cfsPKK|1QnP7@@FK=`X$$4wYZw zix!vor<{#EW!s?Y_D4sbU|sck|3>?k96=1$9TWD z)O)^cy~X{!nz8>BV>QhxiJW(Sq$x6K68@YQsc&7gx)YmCt!P*q;f7nSS4P_FR$m3W zKiA+Dxss!ECY8;r%o#;MH&xR%V*qL`%|1QnpZx!rCi^|5SLe`wv8GXTrnN~lBhu&P zq|eVyUyzr+Fh2s?E=|9dR}Y>M!1vP+u15Vy;F(^H2y*^qFa6+@e6c;nGyM+G1FoEZ z48I7UnHIQi{&D2Po;H16X8Qc>BEYoEqU+)xXFsYqP5Ocn=?jsOl*KtDIu(xCDkBOCQOl$!-AG}aw=jkh;ln(PlmY1#VYBkqqS|Qjh zGShg)jDpLJRJdt9U=#dF@!{)UqI*i=s5&n9ZH1S(P|Ny^;;%dt{7zFiMiVYKL*b6? zns|>^xa7E?$ODC&Rw=fhZF9`hPjsnlj{iYLF_K7(r%ehkOv2YGd_od_nZh}fo9NC| z@tl$f;^_rNA56k+TV(WTE@!V(l2*m>yh-sH;Q;z>gTkqCiLO)Oxrrd2u249&G0{~3 z_Z!wQqRWdx=C>koVksfU&>ugU9^2dLIzx@}8!OL6*GEI2eU_t#Y&XQEw*5`kABOq# zHonREZ1YLZXB$t>XB$t>XB$t>XB$t>XB$t}e;b$F<&)zA307Gqo~-}$4J24une-9o z!MF<~?8M=C1Ppy}Q1VZ1f9M}D^dXTxxn9`xjy@#PC$~#qfc|*pKIVcv@w-#de+7cP z_=Ho?-v$1;YQ?1;L)Hhn-=eKN)t#4ja^o~AsX}kkhulVqroELs` z3cNlAAMQ(N+D41UFIDMs^ib0Erox@}R`8h$cl5JI$G=PAPCb=A{I~EoZLH-R@joft zsgG+lAAZ};HNL>rX#82lzfeCp<0qd=m!tnOuEi%nbM zbK}yj_!&>Mp{y|Qay-)!pJ(5yzl{cdj)9-2?@1ps@D&DLW#E!eq@QWv>-9Ztj%OHn zm%gWMv5DWUaq_vypnuiC&Gi0KeXIUXFz`hNzRv;8;w5wrc5 zb)Re}KV$HDTJsS-7q2}oT=Y}kk%eCB%U(?{dMkWhcHzS3RTnON_G_H!trRA>9x!lI z&vP^l(`Dwr55$Rg1@hEp_g(Ubm2mO#KlMGEv+Y#E}@TTocw7(A#SS1LoVDc zSMtj(S8&NE*s3I~4U>2gKU0L_D&dHqW#AEgPkg$8OSy0@htSZwMAHy2(D%I582ESt z-(=vT^Mra0e4@VRwpiBYL+U8|csfP zCBe5!P4znqlFao!ak}J1Ns>h6qxWS?riwE_q?gpKXjj5^c4`znR#3 z=vCC$uW4D+T-VufAx_Dd+uquua$e-9ZQzh3>qtV9J+f6W%jXoNn+?W6$b-;!OeZro!skkBM(z7pJc z0K|qRpowEs)62!q>P0(xtne~^5FYOE_aVF+BW;PEijsbneLT}C{j%U+OcDQuWCGXB z$QjNpYYqI}7|E-({AwMR@;Te(mVYNAMG?--pB>;SEm!(^8+Bxf%zk)~)SdsY>G0e1 z)g4}*-^Pvb5{%a#9sf5p$oMnv?)cvU%uBx5rmxlE<>HogD?Hp7X&d#6foM48bN0_I z|0Q5v^7m_{mT?crlyl2^5vUs@;T<0Gsf%v;w?Vj<{OOwMVlp$FTUHMOyD^gQ)$&D8 znSOpF5NnJMH~>xKAT@Ta4E>Y_XSzepkfel7oa>3=$k*{lQ03g|Pjxo=Q(>FFT8Cr$StM@x!&1nftqJ>&BcJbe?l>ut z5%t%4REMX0W{F$=d|)JT*Z-;dQ;D=6AW_aOYYtF1M#4u66nXr;l=36^x#fQ!!oB3r z*7A>6{!b#Xm;Aj2wtTbv3q9n2CPn?Hh@WyVGB% z<>zWTxzuLacS0|?Jj<2k=9PbqI{XTH8qOVmdb=@_SC6*??XfQ^{(LVNxuO@uyyU;E z2VU|%tJx&UVm5in4>GghO6-f0&-Z+{{3?v!C?DCF;DUN>SWyD%gctY%g!htPuI1Ni zLh3K)4czi02u%6(H(iOA{{s`mJ!$FW%JCuZC7sF>e?HLRFAzXqC7fJW>-4+Gtg~|5 zi2W?##CM|(k4u6p*Wqhj9+G|`{xbZ%^6w6ve==Xf{9zg;yy(v~6r4+hVtt3M5O)l> zB{ANdS9gck8?3H>13~Btm!MYxBB|!ilNq#PID)ug%MnwRxu>G1ma$Oz2|7 zS*_LLnj@|QL(pwlcUH`6H`YR64Mg$&Kv3beSa0=a;PkRv3$0!BXV|VW)=&Y~knD$j zXZIv)H}S5q7S8hxD<0pvA%HWw?R$*l%DN_5L)}X(oOR6gQuaCmt|_AZWjG&e{!W5T z>vZetD6h4!`{s2I)&}s}?Ynw2uff385Am8m?CO`)bN1B(yhie`&KkjM$<=4z8uV>k z61IY?cwcRO)w%a?iQn(F?ug&_`g)cWS=-wg=0cn`+-r3$Y1GgEinGXz0$oe?ia(#> z-|e&M{}uM!qz?vkcsw`y@H|ZWV=ZGZpR=_;pGlvu{kg8ekLMEYk7wmytNme%jI+y^ z1ovovJS+OHdsKY?6}HHV-n!3@Kc0(F?m_E8+n?uAQ=av(?T_cg`VrQ^x!0z0-6__=LC3N74*B&S)~2v7;LL56 zW~m?c8ktc$xK5Axz%?1Xa?Pe!9r>wINA?(XWUsCxdyG2rzl}Pw2leCMRs9%)`cZ}T z9F;idy`t|UtiO}BpQ+Nq^-7Hi>uh|*TxY}dJWG8k#5x<;#`C=T4`7$wgt(uLv+glI z-1+R^$NFjuV?#y3*sdVfBoqa$UDftyq-~8jKYi~oYv`H~@-J}8j_+Y@E5nlCtaUR6 z<$U_hI0qZ`y0}rNu@N+AQ{wGMmu^2gb>7q>Us9#feP%e*RttV8r=60H&Cv1pk&e-8 zI|ngG@dTRbJklutwbKW;4YRg>>$#!xAk;u-GtdY)R`D-8K4Z5z)U2bO2$+iPWxs`XP?hgpU7 zoLN>MaYx708a=Ertmp%sS{E6wqoC`DuD%KVd`q{-7{330|L|{(mGyS+HEk--5MSyz z@}{RA?X(>}4{I>&Gsqi<#gI;}PedAgvtH+#V~IQ0fqpQ&YLM}NZ)9ljlk4nw3txA9 z(7x~J$6n(Z8C)BPHLA!5tP#05Bg5KtBR&Z*UGELARO>W&|0dGGXY%(dZz*T$E6bTW zH)CDr;0MsxPg{nLzB+nAePwyRWu#fkLdq>wo?`7Z*5|T3xVGCaf2O}0`stPaCe$US zSLp|2I^|)9|Fq>HWyJDf`^NRBgUkGAD*|XUuwAF|J|tn{iqYSqfUGj$lvi4>IB1*@2qua55A6i_PB zNh7SKk!jn%b#|@IHhekMMpK ze!L1FQ{nF!k%{nG2*1IXxr*TqW1R3X@?sU%aLvbW3Vv7zJhZD2>(_992zk+erq%Z` z+V7$t_ACjW`*3^Fmx6a4#2W5?tdl&5wR*kh{=<^~7awo0-VnSC`wRRyBjZ2rEV}2^ zyAFAMqy#Bzr9awudbPzgp-p#SWV)So6Mw_=jU=8)5d@|Clpt zVXaaY1FZA!##*WzUty>Z&xgMKt+8E^l29q052J1Eh2Iac25bQM z_DE@nI`aA%(!99VGRYplzG?P8)CPLzKR}q z$My9W(AU%MI*4+ghCL$AfzE#Hj}6_KZtdiAQ6RQ!Dat>Cx`lcdfnNFW?C9309n>q* zy|NDJgKm8uy7fiq7N$t^2EprNj63qtw)R8Eq#l$T^#Er;o?t!5-;uBD!N;fvcc30H zt{+2hy9%PA;JRs{0hAMUc6&il=#eSKp}PaY%?k#Pa*bWy@5aaan0H<9+cE|D<{P=0 zdG^wWN4fQI9`lgtpk5aRsMiailk=gQ^Pr>E(ACdEujlq196tv-JiFzcv#MHttM-Tp zXg$Xo*R)t)4CgPn`$YCPXmdH<+>zmn?V94ZW^mm4X5eHsR_(_4gY6>wB#eVqU&D5u z?fO0bF`L=Ws$U7P9rh#M0mMHI=}1R< zhJg-k@$>fH293HMX8hO=Tc4s0#vESFr)_t);N9yQ=rh|~>T3T#TYV3qOqSxF?e74} z;}pEh{Sjp-x;m3>F6u$khOE0dE}h~V`{Uw_*YCXifiZWDTeoiT2*xc3(MA@dja}x; z8;D`NJS83N;ZgK;naFFD=Z%@xt~F?D*MPPU<0iJtX8t#NQb_G7OL^gBcS<1uaq&wl8`LGXW{eIWX0yesX9K#r{&MXGGb;PuKwJ1> zJ<^tjQZ+4nJLP^<9Q~ z(2ug(fH8%t3-2Y@g?`lSRlh%4!~9~NV;r8c?d?BV#+5$SA=v^R7#eX$`@7iq+dV5GBdd2<8dx`=|Wf|*ihLwlsNv2Jyw^z71- zvrEg)!2wbiEo()^{HwW&)hlQ&6{&B=`rybl4ecFGt*aw5rj<-PtE8la^N~f%>pGAC zpbHmXcA?=l1(A}e+~chU=J%zkIuYA>bzI$W+{{YLifBe1&I-pl%aO?QCT6m$`Iy-a_&SNX?`ANc{I?04x07qlb2u69UY~vYh&yt=nR{p6U1RQMdSm$I zkq+(vuWjbqV^uB=eR}oS^m*gb=ZDf4MA8=)re8QAeNmB}&$53a^PMh&U$f@BiGW9% z8P^_7^8(X$oVYTN_GtR)xOeh+*fy3g%X7c>$GZv^bRIJ;WS7!y#EXH~+U2Qf3{sdB z?n;H5R-87;r3ybYiT)ggo7S2($s~oF)|xiHQ{jk|%WYG*{=jeeeMjN^N}uSyu5gxo zqWhAks1w{rL)y7>IpqucaQJgxhCpqPKLpbj4?q3$?6`3fCWU z4BuXbLm6GJTj87nPIT8QT-EXfk9LJ;Bw&1~Q#jr%T&_ytqV4$=J_ zKfki_P>lDZ4CU*S9~1(QSBV?%T;_F{ZVZjaORlbSmP`4*`xS4`dJG) zI@Tb+<>-%UtAJr&GvJQ?NJ(&?Sif;DlH~Y3ir&$yO=J$|N7eEhR^h5W0)92f_5AzZG)Lwc`ggepL#&9H)Ba!zn4~IXcH7-G6xvTTIyHu8Zl zu9kctgKdOuz+o9ISrV4OI*??r!3p9>RsoVogd|)O%#j%jNY-q~g0pxKgfM1cGI&E6 zHp3?1u!D`02^lUsfnmR|s{Z||tKYNa;nC|H8|sA_kyI|WqfSB(UNnXxu(});ma+2O9(FgbLu_QrpG;<;L-!=aq!DD znRkQ18BbeIuY-#mSu-T`B1gUjm~R&t+4Qy=ImDM*xV%q@+xa=q(75F*<>HpFT`qR{ zt~PQg-!5M}|LyYaw&?BnY_j5Gmt&8?-SWNJl4F- z9CJ<2mT%|7BNn}#4^LaToey^Y*z#|+=xsT78GJ7C-^RBZe4c~b@mytS=xsOGEJrD8 zLXTPa+2)$w^X8iEhK=W0xID9jN(|0?t~S^7#+z&AvyCSV&iI^buIULq@s$=n!CX`R zLJLorYs$CrN`q6*YKwl2xn{Z+S$M)+lm2`QzsOvZ-Yzd`Gf8jby@sCgTx`ja`pkIR zxRg8P+xbvoc-{C&p1XP_U2gtJ{N4Pq>$#mjc6{vo5&5oOp{L#@R(fwU*VJp{Tdj22 z>3zh)CC-GFfuGLR`?`iz`dhqckFixZVECb3{Doy+(YtrFWa9_hbuy!NTowdB?)-a*0AN9py`2@xI)`?Q%(3 zxLq!F7H*fz77Mq_MfxGsYnRKQMQ@kOUJJL&WxT1MlvBls8+Va~R|^Qg!@})${#FaO z+pDK7+-`4W{D6Axb}4g(q&j_$_P{HfTDUi7z!K*)N%$)0G|8dZ{T0$xot^cYxsth| zgQ~F-H)~mQTA~WE)+DD{mbT$+IA;}dn#%;HiOrH^dm(F@)>*EsY^1we>NlvpO0yRr zr}+*Mw6cj4D(9@bw5g%nQ@gW<uK;uxFR+pjp&P%b1%1!IIkAU55-?7jK+8Q&j!DXk#uW9Gf01h z?_8!+`a6R2J1R*3GR>YI$1%5Ax@LhnNdIFA%^~k=>d(i|)&GxpUj^y^on}w(ziV!@ zbo~$T2k9Ry)f|I{k@`7$?ds1B(Lc{riXy`=o~!G72ndQl=J}O-UKow<^4|{J#Yoyy zrWq0x4#)V9!q1IA_m&LOUt)y5PG-xwx_U$MZ|g+O)Mt39pLNmI-wZ5B{{f>&`gcZ5 zR$3bn;KqrxmF1daPlQ+bg7U94;ty}rxV^=AYG>3_@Um*<4(XI*ghuM5fl z7mWT&QEYry7xzeYF_K0nX@(lZNBzab&Ar5n{neoKOM^7c(2M8lx)RJTM%r4VU-VFa z34X5r7l8%opJp0F`StcK`saq|hh4gIw`ni^-_<`eME`++^mA6o)xRpF{Cmt)-L|x5ec|d~5mNqZ zCTsdW!_V~d+tJm}WCoQ#*6Aqsg7(t?UH#;BF%s`J`ZpO)>W|^)>R$#dNdEytDD$;O zOqMQ=SqJH_J3({U^*;f~)n5Z<>gTg*yXa_r=gO9Q@oA$J6#qiQFW+q|K}n4HyQmhA5WQduC8Z8^fw#*HJVN3Ki?&;{@WoCA~ME?$WnI{|9jpK zwU_=+S~~GRLO+Su@G@KxUp8=Sw3q%b`UUtC7~M26Y`clS-TyoZxbRE99s}jnFXc>L zx@M!_9@8N%@fQDRQ~wxdyT3C0HpXk=6a4pvA6|yrX84PojFI>YG0Qh7{g1I>fs^)+ z&kx7xgkRGCuaNKRCf{Sn@ITsN!@ziR{>|m*H}bj`*oCSUE$m@#uK@}tSFyyXU>>ZGKF*G>MOL&^!iVjG@@=~o!z*n zAp7jJ!-@yil?KP7>agPR)Tr!uRON=}2b!&PevHBT&M5L?)I-$+`;Z@bvr`|c{79U5 zrVH80m=!_ zW(m#|p7K#{WH;94?eOxJCr7c&ah};kbEa7}%DZ7gY3vNFq2BY&NOCIH@Q;3^dY}+- z=bD3cV;1AAz{SZoadz;2ta;?QW0#@s-(2eTfA#oll6{N+b{fy|Vm*HbXT`mNv*L=T zl*eXFnH0O^FTLc51(RbPKRY8?i8IKa!Md*z$3^0ojPZ6}b}rV@{o6;Y$03esxt9-9 z?(wH9xhEKz|2#et?^t|B@{+}o$EQN(zEe^=UcLUQQ(wD&@YFrmKY41w3~xsy(sNqQ zwcZbq7i#@Tg_qjFJmOl3d$6xT0rF*Et~WbzLn`SZZ%Xm=^2Q{&w)7_C$pFH5KJ%11 z#2fWI^_6Rq%%er${&JFe1pEBmH$@6=It%IYaK;^qnvHe?`X0dfyJ$jLc9y;`D}B}9z9!jlq^obDI;$^C zAJ^X5`i4`#_8b$>+9!eSz;AI@AKQXnKJUoCJ-kPpFT)xUK69*NJol0~+Y8ng%wd%9 z{w(;T3%ue{k`N_&jOD9vJ>usRSDcAo&daTefjU!1(+-WSVOG^V_^#rQS6SiYkA#Yrm~^9oli z#!v1qL${OdBlBxNp8utjM&EhjwLEKk)N|!1L)I78h3gBw_;t}p{Jxtb@q43QyaMY@ zqNs~?sDD-Xu}$_0QND#`sy${I@CEZchTfGhIa#&B$zR!&Iac>j- z&Y%wBc# &)nzfd&WHn=f@uEouX(E$6WKyS%m)9@cN-IYi&3BwA?hdziPWgEa^vAL$D~GYUBKumbO8hA)kL?T!=SM+-Dx z1^hJ6saV5~`?@}w z+b->g!ru7_uM~X4-dw9D&n;#*XzISshs|^(QjW zUN<6=WS;h%kM*HR?5}{|t}l$B8dv_ER-F8RI0<4`x8h?`$ z-Tx-mmE-;J@Lu?6`$nA+8NZ*;O+C{0wOjB!;l0XdW<1u3?=Ak$9n`V6!5hGMRo}6v ze&d!4v8FourEzy2Tk_Zc8i^eHcTDF?#oxU{^hJyAxTE=W?9Bi^#z|=2gNzKCYVTn4 zEqLFL@h)c{{+e63mTocD{Vu}#--W10)mUT7JxX-{AiAbU?<<3KxudsN59Ff%mXEeC z5A9YL`fa!3w{cu*=Xda1e|&0ZAAXl3UvI(hlDxu;`R?YsuLo`Kw_f_u*cZ{3|8mO7 zSZjYmYz*3H-DisK{{i|0kJhJJpP1zB;QQcz_I-EluljCVySet!wO7?Xws!vL`LU~k zT{wC{Z2ko!<698+#q~w;t6rKn_Rf`$uDxsJV{0$`$4AFrJ^GZ`U87HpUHF@c)2{~I zo$W>Oi>8*wE*x2S@f}ka#BLuyKX&K%Q(_lhJtwxKH7EJS(PgpuHzi^_PV{!(e)*E* zRjo^s^G{h2yJ}%+Y{AO!uAN`}=-LaWo*KKL82X^&eVivdcWrL`eVjA==&|0;{n!IR zwX=91VZ3~{yod12tS;DAJrId5Px4$`K3DAjOhi7Fk6V(gL_XadiQe?pzg(E?$GO0K z#-d2~+jtlK;`!3}Gw|7;TaPny*H_0&i+We9~F@@kQWW47x&;>ot+W{g>g~ zRuzBt0r6b!$9`IjH~TL+H>Z+$g{htAEr&eFVmd}+|0kYP%(P6tJhk&o{3@3&N!}b8 zebb!XE0Xg;cPGvmeg%6I{O6@tC)fP170IixU%^+awj|G+dUEXK3yS0O|A2Dg`Lq{~ zjL(`nD|YZ-D&z0{YDE0xmx|&uR*Z;$YwG;iUH|J#$vfZua`N_TFMj-c`>sj8gfnaB zAuncJ9Em@?#6y~K{V&JHAKg=_q-|DTVFpS$YF_`JUuo1C%P+j%bNSO3L|Sw*T+HoSY5%lfSqmIT!RZ7Mv36T5wuy9`a{CbX^5qGw{0{X<2p3 z{Mad|bMtY&?n<2D{Kl^N@o%4hRQ%Ro9T|UP-N^XK=Z;98fHFH1@>ZfORzu$Tkkc`` zGB)|C$?rVVMXVcRo9p>QLrq0gx&IO6p%}t4}j;4l|OSq1*I}J4j>HvN9XyesE74Hj*4EygSl5(j zfVIZ@rpD>8A^LdBW6`|&cJ*OvWOpelO(#P!W_VG}iKVP?UNQ_FS>-rqKu4@uUFkKi zyyO_v7K8QD&yj;(b=Yl(2z$hY-KF?s5vSJkf(e_3feG)Tu_@|#-C*3a*UOD&tlgDC zIk9DDTuVp?*P%TX{|bXKoQ}TOGe#Anv06iCV~qir*x=iAHygTgOCI_U%GuZ>0rGYQ zV6Pag(vtUGtO$4G4^#)Zcuw_{&Ska z_L@92L4h8}c7xW`uE2n#zuMeqovZMq516Zj!Z~`K=?*H~M92#Ig~IbJL|?wG@FTPE zzgM_BgXMYuP2pxB-{QJk;UyNLFMAb^(ICfNu5ixYX1WU%ZU&mIpoI!&4a{`Y6n<>vdtBk_Uq%4F72vRgkK_JU;nHIHf!h^+ybqYG+ZE1P$xL^h!qJm<9QsLc z2?s@6sqoS){4|A^W#N+*J~0bFLgCU%_`%;-IKGG+_lCkJIjHA7sc_D=Wx59xZYJie zpl>PsL<`ZETNFMe3vW{R)GYiP3Llw;U#W0uCH-KGmBEej0ds}1dpK!1{NR}i$B2&O zzM$|U98}+iuT{-{zQ~d5DPdW%a>XFS3HiTwE^=6Uv)c!quI%-H9n1AhC3T~(hso%w%~nQY^@<4 zG=Ym0?#q{VGxts?w$|K>%wOP@S?u}cqWT|@^?gO}x3@x%y~{xFx3@z7oT5*dSom?~ z-VeoAISTz-3NKI77n-Y-!u@hl{TqZ8qK{GR`SnfuYd=DmeZIBo=K{Mx;eIzz70}UrOX2==CoSyXD%@{}CB~PkcnX#0^=dKRPgMT+?Xch%Dmi{TAe?W5uUJ_V zX#tf+4r^4g>gj1f^m1>KV$XkmMb7tBx%=&pl-DLD$FI+ejQn3J9EmVa=zpl<>9^a0 zPg1yF&!unJujKgcr~0M<#{PV<=eJi9Pktj5dw#noICHqz^V=&)Z?j6T-!2I~`?1BI z-#*Lt%J&q#-#&Mk^!<~fN1$=Lj6YrB{&TJR#|RqH3nrnJDSojJH|BoJj$p<(8yGVJTl9BX z_(>N2n1xqb_=^@k!@~Dk_)H7WLpgp|7{k&#KIr4@G~uZmxb3@_$wB^ z)WW0Y6-d2jSvdEAp(D;dr?^TBUnU^^>1q{S+T;z3@>Xr^yrjON>HH=f*4fg%*`>hH zbRdOSzpkCD6*J|@K(^-}mYPYBy~fZCNh2m|?O;Q3v(!H@88#%g6kambrq-#lMOG5}_ zSkTfgwKA|C%NjFd2xTkUJ6jomarLI@XRbIesSa(;T)1fR7}SfJI=Y*&6i}_-<35yn z-C*aU_7&|I+HYGQ$ar1{7TICZVy5z{j*bnRm$r6n+|ZR3wz|C=3r>T>6yHLuu54-y zp;)@Ut-VtgNv2mk`fD3A7cV-|IZtET{eUEUJ+fcvRD7$3jPD^S((yesm5J{mi6p*NYRRTL=vR*W#rn`$>Tutg`iNgS z?H8~*=y#_2pFa5)uv$&Zm8Cd^S5}s8nm$XdEX`bB3W{0k5MbvhV8F9fOw|7w>c9S{ z*OaDD_%(}6XQ@S|LoGF(rB3+$WKa9WzAkvLm{*JaR`Ir*Pt||R&wxF=mNFdQnZ*1r zd>x$9Ue^CS2l*x5kB8!y??Yj8`PqLC;+Ouq`|arRZv%4>zx3CJ;y*V;e+7lYN&i>h zW!uF+8KQrY;V&0PZ;w-$Oz9zsc}Rdc*Y33E`KuibL^# zJ%qn^nEE?I`1^**KM@HFO23@5SS|@SzFSww8^r&((LWUbmqN<_)nUeeT?jwUBv5Xs z{QrGO{NFPCm0C>tznlKB^Li6TvHh)1Aud1nY!1r5)rNnl`irv&1Nj>bf5x|7fc~F_ z=-)m}{o_LT2ZyQu?hyXM0-fbUr61?!1g3w2;U6mfZ-(e^HvDX}Z3prUw;+VS+wj+9 zP-mBaC&Giu|8c{=XbAp_koHfekYyZP#JKUF2!0nM?aO7FW0PTI`+ov{rdZSOPuR!? z#=p*Fob+Rim@Hjagv7shjOG{=M&rA2<$1k9`ByVmGwfxclMT zUTZtK6~6_6yms4(g-2>Gd+dsc@QME`T*$TN(EqPB{5HmGm-a^{{qQneui;PO`LLao zpI|=(qnjrTtDUGR>I^^2pW~gvFa4(r5$@_H=dKd|$K1lFnsM@cET~Mo zq1IZSJhyVTCO(Ywdf9O?E~WewEM+3zt2l=#GDgnpjeYR;NS=|Y&t2RL`}}=4V+rx@ zEA_noJvguBw>amC=X>%T9*DWM`9g2!HS4$rh37c(yhYfEkE~Yb>+U_`_z&KNJm(Bx zoMXuIAGKb}q8wjG33MFAGg6iOZIJ(jl0PnePUO2vhd#qMigW4EO!S=?p-pK)`utTF zuczta8oeH7sP%hgW3$)q?L8thZr7$mooI%hO((>>I&WtL zvb=edW06}U8L~aBM-bT_OmTZbR2YR>+0^r_GsNpyH>Tdc5G-`-rn8bSpg$i zgMX^Vzm`gDrsYS5Ccd=Ftxt5cv?VU3r7q?`KDJq|yvxIEa^+piZ{BGp_iE|;=Z@sp zpaDq$T1FhMk^feU-Q)<`LE>Z^J?GoOFgR(e=-;3ah@>xPi{O$vx8g^)h5sC#jQb#Q zxPQQZGbRyzZF;v%5B;|LE*kF zgak}bxa5kU7|T((Y4Cm6({m-}gU-T}ir#dTExb(OrUPT)$0*#q5G=e{;pT;J;aIB- zXEoj?EUIvpNT%bySDs}{Aff+;{G^qE>-cSKpRt#PiD~ zVHEYl&#~e!ID^A&@Urt+(`VN(JUgE??&lBh#f6_E;pdOg z($5X3w-bQ}X{|&42jTxcgr0r6Ao|OJ7khrb$&+w?h2l>9F1_etJQGG2JxQ0~lTDbNt^}}e8r)77adGnP z&UhvOikx|dKyZ;$V{qoP&=Oi^;icx9-p46NJ|p5JKGbXDQtu=mgnqTT5M1KA#=#|B z(*8+$MNXZ$5M1OmI=IN`Hn^KVn=IVU9|NoXt$oWe|G9`Dy%U58ev!E*?pql8`Apol zXcb=0mD_JmsSm{Mx2NPMao-}&w__nLWy+}Zn)nd+E#mz12Z;L?fS&iXMQ^9~Web-$ z6Z)Nn+v&y2NIA;4)0;UPXLbJE9f;F&^%*_Xwib6UV!y|#X7K~I0rvZp868|R^VcEM z>FI4-IbS%vvps9_x}gIT@|&wLO@4)%cebY$t%P85b>*SLF;%L=)tqd7_H_07rtZuc zXhq{pO)KR=lh8qX=K6W0cg;PCQ@mX#wPI#{efvqP+BbGKG%ajzY&xl-y`jBpW@B&PpsR>1S zSWI2~_jvz;dYawq#F&bCC0?NVb-rX%z0&~eKCuyLL|>$wd%2bOjNESk^P%_)h0ype z|9UXH7)f6>FFI)x_^dOX22QsXd~XElm-mLWJ0Mfe)wK|)i;+SyoL)z5qj z(tj6lx<>7#|GT=#>tZBMnJ!ixZ{Vn(y&qTqWx#^;D-dClf4Ef6)pZF_7bD?TqhG2h z^%HXS{{dK#ewo7^D*xXEe~|tcjQ+O}PDlOhExP*u0a%cJnSd>ZRhHm4!R)zJoDU2{)-Hke^dy+tjD}a7>)1p^L&sX z{e4FNP|xr8Aea1Z8?@E%CyZY4B>&|8c3ik|V%V$Z)1ZzwaLj*x1qr{@Yo5DE{q7j_ zpwa(BgxQX?bmE_AuHAfYGYJ}M4EjM!7Uhb2$juNFAbN#v831A?x&nLK4S$itAn6yv zGZ7w?e<@RN_VdF$6Mo6R_rUM!rtCo@G+}&3qcnj3q#1Luv!CyV8iSrYyVB4Pe+>F9 z4gwjMQhv%yAlF{SSnzA3C$Q*C_D$T``u1p!LFWv7c)f@7#)HS8D<<5tqQDx5ZYdj` zyyj9FhprxYdo<3jpZL=a9EaRD@$uGoA@iMcAoJ?nfe(L*JuNV`ziX@UGJHw9?~_Ij8sibH=Fa4`VEPPtpIqvFN9c%+~FuQKjXg;fdymT2{U+uo_TA^TzI}vW-#D({QdTvv?&8!=j_F6RKhH$&(}O+Z z5{a@{E6Q#u_7p;Yp``A@)Xsg_cLYxj_fK100G#9P9EY!aU`etHdwk_!tiEb|X{>%7 z$IrK^xeo9C6XV|aida<@_S9;|Z_|`m6f){A@pe{04(suUSECLefjWF&s`bs0X0C(d z_RYf|=g)0S?QDkJLF`3Vkf<8S!=P8Gex2FC9bnjR=pZ6e+y zSFQ9STVjzf6vox}ytMK14o`q?nxR$W80m3(oM=BPe<|t8@vAj7&Ga+o2MY6R#^x`j zKK?c_98UDmzgZ!{a|GK=nCg?Ib&pW<66D==2;SEZ!J9x>UPKdYr{~8Rvh$aY%0H`+ z@s;`XN=>TLz_oaEH)u~`wFZ-XGeKG2+n@`YYxpbmLX}+c+3r+0dor0$_qFU%3myIy zMV~P`p#pX*JiCMOsKT?yz@JmNJsP9sKdf+jG)CikorOQvs!`9oN70*(xq$G$qj1w< zv+$b~?vKq%P>;foklVC>wZgN<#%brEdw*$Cb#b}E?a?P4{+B419BWic%6qfI{d|xz zzggjaK1jL00&$Ua?e@Hc7VrHYevUO~q3WCo`;Rj>k)6*>LavoAlO*K@%{6FxKR+|+ z{rt?tv!4qsC;PeRKtPerY_6Y0c?IE(A^3A4a;^m)G?(#2h@5`{9yFIxspR?oupTAe#_EHdKn*Ej-6gx&OFVg*3}XhIW-1nK2I^%^p;upBnv;> za+G*d{t1>GiI0m*{gw0z3+pYN;F3RUG@QmIT^AYL&7V347ded%E^@jJ?&i-X3%Bzp z&)|%wU7y4156gm1(xvY{uMd(B|IzD%U4Pv1Bc?HedScH7OFbc;kW7GIWUh&qTDUxq z#LFyP+Evam*>6dC9*GMt+2r{meyk-&+I!;m+q2Km5Vw1k4_Uaxfzb07Zud6#TDUzI z7KL0o%D3}pnuRA6h5nba@KOus`T;u1vGXT$uFd_f!aUXT`b~$X!CcjlG+7gO_Pm%q z_vS{xT8?Y8xMXTtFXPjclYm+Ce219FJCtbCTK7@QyQ+-}NzIU>}`p{Ms>*wet z^*yAo`QJQVY2Z?WVGJt6r84gP8+l&}@=FM$%rO2!AvC_r{{om@jHDf-HG{NyY*Uy{ zX>SGRSbmUx=?_UesikG>8bCmh{$8WM#xPPpd*`lx4#EZL-wK?rS$paKuCApBaWN9V zVD#7V29ElJ=K8J%9;9E|W63AVpmTLy5rC1d(iEJ$f2f~d`EL3vp*%=`f*@S2_R{}d z{Zm2bVkDOJ4sRJw>Sva?`U^w!cNqQhJ~U#obd3zrUu!<0BpuXG$koq2I90jz|93|J zQ0Zr1G${QYV-Wynr=MSwu72tb(toOX?uSZ0d4u%VnNL?c{Tv-|^}i9K|1qO~JHl<} z>e_=q7bAU7k>-;6%lr?T>-#Pe5R`uIk40Chz4U)qS62u>*HO~lpuO~em;b9F{1Xh} zQ0?EJAer%Z+wcm*pGa%g7n1)1(`M3*6T@yZ`B%pqIOZSoQurlbA4fS+zuVX4nT2#u zYA^ktv~=QcHP>!F7qGE}8)~lf90(FwnnV9T)9~9EuU*<78-7#W(&ROUzs_Nh^b6s3 zga_r{0h50T!_WLn{IEGb?8%EH~6#=`0+Prpbpt zS9-u2woM@po|nS+NyKx{Jy{j;9%;rplwK?&kK$YhuEX(g-U-*6@cQkM)d#>_VxM;s ziFyOMIJe_^@HFF$mS)fUG1_i*Hp`G}W3bo0d$!d_3nRPVyC4Vip_p5}I&a`Zoa6LP zZZ6jFWEbN3YVOewL~*Vg;~3Aw*+f_`(>wy_f2@iOAivc*qrLyh z8(^Avo&?jt^I&wE7D2~CoC#4q0G;ZrsCSPz{(!r_sCi{-K&>Bwj$X)FH|}f$dA%8k;sHPjB4ZR^MvwKF!@yaFTp?3$}xy zR`g|8a|?ML5r2>Q`VHK(Wpkpws|))O!K$w@ab-()bD}fxl5S*iW zWtvW<-LQW8a}L@0!)8Xx-b6!rts(gLf!kx-(pUM<3itC((p9Q(Ki^bc0d^&RL3*W5 zacsK;G~&w51;_AAH%lQE4ld&)(;WOO=DyPS9J93Lh+e@(&OC=+B(jJL%aHTX zTM=$M=N3H&-4AoWc~Ul$b)9Ej^YU8!C?kwto_EsHx%_M=T#R%H(=_mXLdR!@>5TFQ zPH;YtLHch{R6~EWa&|LF|2(6A(8!^FLazS1fd%P*(eOz-Xl}D~-GP80{RfPGsU+0T zHrdtB_9;kzEkU?N+Drd;b$t^7Q zk*OHXzi$V1!~4Ca!{9+Q2xP+Uv?34Adw+&p1eg{jbWyn$o>Gp)ie^=}p;@9HLf zg?T6sn8eYe4440;nKNfvpA18ur#x@&+&PE)%}`@aDx?qxelwIK*I&)BugtcEWIz3# zjCKB8gFo&8v5Azm{yeAhHTur9!^(oJJMr=Nytr@1b`R`O$|WzoZ=?2+@ zVp1$}*CFGL``Yb=7i zdrepvugtpy=`A9g}$M1cy>M1 zxS#*L7nhr1i6bb}mHpf?G&ghgxnf{D$>-g5AEJDN@S+erYz*yW2oAD`eLFXgYr|p%{az5#l(f4lpx3GPO$KVx#k$1jn6YU#{j2U^m6UmGgcZJS3bY( z>0J4XG_34rMJAyw=4 zx-K%fq*vtBIk?Daba0W=ZE!b#Hd(lxKcCkJoiU%+2b~X}*N4yRgWW##={ep$tUrE2S@PxUhN4qvU>Mhlm>VJiWmsxm?h1>bL!NTqQ?6Gh= zKV=M`dhPsltctBMhT+>xTTEg0(iTaut#qbwvqi4AD&lBMcvSUvMT+KdY_2~WTWK?g zX%878O|{MSJo_iZq}xh0Qe;!4XGudDAhN1${f0w})D+ffKmi*u+421J?X|5WAKF$M zX4z^lCj7&toEH;pw+%aN*`f)TvPIKpW4HZvd?#g(et6zIvvhK-6KEdS^b^mvg;>}e zYMRho$a`7v0_Z;!f1wbD@N+L3S0+itZdTf5wna>ewCjR%4lPK(^uxCx+;*<6FCx&z zNZ)Ke^`xIq{rp;V^)ugs^zQ;r*Q>qse^(cIU5v!rjs7~`z)}B5{9OGf0SnSEbFh+6 zAXCoO#cxd)BVmy-M3MI#^>g&f)&CNd2kDpb#aarpoU3a$m|cwIDWm@_!%O`fy>azF z5~BYxMhb4I^8YU(`YX*)Lc++Qein(V|N0R9vPaTT>Hl(w{@NnO-nZMPen!dFUmv3X z20T}EL#6+s5dEnmHNTyHLazRYfk8x8`yq|eQ0adNyg}t(XV#tA<T^w;Jh z0B)%C_kt!!f2|oZveVDe99RE80Sik1^G5&U2)CW9>m>xb80kAoG?zTTEPsv`y80J} zlz*=gTB*gP|GT>4A^eXS!cA#Tec|%Y4B@XdLu*5||NjE9%s-P|X>BRPpGYJ6Leekr zK3uqQVpy-qzdGK)G5;puC;XDH@0jmF^4K1iG}}2SCg`?r9Ng4F6V#LDDaT3=hh`y(a(UJ;MAe#ZUMp|7a`Y z>ZWY56<=fWkr4#O3arT6JS4_j+Ut_Gj zzglOGPF^;pFxgTzCV9;_WDl@K18;wUdw^9#S5@opXZ=j=(e?XTKS}F;7rNg$2fDA$ zANUaVD_X=AKyY)o_?`Fj3nZw^REbr{( zaBLoeY*E~O)!g$dXm`W&E4ZgxRlpe*++R)YNoDP;hJ4_ZW!4!M!?s7sTQ;op1lgl} z{PYwKJ3Yg;NrAn?aLT9pleS5L-NtZjQpy5sQUdL3U_&vSw3Ho_ZR7H>>}%SFpO!r% zkIOnM#q)Z+FdLiZ$yEc~)2(jA*~y$Si;{UyF8Uz9YViji>}$BcTTfrl5nGF{J)&-b z_u;zZmL*F;Qx2L*ps9jw%2S}Zw(r^_?kT$Ni2BpL4=0XGeVB*eC2g>Y$t%2g;)@f< zHoSQM*v1#Pj=lbs^63pPSAMx^ur#(cF*!C7;mh${!Ir!4%t&hI0M1bvfxY3rUvWb0 znemfiKkK_;?bChtuSLJN^Y_Km|CHxui?}cs6eXy&!t~U|C_U6*~!srRH{3(-T+^?=Y zIwMwHk{d6L=Ec+d*4=n$yP>*USYFwC)kSVbo)p$5^Ga4EY5S9aoliA>b@<(YUj*?f zTD&Bgi#XliR~F~_Gb1LPldK%fiI+a@#T!cU;zju*lDRy?2DB58T#}r`bb#&+q~V#n z67jOaoOq(hi{FzP5ig63NOBK4*4aq3Hc7jqy~o^rTn+qv@S~A}Q8gpHx!eb@NZBE+ zNal|}Cply3lB9QIB6d{OlH_d2p0Qw7>?ruRoRu5ze^SXLbWBl7#zX4oigni0dsX*eTiRxA?5zJ7>j8RC8dWHav@ zknZb|=Zj#wR6Xd$C$7wmmlupkPDH$OK$nX&vaE`re{ytkEdRDi@v6c|JcTswN#(~Q zNMnxdtB3sk_uDwF+R)P2^qKCe=W7hHZ|Y){J~`{ABD|dFhO%v%1{(h8)c4C8IY-Cr zrI&x!*!;7L@|P9oFK0K6eb0+X4A;kh7YRMj-7&UM`DYd9pIwr_?CAXE?7J~8iWa`~ z<>=p!A6+f~S@uo|+z#SL*Ta8ldnbQ?Kk~oMFt{Lo)lo%Qk0OvbX7Y<|lgrP(dy1V% zIF%=9{r(<*btXKBcgrDo6OehA3BQ4Uh|ScXEdyjl_`PT_NjI^*26MlC5R~D53c8?m zW5=tHA$#^fvuPWm(hM2A(KbZvp=Ua6LsXs#;;vfBpPYrSP`LV+5jI^xrXz2K)F?dL zhDF<-+p{H_saVmoBs1Meh1;_nI$YauS)F&orfsYenL=?h5I%p67(B|n*kF6;lHSG-}Xd;o>jPS8zOiY>O+oYo1^ME0=b?q z$Jz}?>e@PmCxl(?<;I)8!7t+Z^&~+M?jP{Wv1XrCT~{Ie{#Kb`?tCv-je7d`a+Rw_ zBjwKbbJZxJe=k?L87spCrQYm(W@xS&?egj5DmUO9DNUc9&l=CpXN_mqTa9PeTa9Nw zj~dUe&l=CJ&l=CJ&l*qA%W}C^Iog4_8MB=_PZm3AO!yb1O(By0}ry{ z`gVw%hk*y#aB&aNARDe`h5OG}tw{*SsEaL|LBaJNg?_mUewU*6+bemFY839b4}C`d zjY_Xy4|@#0MB)B(EjZitVrw>7p`opfJ&v`=!fpA?2Rc{2$Z_Rgq{-FXyDdM@;I14=mn-LR=_S3CZ`)W^SbB+1 zGWXLQ{Ojgk($4tUa%P)w!9~tI2NyY#Z_H=mC8^{a@skWMJ?U4u`7^=LxcMV8DQAWy z=Tvj;;;Rkr=Fb`jmvl)v3caMO&d^IfnA`OEB7%#YW`|znY%;i;KU*x^&Y#cggU*=G z>x0gR&+EgX>w~moZaX0Dm5bM!=T4q?bDLfdBe*=*Zo47RwX_@34v3sOb0N6MX>@Rr z(`|6KeX!e&&)bLW_i|YK@c&zVxXaWZ)?4WV5ZY>Ro;PIU&l}vOe<6f^HTdaRKU3-| z^Irrw=di>@%>{AWX1~b7ZQJef7A}1iLQ=l2ZJ?AdaoaYq&d4Ede`VZi;r3U?HVaRf zYkE(cYsx9L@VypZX5o3Dqa*!9eX0K2wuI#tzR04Nwt>No7H*G1^jNsqmy>?0h1>c6 zw1wOG|FVVK`7e9vG5&V`XPU+Nqk`NA)!hx&4-MJ})(;)FHKWfGV$0|g1Y0s5js>D^ z{^!eOI^F$V{m}m>cY5`s_o>?q`lLPr%2)-j1<*blK5v?F~S^CtQc`=cAu5QBOAK9)uu7&t!P0aCXJ9Wv`J&*^qFca z+D~pnT0Hkt@%Cb9J4D02d=|!VIa@@dl3igKQgHfCuScLl92#N#AAbYD7Sg{vM-W-mlcp z(P20JJZmRNe}~auD~gTp>f)I;E=JPrM*mxekNSgb8)?HAq<_%p?=k%1xw@_i(Z97= zb0mx$>K}ujoBnkn`cuH^hD!fmgy)9wtF{;)lPUob<2cKVqmu70tNbK9>vqkpL9e;;JJdBT(r8ryI? z{fv^UzZ_Ul`d=Al`q>8!(*LR%dbiUbWZTGe2kDKi|59bw#7mGeP#%LsQ2e95KMkk-9(MI)$k|Mh`x~Y3;d6` zaO1?VX0u?cjyG`3zf$~!U*0RTpqTpYF>l;@gGT=kd1E=!(uv<|t}7Ml|7$afPWK^o zC4Ayf!i8Mhqz_3%Z4lQk?M;Rs)i}d#H~a@223PD?5gwF(yG;J|82$=KpNyaIr}Gbr zUEPexHW(byjW_j(VmR*O@}D$wjyCm7Xg8E?=-m0nG&C`M+tBUSbYBW_;Fte6%`|H%fc)s_?I@n6R zmm7cJyVn);zxvgx1FzwlbPRuKgx4R<_jdm#C%S*)M<1Txi5zb=n(@B(A@kdikMkM&--pasu}2#9?7^PK+%N5s zUwZ?h^T+G7&X1t;zJL2@bX0D~p*aap8W++-sTon)jp*GX2eaJhj*J ztGUORc#H?Vrb*LIuR6Hv!;gM!$K_R|@xa=rw=q86D=D>4^gHML4eVwku$yH*crzpC z^sGdg@$tP?_KT}S{G=S}5Xbbj$_rgSH6wafz6L(Vz4@QLgWbRORQbyO)$g41l+qhi zN2sS8I=Htp^=^a?mdQ2gI->Drr;c3d)Decebwp%R9%a`d&h!~iJ8z`yes{$95B5Lk zweGtw()#CPyn}yQpF411Z63-lAN6_!@@gc`9gg(V{xDjah%xTpq$eItB@69t)JFYnY%z+JaaHi`VZzsz0$mW^ej%_)q z9aqNGGjKW1X}g*QjrM!G9~B zi@QpozskEgse@>D`u2d2wx-e6A@=bK@rei->tXQoKLD}AO6h*4(U z5>3Cy=xWJXn3R3am^X~`bI9iiY%Lk@DcCcOc|%#H#}BNiKK=of2FhdlCI0)7{#}Ou zY?H6MOrG|Z>HXH3Z|a#wI(o6sxXMS!Q;1Xj@ei&jL;RS(xs+-0%g*BmA(LtJj-3|kMV;y$lZa8?*^ozBl1|ES(>E36 z^DKDJ0R4l8p6N@MDa*p_)BbEaUkdg!U#Roae@1wuVD#E2EB5ahiQUWb3>Ba}PKAm#6=1wm^PCq~N9#!E;6gZFHWudebFm4m6{#v&~&l zujdVo~?M;R@N?KJ{uRb94kL44! z_?RxX=^y1BxBtEmSa(hQ(02B6UrE(wX-vYFpv~<@+#iX0v#(sI<9iTs6a9?qpLnn0 zdXvOtKE`!EWSo&(qT-72-V){^?e{B?cM=!Y zf%(Y0&munhxj9zFhwbk!D_xAovq)D0^{}8kb?|G*Pd+yZ^^BzSGxtfqjyi`09;t7>cPY;S2yG;FAETc5b1 zsk5u4y)AL_^vdb8Dl04Jp;K3}4$ILS6F`?OJAb(qbRsf=u1I?swz3Ie;|)H6okrhI zQ}5yb-6CZpbE=`~qn|}HRvl?V`HhAyYWxZCH<{}W`suR;U`LDF1b(;SN4J&#vSb%| z^8i22Ft|rJsMaiYuC&D+^_{}+LjUc>ca+?DbbihF{H4d`pEV)>>{$M?g#HdWKt{Ny z`7dqvo94~0k&Iz@fTN9KkWJ}&^%0fLyiVcn7p~{ssBrZ!L(5kb#DrzK9)+6^BP-}? zg-Z_m0aqw|lnv3AW@`35R}o8+ibP0iA0aei{Pj@jv= zn%s=t@qNX)X$wss)AZTt;yK*erG7^Q4e?J`0|peE3m_ zoLfTZ$A!>u523#xBtGwi;MF1WmxsvbxLHuTdP4B$LiBzwg#OHs`20a^YkFHO+_o9GAq2n6;4H6+ z=9=DCbItNP)?Cw*dg9`PhK9J51)*0ge3H4QHy(6!q(4Dls{aXt&xN0`@JfTvbMR9Q zPWm#7ewjsY;~dMSquvUAss1-xIL83R$s8H!?f7>adg?6|V)$DO&Uo6mjFD50z0VdG z`O*=WJ|pi3Eu3wmxM^r-=v?}(7VcYa<9Rf%B0leCx=Qg!4bJD?#>)*(`F6dXX5n_b zG~2@M=W&yTn`s)Q_eBf0bf2NrIZm)FtV%yZ1v zwr<3RS!)}caG*~6<}}*S-qx4~GmJcH>btr(I%s(k~#-$YAQ=eic0tpqtsS~l>IrG^d&XtwWFB5F5w zHRIr&dZuQwZdiX?H!P0gx7ZBIHjfzn^tn6x8-&VgNjp-cU*tVg);WA0YdHPP+G>J{HjKuEoQTkBprCqBwG&Oa! zw5|8lQP(1*0d=Xn$xlR8N5_WEOItfOZosZ<>7*%iVLdjEYm_jZCBgfx`DLRHp)ys# zT$|iFuT9ruuR-sv1|n90^Ew(4pCudHKGj31{0Ih^M#1<(#g$Z%)kj+mK}N{6M=SD6>4xlDt<#nqws<$FdLT>f7p zz{N=WvS}3GGK?kgnH2e+l0L&#P#&aT-rIeKUp!aWMlib=X?K~%x6Uw9KVJ#1eku>r zFE*D#Z^UHjVqYwXpWjJz9okF(cjL;wrHhfc!n`CT{fs~3BJq*@y9@n*ApMP|f3Oui zwsUoT7j!O0`p1m^LBmY_9QAPZ|232c>6d -#include - -#ifdef WIN32 - // For alloca(). - #include - #define CP_EXPORT __declspec(dllexport) -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h b/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_private.h b/android/armeabi-v7a/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_types.h b/android/armeabi-v7a/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h b/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/android/armeabi-v7a/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpArbiter.h b/android/armeabi-v7a/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpBB.h b/android/armeabi-v7a/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/cpBody.h b/android/armeabi-v7a/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/cpConstraint.h b/android/armeabi-v7a/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/cpDampedRotarySpring.h b/android/armeabi-v7a/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpDampedSpring.h b/android/armeabi-v7a/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpGearJoint.h b/android/armeabi-v7a/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpGrooveJoint.h b/android/armeabi-v7a/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpHastySpace.h b/android/armeabi-v7a/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/android/armeabi-v7a/include/chipmunk/cpMarch.h b/android/armeabi-v7a/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/android/armeabi-v7a/include/chipmunk/cpPinJoint.h b/android/armeabi-v7a/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/cpPivotJoint.h b/android/armeabi-v7a/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpPolyShape.h b/android/armeabi-v7a/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpPolyline.h b/android/armeabi-v7a/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/android/armeabi-v7a/include/chipmunk/cpRatchetJoint.h b/android/armeabi-v7a/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpRobust.h b/android/armeabi-v7a/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/android/armeabi-v7a/include/chipmunk/cpRotaryLimitJoint.h b/android/armeabi-v7a/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpShape.h b/android/armeabi-v7a/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSimpleMotor.h b/android/armeabi-v7a/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSlideJoint.h b/android/armeabi-v7a/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSpace.h b/android/armeabi-v7a/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h b/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/armeabi-v7a/include/chipmunk/cpTransform.h b/android/armeabi-v7a/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/android/armeabi-v7a/include/chipmunk/cpVect.h b/android/armeabi-v7a/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/android/armeabi-v7a/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/android/armeabi-v7a/libchipmunk.a b/android/armeabi-v7a/libchipmunk.a deleted file mode 100644 index 5ce20e8a04b91a5df0a325da7f130f413e4f6fce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190156 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 P*aphel(~s=HD1?^Xfl)=t$-+xK7;WH2dW

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 -#include - -#ifdef WIN32 - // For alloca(). - #include - #define CP_EXPORT __declspec(dllexport) -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/android/x86/include/chipmunk/chipmunk_ffi.h b/android/x86/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/android/x86/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/android/x86/include/chipmunk/chipmunk_private.h b/android/x86/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/android/x86/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/android/x86/include/chipmunk/chipmunk_types.h b/android/x86/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/android/x86/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/android/x86/include/chipmunk/chipmunk_unsafe.h b/android/x86/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/android/x86/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/android/x86/include/chipmunk/cpArbiter.h b/android/x86/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/android/x86/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/android/x86/include/chipmunk/cpBB.h b/android/x86/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/android/x86/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/android/x86/include/chipmunk/cpBody.h b/android/x86/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/android/x86/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/android/x86/include/chipmunk/cpConstraint.h b/android/x86/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/android/x86/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/android/x86/include/chipmunk/cpDampedRotarySpring.h b/android/x86/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/android/x86/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/android/x86/include/chipmunk/cpDampedSpring.h b/android/x86/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/android/x86/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/android/x86/include/chipmunk/cpGearJoint.h b/android/x86/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/android/x86/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/android/x86/include/chipmunk/cpGrooveJoint.h b/android/x86/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/android/x86/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/x86/include/chipmunk/cpHastySpace.h b/android/x86/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/android/x86/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/android/x86/include/chipmunk/cpMarch.h b/android/x86/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/android/x86/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/android/x86/include/chipmunk/cpPinJoint.h b/android/x86/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/android/x86/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/android/x86/include/chipmunk/cpPivotJoint.h b/android/x86/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/android/x86/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/android/x86/include/chipmunk/cpPolyShape.h b/android/x86/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/android/x86/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/x86/include/chipmunk/cpPolyline.h b/android/x86/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/android/x86/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/android/x86/include/chipmunk/cpRatchetJoint.h b/android/x86/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/android/x86/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/android/x86/include/chipmunk/cpRobust.h b/android/x86/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/android/x86/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/android/x86/include/chipmunk/cpRotaryLimitJoint.h b/android/x86/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/android/x86/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/x86/include/chipmunk/cpShape.h b/android/x86/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/android/x86/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/android/x86/include/chipmunk/cpSimpleMotor.h b/android/x86/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/android/x86/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/android/x86/include/chipmunk/cpSlideJoint.h b/android/x86/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/android/x86/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/android/x86/include/chipmunk/cpSpace.h b/android/x86/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/android/x86/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/android/x86/include/chipmunk/cpSpatialIndex.h b/android/x86/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/android/x86/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/android/x86/include/chipmunk/cpTransform.h b/android/x86/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/android/x86/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/android/x86/include/chipmunk/cpVect.h b/android/x86/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/android/x86/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/android/x86/libchipmunk.a b/android/x86/libchipmunk.a deleted file mode 100644 index 4a2d9d23a66b942621ce831d0b6c319b1a84321a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325800 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 -#include - -#ifdef WIN32 - // For alloca(). - #include - #define CP_EXPORT __declspec(dllexport) -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/mac/include/chipmunk/chipmunk_ffi.h b/mac/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/mac/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/mac/include/chipmunk/chipmunk_private.h b/mac/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/mac/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/mac/include/chipmunk/chipmunk_types.h b/mac/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/mac/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/mac/include/chipmunk/chipmunk_unsafe.h b/mac/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/mac/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/mac/include/chipmunk/cpArbiter.h b/mac/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/mac/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/mac/include/chipmunk/cpBB.h b/mac/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/mac/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/mac/include/chipmunk/cpBody.h b/mac/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/mac/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/mac/include/chipmunk/cpConstraint.h b/mac/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/mac/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/mac/include/chipmunk/cpDampedRotarySpring.h b/mac/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/mac/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/mac/include/chipmunk/cpDampedSpring.h b/mac/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/mac/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/mac/include/chipmunk/cpGearJoint.h b/mac/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/mac/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/mac/include/chipmunk/cpGrooveJoint.h b/mac/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/mac/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/mac/include/chipmunk/cpHastySpace.h b/mac/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/mac/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/mac/include/chipmunk/cpMarch.h b/mac/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/mac/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/mac/include/chipmunk/cpPinJoint.h b/mac/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/mac/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/mac/include/chipmunk/cpPivotJoint.h b/mac/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/mac/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/mac/include/chipmunk/cpPolyShape.h b/mac/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/mac/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/mac/include/chipmunk/cpPolyline.h b/mac/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/mac/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/mac/include/chipmunk/cpRatchetJoint.h b/mac/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/mac/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/mac/include/chipmunk/cpRobust.h b/mac/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/mac/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/mac/include/chipmunk/cpRotaryLimitJoint.h b/mac/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/mac/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/mac/include/chipmunk/cpShape.h b/mac/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/mac/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/mac/include/chipmunk/cpSimpleMotor.h b/mac/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/mac/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/mac/include/chipmunk/cpSlideJoint.h b/mac/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/mac/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/mac/include/chipmunk/cpSpace.h b/mac/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/mac/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/mac/include/chipmunk/cpSpatialIndex.h b/mac/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/mac/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/mac/include/chipmunk/cpTransform.h b/mac/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/mac/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/mac/include/chipmunk/cpVect.h b/mac/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/mac/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/mac/libs/libchipmunk.a b/mac/libs/libchipmunk.a deleted file mode 100644 index 0e14f0f5c5d8f4e5116164916bab385e9ef7fac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246224 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≫Hq;|ImK^udQm-GDTp0ofAi{sw9~W5%{2 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 z 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

7oH_e;%wmf2tPhd?EL zK>2S0Qbi@F0r{J9JpYuQ>mV+>q*V**>_<>{G6cT?RQNuklfBpAw}DDmHxS->iOzvV zPt8Q-(@i-3#Og(F^m1Hf8*!&B`qMSF-Fgv+S=BG8+EcEc=;R_`;3i&&l%d z%CZ+MyJE!^P0c6(;gyh`HgnQl5!8ZYxP}KtgLqQMv7)Kv!WEZYftrpiBH>Ozn(pc= zn%AsedG*C;D_*hDtM8D`jHznMQ@d1iQMCe%5_PeXpR6!CXf4G(@(aSWxgKIUM1=f_9_Rqp+BMGUA6^ zZ)Y0IFeBY7C}mKUsqmnnoBIyYVzKO-uigWhzKyxwDO=yh7NZx+=K%DgG@@x01>I8^ z?){VWYRD9OP;kiT9X=^D-{viP!|I2Yo(!4WJSdoka;&I{=3VY1-J{s3%Lku8^s_!IbTqu}%wmvHGZ zovGX1i(wt3Inv#y034AKU)3`j^|~q?TMY6&bMRgF`e#Gcom8C;k!PSGb;UmRs>#&T z$*wtfDLKiGXAdP$M&9nDn|oq6cFU!!63%8DCuMC(t~IpP#=F)J%tjEJQ zdRkJ%ku-xekyzcMI`*6N-tDBSfD@C(YIe@at`_*_UDZ2_x;{Im;^bcV+yt#ZoIC7N z-1E_WU(#)$cgNkPo(=tvXWtD+CdFR=@xU~7N6)XM$QIl|6ssN}B?V{$-Pd|7e4hTm z%e~XNhjWZ{c`Yh)oa#EqQ>{wNIbhX%4TKuD{x#jPNm6&q%@q#LIbx5)i;#YmJ;_ux zN?%d+Vh_k*4+m~-W$J%w=}^}3=J;z%s=98x1xr=x#;pLDw~%kWjeloOAziT>AHlVz z%XuE0Ro+!m!s+edpQ+ipgz^r~e2qdn_%F$!_`g+6Zzgv>S2!CsY<%opI0BD-jddg? za&Ut99#x&lAMK@DU}N72({lO%CyZ~V*{sRVaVwLtwXkxh>h24yTmM2RR?KNs{m)~? zoSC}Q*%$m(j9QYY5>$&$)e=xQfDb&wU9P_F=$HXRGI=857-oDl^!gHJO z?_0=Ab?Okj`nm`oFT(c?_3PfxsjT-Sq^(SX`c00Rx{)u9&YFY@o?58kw`f{2b&+ZT zMZ4T7NIlMBEl>C;fXe+IKPosa&1Xx;S37)U*(Aw<&LPW|r7uZsB5RRzd|Kz{Uu?$( zx{GddiZuR|)up8~p?>VA+4k@jCARq3X7}}AYPm~t6*+Lk*>9PRP~}|D67RI#8x~oqjB1KMBnSgGbx$LuD=!aWa@9#>?P5m zU^cw$_}Kpj8t~Yw*pVEZ==g-mPKU&>Q8dt#+P(9w_wRh^ePecaJo`qf_vBZTO`N;5 zUG(y{WM|8<+tgCIYj8v@mGl0gEw$y`Qj3@7dTuh=@!GW5=Jl=|;*~d%|BfxB*$qvT zbky_tUG3Pj2PnA>>Z=`1{p%RuLF)QJtLqx-dJpzJ*iqp!sWNX>FJe%zs(yjbNQM4a zSM}vYKZ>eOf~Kne8nf5IcMr~g|NpA*t+W7|%c7e&KW<0Olr%;#C1v&d!S#UaFx;XD zsw5^aYLC@V*}~$K(;BWf-srye#CG39tGGw4f)Qa6tt34{Xhg{0OwLnyKO)@AXYOXA zL`HmujtD~dOGkuiq8~*wITBgXm?7oBM za0ktSiwdqeqz4fOjr{Y2cx=`h?&332=aE6u-1*EXDZJ%oo834uI=Zb-R+2u zu^rKq?1)hI;dVs-pd1g~5uL}5sPvWHeoOS8+}j%465ZXh#BYhJwI#afj-swMZHXwt zPvzMUX`j@Vhv@NsKeUsD_Z@K^aN2%|b!}un^eQ)8>_$oT>DTtRzKea(0l&)hyC5$g zVDKLOtg6(*Wp3AFWnMLJTx@d>Wm?wpGc~O7*Bn#T`7_nOn`$ak-;!%t#~b6XO=Ryz z_Q!7AhiBM;{1taiXAHmpsO+kk!Jgxd!97Q7k?*me@o>s--~nmxF(vHZviBb+X#c^j zGIzQ3gkIZ!^s}ntlBrWO#$F~|zDMuiAK77KT{Y$MC(Hb$x&X@R4p9V)e;=FtQhNWf zW^n%zpFd5D*?nw9;_h0fY>!sxZfAPK*uz5l7kMX@e#`TKv6T`(= zVdGDe8^pNN5WBI1_>x_%anwe3-mJ*!6I1yu6;EQNnm-pl`U@%Kr(mz30q-Cnvi}2X zO<+Loe3~z~`_zwvU77^X3ZXh`KuNvN$$o&b&V-@!E>>h zPi=T-b>~ss4&oNqUf%8aa*P$f72A9U%MR+b_@36|4<4i3eU%-Z<@DII`Hn5-u9D;* z$ERQW0w=`%5kwt zOD8Y6vpO}O|B?2f`9wlHsynY&YpNKmo3FbXMd#bExcL#gQ3~vJFHJhrrXEt|ow<#j zCP^jV6Bi*{Xwjjnu4GZ=?4RTI8zCGkeRf&%7wr#L*;HQpXgoQ@eJ#>l&jX3NX9?0) z=AXTA8H+aRZnXV^Z#Jb3zvm|*7JsDvUXFcXFNyV1E>KDLrf49Gckyc=y$%x9u=G`r z_+25+Jgu6f#ID!0r9wUn8>qh| z?vuSPg_RQ@LR9m^Xn{k*hSVcg#&-8SiIY@k@?r-k4YpHXApQeaox&BcUtD!Eb;VG1 zh@17go;GP^5!FFwn{ef{tnw-20y6h>D(CSYsE?aJD*J!vp|wNjSFtaqsD({EvCW@X zZJ?A-_Yf(3{>M+c0`{stO2h-E4qlPv*ms%h*iZ7Ya;q{VncLh6M2a!Vd=Bk${xKE_ zE`EYiXBOawzq{;D`{i{NHw-CXyy_4MqAPmxtK*>&MXi?Z7*?>TblJb*QP&ab2Ovfb zOWsI5)EGz>@25asiGAVkr~}B&5Tk=7U7wa7AA@{0e$} zn1X`et$KRPj}GrYi$*povtiZp<`pGpUC!a-hQyg?CO+8A(OJ1{1*a_9uwwm&Q<|5r zy>$607q+yzXU&(NQofEu!c#uF{?d}>|=9IXl2 zmpqhiMlhKL{BrppGXK}|#D9p%Oy>DK{{1XYWR9mobEQ8#dVNP8|M)RJe3b{5TW`_- zM)UuC9{)q;zc7z~xW}M74!QDQ3!_6OU;3Nl-k)c_GDFh0)%^3t-*5gq^Mv09%T;Ex zr#ysyc$cl22s6ar+Ew0rYemnnaKHq-?0a1wfoO#&8=l&sGvQuS);%cUw+P``Pgm{I znSh^lzi9@Z-{iOLIghV)>P*0o$a%RBkHdzi_UcT)o8RGX#VP(j@=F}>^we&h33%rX zy+5aWYloiq_-e-^;a>#Kwu2sD?P4VSP2hL`#^bA<4~MVv&|RT+yPs$6o(UyWf12nAzm{~mZnhBsU~_kuUe@OD}pwZ;ok8CT_x7wG4Z(YegFn!weAwWL zK*&#-Z1#5<{1_ccc*O?)o$AI#G(Cn8R`~&@7{+|cR|FZ^9 zH25Ba4>Nvng`(u=K+3j6@1e(m|3icSYVc+tX8IR_?+0%MP~jSZ3ReYGxN{7iZtz1u zu4I%v!+F3oU>|Tgum`C0{RpV^eFw-y<%&$&Q~ zs$>q3qAB?hkShlzwJ??`(lb8}R60)uDxL2IDxH%J>b|1vuO8#+Jq8s1KA`Y-0_DHM z;13M`v%!Bbc(cLFfJ)aQpy-GfD?0Pc|5Stj&EUI%!XFD%J}Tek^M58#`JZa=I3QOa zN{$8!|4w*oD$jobsyuH73jYS6%J1_)mFL+&m7Cl6U`p>YA5dD*Y@}CYA{ws7AL1_XK{ilJV z{|%t%r+}h=6;OC$3&=egf*GWOB7STJdlz-UAB@D_@_I~~e_89Co*lw`VV5z}`!2*N* z(C2epkHKz(?FJhSmKsbL1h{am1eWTkaNlV*?(QC`GKP6e{`|uFhfik@>mB7+{$YKi z@)37CtVea%+S!RiW(z;r!+LYF`G@u8ix%D?^Y3?tAJ&)W2Kv4~7d&SEVSPEy{1dp# ze21Un3+wNVW)JJ_o6X)$rOD`?r|`piu+i*c{rNL+96cI?%>TrnzqFA&v8er*_(bjd zv;0?Q`L}2JU!3LNo#o$?Wv|S_|4^3yy;=5fY13_!YS*F9=7QE0>(kd*owMCa9qJLe z-CDCw7gy)6Td&KQB3h1h{kqkcMx4sHmKm`M)6uujD+e&Y_=P> zZFM1bgL7XVhI_U(Y>DTuUw4J0xyi~Em%j{ z-+_&$*$D!xSl+T+ISH9}!nY!J6~?JFv4RiGKIPQ8?jEfFH+#;8{GYuAmpZrHF@Bi;?+!8&;_kul4KJ!E%-~HJ+@)Z3{`TUZ*Eu;BB=6if7 zTftazgO%`h-!+f^fNe%^mWAknp3)bL4Nt-9?voC8-?iW9B`m}t=qXKGSuaNE27)8q zchzD}=DQxG-wl{GBkyt>>Aq{wTcYt!rpK?N3bv6x%WJeap*OtTux6`>pog{Hum3!8 z{$pL0w(v27pPLf1?z<*%Wc^vt&N_c1Y16W?mY>*mj_erV$MO z;Q%D#eq!W2eLVSJ;PsgPKQwa+OoC529z2GM+i?R$^%FI?GIyDji>8o#3`Wpt*-{51t z#>e_gz>a^)A8YRPH@fss^psBZlx`5Ef5}hjFDn1W!SsKPQG-&Gs5?q+s$$)iKi0wf z0=iE-jpzT|qpj}T5U=k1oQ|oR>iBngqx#Q+QvNr%uG8;j5ZsT@gxJh`ubKWs!Q}72!ZUE^B?|qnxDpj#}qVIVP;YMW~9vsd=1#0@RLOPa}nn>!X+A z5K#(BEfoQ$b)o(aEGjoeR9{QV>y%hhJb1nj>Vh>4jIo(s z>E&Fg`?DZ-CW0-)v|~GxUq;|;OQt;d=(_1`mIxn>DvwO~^?ntX__VeSGc!}po>_(# zlxY%Xy%v~@kKb+nU&`Y@%P4Bj#SEbz_Ib%X{@oU0tqVM6Ncgy|BJzcAH2-|z`$h<# zV1$v$7k;bx7m~7^<-@oxujt*zFJX9Ae>w5?gO@Zs z)q^u3-g7!!4T#<`l+M;s&=b#K`zYu&sI*Of`*7(K4=U)X94>v|1FzZWsl7N8@)0?Y z*^6JD>8Z4Kle1jJBWpH1Yd<;h#M23SFRdL7!MlleMnO*bn89lbJzuR6DEITsJ|74l zt>lAdm)=U+R>|K0Su>BQhf?p=SbCS7ZE!Xa^S0@s+(O<@Y;JQ{AUb)+TdcK@IP)){4$O% zO8&z+7fink$QGt#p}CiuJ8sTh{5`5Bubg^~r~Lhwy>tKXq(}1V`^l`#E&RlP4CCe_ zX72_^=5~Ja598wfW)I^ayj;i63-d}NxZ>{xbDG)1yrLV#@(=UGRTe&s`yV%Z!U%|z z@Vm`E-NLKfWPZa>{$XBOV)igkXq+`vzPwJksQvp{{;J2Qe+`zX{o7go|CnVL^Cvp> zJKkKHn+7Y&v|d-iXB*_2T-dUrS-dkz zxnH?v-MaPv3DWMPxgb5YtCnw&==+Q^AT>GN!7p2T*_vGVY4;q`^rKORr|6EKHp}tH z{J)X-X&;{(upK{b-6gFXTGEfusncBV&>hnyfhXp8ep{jq!?_Or>$cB?AK%jLH}KG` zd%x@R=2%r?5THbWKwslj%mXVy{kl{B6x{(hjwfGA%n(2~EUF*uDHx_h9-kHi}G z@hpmiUNn1gm3L>X?v5C@8=d&Sse2@V{$|fX0i!+Zht+hS=17LpER$~?+3uHf1ED^% z*O9PU3&=W414mrPIvL}#`e^y86-}34xcaiSD=yX1Lcu#RN6eR=ecH!-kMsSgW%>H6 zt5;vKI-570t3MqgfdvVE81<*&_|oFf$^^c2u!sI6C^Opr^a*S9fiK-h136g)^7W@V z@*K*S7UM}K^r31JqHG1@ms7!}@Wb<^ON~&d*IMWW+M<%He-6i&ZnnS)OF}#Jl%{Dk zkSJaACVj)pVc2Scwp)PiQ1E7t=3P!BjUP!{hqPNqtfQWlKIxCOBgzbtBaI(>jBkF} z=;pbXZnd+b4ZqD|*`F&G z<8GzjNe%LekA#oBp6Z9A_!R&g#XkaeTu;K@WTQ=Oh0w zPwAHcD9sV2ujHrn7x7^ueB?8Htc^a_p8^@#MqBIi7(>OR0ccsQuk76kGQG6VT+qOAK8${O#tIW<{5e zU+T~jYqY$`W}4c1iRP1O5@xLh=91T`aZl#c{BrRN`{jwr$1jDbGf5AI#2@y(Y7x2O z?-?O{oSrO`FMPZC?*=Cq{aVH!8RJ_GNnhCar##va|Afu=e=fgsn(^1ddNzBVI)ivC z_{9xR_2f+8!$tUs;&%o;kE$sOHdg6D+jZZinJ@GpO-%<6O5pP8Arudx&rmxcKIcGk^@0@0MR^K`C#P4i3 zynOu0IfZVWHsx{J7k^XUZE!4*COPFz{)tbv4=DR*`NvwRq!lPW+)^NGs40sLY9A`Q zWL}9ccZxyjp~Otr-EM^+AZ-eN04V$?4gShtFHrarW-a_50fjGljKaU!;8ug;`zgM4 z2A2aBz5=N5X9E>p?*SD4M1$`!I36hc=Nu@Q{;$9|_+K~smx0G&UtsQMm^(PmeI)*1 zBlP(jS86a}P>yo%hmK&6!ES@?1{)2Q8cY}jxNuq|h#wgC3Ez|*f?-^lz_;vS9C_9J z!?+=Sp8ONgkhzeb_;LNRVCM2IdoY1t*kf+JcsPHvZ!mkp0-R>{Fis0i_+eaBdCMNg z*=p=YiZAxpSfX~-Q`Fv>W!C~E>i=YxzvFFXO;_--YL;)zz=;q@O zX7l>s!(~xZT2~{Pa;T5eDj&}u4A<)Z6SZJwCne3h3w(#bkrO{*B>vs(kI#w7k#tw` zqU^hz{JT=drh)`NjQ9=WQROprr+A-6g~0^-c)s;3k|Soc{DzZG@c5#quCkq5fZvhR z5%L>~jZT9nSFi=%Q#2cvT=N~7->}u_ZL<)Epl4m#xiEHRm^A-lu6NGnSC&rq?i$}@ zx)Xjs?=1X_(w5su{DxYi_iO8v+Y$;jXrg(StN0DW@k3^bSBI(fpkV7?`ScZ$pIrO+ zk@y$wM$a`0X!aYuxzMvB%1Gi!{EPMv`h@MX2G$Q#Dq5%TAy!$^9hkv?SJqkg>JGCI zSb*QEvkD5XVd9GNFGN~DT}1r^Kjyh3HsU8FQK*qx9Pg}5q!tt-dypMu4N~vUM-1MA zX}cGkQIPCikQ8NLsli5rb%MPMR*8+-yI_p~SguxpN}WP&G}!E5>agyVY|^)v8__u) z84oSTBs)vv`Z#*YKtFrJH2>kkTImSU2qjn1HcQ|0@(2> zF!Jy+c-o$EFG%~pY07ei&oBDPxHT1LHz`d&{@zr|>mmYGyXXn!(~$K@rkv^@m#s*C z96h$$3yO^&Ky^~FWy2XxiIKaPDEg%ldV}`{-6nbG`uC&*g6cV8rGr=1 zKF8XF%D9y!EtS!ZZMX}HS#kzK{@k@DtB=vdUojZ}Tpxe2kNB^{1eXfy^t6WidCZWSuYo6=UF6L9RI@wu!5k0g4 zr7rM07ac%3O}~0>XAM>_SQES4O|a%bEs_Sx5uCDc4z%ZrAr#H8<8L|oqQR(?OE_mH z4KbC{?N{N8lPR=F-i`dczTV3I0we__dn@;=ZE9dSkx`H2lrsjX7L<+3KH@^w$igD@ z86GT5b}hkSJYtmwYQ&70#hMR02TjZc_R8HI(tG|P4igO=2 z_GO)hQ3B1b6=jWguKggTbRRKN2;{xG^Grn_1Z;Kv?nGWH_2Fda@e=XbtA7ag`V_75vxg}MU8p3ZQaarLudmI;L)n;{u1MBV zI1`RSNcWl9ld@fRI)0w^(4oX(0 zIc}zzkt-iQU#9o{S7+L-2Q4-8#<#wcZg9QwFfdkp zh}D>62O-a?o@wT^`LLQ|lb?mQ@~Wn=-No^U?!vo&^na(`SOT+1)&)r8szbwa-95?P zj$Po&@Ohj6@~sRyl^oZQAw(CcxgjFEev0JuB7|z2TAiuc&exh4$b1(??V-keRZ$33M8iF? z;@?wgmEBYqWpXW)8W4=c5UncXkjJTwqzhf}Yf5(d1@H$cq_H(XSHDXUtW?hh`1&Vf zi%ZyWVT;#7Zq zzW&Zt#3wK6R{gy={AfT1ef@R6?e$k1slUwr8yOG2P19pMcpo{S|4N|z4lyx~Y&>Xl z0@&R6ve?sm0A>aB){5TvKZ9O+d>QZQwRw8)6TRb(m|pyPwE>sDACpmyf1ch0*mg`g zGI}3mJar-iB`$E%_3GXlVYjM-%~tze`y_OYI)^)E zUPMovaN!9|)(Jk!i^0^<@&xS~m`VpXu)(7JbO|L$K|VuFWUd_Bjt>u$xvcf2t>-gx z_eGUpdiwR5;|fLGdNWHB%>p=#{S+*etn6j3K$Jb*zVO-8M1G;-ellfF(RV_cmL;htJ1T}L z`t<%aySyK^-r}=sy@dj3^Rv;(i|8+HzUbYumsw`Q63Rr+sF;AJGA%d_7wjpt$8xg; z*9fv_3pGfoj>{+|>Mb%qeCi$l`K9y{#X~8rfHb8vmL9R=!eL4&tN&@l+TzM*A`6g3 zaqLTIAl#FzzgIF)>uM5=WNMaV&#m^@Ju*S>^fFSlXHM_OJU^z*Vf&I}a;I!nU~W^& z=JWzeEq=3_q7x^nmd@n9l%h2$mTlj5eW1=sn4}_>A_kQ3pL!56pi@3Y@m|R;GCrjR zhQEcoCsr@Pp~wV99k67^B)x!8*B;2v*F})E1)7W-oP5gzSnkFm?bB0#2esRM*Qk4) zK1bzCdZbo=FwfjV@gRDqAC#m@^;SL1i=Xrwd}%`0KgCkv8A6c{w*+)zhjIHOm<zTiZeWAml%$#xq z5ngpQQBVH@Uy=^X@`czZ?njv9E-VvY;N$+vSe+KUWC{t$-v@Cr~qBLU{NciY! zl}dYTDFejBUz3GLR1x*N2uxVq?%<-Vo4?NU0zNB{QS3OLcK;>aUZ~t9@mTSS1Wkov zzCz80HuMV=NmEL(NjGT>{&_0mvDjo4-3zh$ z7m>Xg+x;{WbDzd#>aSw;=sbFiFP4)_nJ(fb?_~?iL(9ip0WNce7OVf2G?+KAPo%)q zvJshTi%1HY)*An|Pp8y~OuQeigUWd3FI(td6Det~B;P4fw+9Omp<3kT<4@f|x@cMx zE{;pyt>gns-tBp=Rl9y?tvai}G3H8;EprH!4pb9u`?iWrAK&lhgZA*4n@{S=&{Q@k zY*LV_db>*^4f=KDtkMu>qO-jCzAKNRa~%6rp_9IPA3?RlL2fE-=}CP(M=~YCT5YfG zW?y}3M#aC0O@1L($Me*QNKZv&`R->X=-*QaUnR&PsnjNm6CbC939gz(%efMyg*!UR zXFeVKVk;9PiMhKnHuJUECLM2+m_vj_j_M=Cc|TTSnEE?so&2~6A?o>0ME`hf_ag|m zedHLi3S3Do^TJzJt)pNQ>#qJZC1PL}vv zvE6TCdlPx91f2Q=nUGTV9u?h5?}X~?9uoZ;WwzHRnL_@;1!N$$xa1pnhyDyPn$k-M zW7R#qgRw7Y_K(dh>1B-02z>oyw=9TH|5toW{4)in{;knuA_8XX??oQ$1EG88?%h`r z+VyUN+)G##!S|EF$EavZdt%KY$Y}6;gtGhvQe&UjZ390bU0GBSTYToTA^`RPB}vQ_ zr=Dg@D_GsLl+welo#ODY#;1<&l4yn6rbI73>0f-{rEk#SDSmeqgwPFy^5Z)-)=LLS zr^N2((-|sg?QtTW(8g#JEg7`|68w85XC!&s+6{o7RO8* zjURi7E7p400V+BkO}ptxgW~J_7$6&-^>5klCh~^2_{WGz{$G|-->-ch zNzjny{W7=5Z=fYDeGaUd&#u2ZHuI#HLAt70Q63a}c+))*vB&klC&Q1@DyhGhyl7&E zW3|X3qw|jm3*84u!o;0~ybDe(;2}2XV9M{TmzAM?4I6@vawSH$ue!(6felp=Lc)NXvFaN{_;tdk_d-B^L+ShJM6x6S4O*AcEyLMem zqG^@H^d?$Xtw>z5?$WCh>((Zg^XC#`qJ9%Xzk(-HiS;X_anvEZG$vLeYsp)imp4IS z#maT-S9qGM*It&UIEIg~s3$?kJd!f})H z4>FE(5HN9G`6+DhT4)0as(ti^UVlVpqsJZ+tlg+^*eEl^zuP(cd!f1RjrN;A3x1g) z;SYKDAa-tue+Y4r#~b3`XfA9aWQO=Rn~Ux<=F(%o&HUpo_|Wh@=FjzqoZ-WznS9~H z{jz-NOECG!9+rihrB==gWW32>yK|`1hNCzVa(z)hPoDNyb`>x9Gp*XUd$yFW0^BQuAMo zf3Ey>oB!!~{QJ#6U-{O$)2xC5P4v0yzm|=a%zdOhSNam{O=UP6kr|S|QuF^cp1J5J z*y78mpXc(ATg5GOSVQSIj^Mw|{PU%+&-`yB<+;2(#v zDwB_XqxoOv(T0@2)E|Ybz&3GCKFlm&F7mDfFnXU#V!J#p^?z2WdwHn$kPi}-dX zygM-K44~c}^ckLw$2sHGyMvJ5A^BL)QFtR`rs(P2L7->NFeg2|I|%eN&pH#*7on$j z2cw~Q zP#?qLJqq4v>Z7o5boC+G*r7gbSkKv>F9I*rhvxl^{6^jvNfuA3m5b*847^CWd=tEl zhNpEvKD_(D+iG}2+ChZgAHmyacv=@^(2Ml96IeTJ`;{O6v_8ndtM>XMX5d%>UfrV} zFN~+T-e;`=uh#IiUT`L~gGjuRSyc3xr>Av8KD^t&>oYu?KXcZ{e((;D0`C~sLW##m z&c__^rWu~r75UQF0ABkOo}Shh`S3Q0-jg10xO{vMywXwN?FDbuDDd6@Z|f-VX29y- zZg{p1$yv^lSy1ql&&OWNZn_;r>R0C=+YL|a5@$j?h_utMf!F-Br>FHvKD=F`x8LJw zostjlMeuq|FH5DNrPF72wdcvKX%85lty^;D_YClAO>c{>UvlDI3f@N3!=ky}nUG(z zD&8BwJ7jqK%{^E8ehA+713tgDt{D>VUGMep@#==P;~zWD7x1GMfVb*=uR>F0PAVdf7RgEfr{rk zpyH8U62;R5R6Gp^7a3dtR6H>tYoU@iS#VSWe-9Mh+x-G$dN)w?z6un*O+eAR*5H)} zR{}+E7Ettb2}SfK0Y&dgzkis1Cs6c$1{A$-14Xaf;Qugq8BqCI3>5w+fx5GBF|0GcOrYT)UhB!I%7X0W)BAqoHAgDm)EgG+$QM;)*nSO!$SKVk5r2Hy)*xW^zW ze7*lI2krz4e}};z82l>4w`!3b=)i<_{SxHWHqgCgkn-T9M=yLB*yg^>^9hLu+d^9hLu+dFydrylqm*JH5TV7tLagQW%& z1_3VI|0W&BQ5WHz->qh^d%rMv>qa>rM+AZY@gQ!p2Y$zU`IbHKH?-!KJ@7NWY50ME z@q*a{zhXQ1dXF6VZxe~%y;t`AyFhzL*#mz}@+xHy{5UBrb>ZpfGU^Yq2Yyhwg%A8A z=?8NDM*lMM=fX2y%A98Q!0-A#^(_Cu-}>v2KE`*M-44*iBFP?yj!c!=XPNzC3xCLatIi$1+MzQ> zFYt#?G5>I0aHH7+|Gde{L;Xi4W%j@yf70^PsE9ECWbv!L%Sdjj(pzeF>1UF?-}!PU z6DWJ&m-m~0;D7%r&@=p>8NTpjB)CoC13!3vzz51aXYuy~WlrEH{2ucc|4a6EOWy^C zANbp?W>^20dC>A3&R=dWHve~RK{xd_MZ0c2pM-J-gjRxV$?#$iQL zPuZQfZv7R@orh0)5O`tTdQtPGD3wZ6C&u!1Yu2pZz+Hrku5KRmfYK0;bd&XkEF#wK z1|8D!ZN2g-i*^3`6@#QVIKr1YhsbAW)EDaB1#%CTZD?8EbosKTRhKWjtabVNONlP6 zwklfnY0XuUs!zLx>XAz6pvx*ml;IXB#Pa3nq6)|nq8aXih!ZrbHWnd3*`1RvVOa)k zj)vJYLzJNx=+BT>`q5M8otkh)@=7mUeMR${6*cQx)~(Nw9+F%BuUiu&+_W{KywY~o zpfYjhADLihFXBW+2+E9Be#m!h{uMo@pn|Qe4`JEJ(k>88T0X}d?~*N_L%L^WL_-$KJ?%Vr^c1lj}_mgRP2z|qe zD&-z5LPUGZ82-2t#}c$|Rhayc@XBfYk;o@~ikc$YF_b)SAU*}y@fp&P_wm{$CD7exPnS>R1ybt= z(qa<$n3hhzFD2eS75VomYkaI?gAnU}zz!|#^TcZMNz?K$qY^qFCm5GL^+@J?B$h_x zgE&DZriZAJLOfFWnSwBwQ{%3A~Xuzo@kD)q~8saww1gyjg~@b5q33mWw#%k&DV9~^;v zOtABtOnI1*dE#vrg&Bz{j}*-2)oZhbUy=>j>N2#8Op`Ec88Fv9k!JJ%YhbQ>M1AIO z*ExpJKV<$%4~O`NadIvGx#AD|@{{v~?>CC`^7togw6%N;iGQp4a~vWw#NWy-?>&+t zlYy7Z1hy#&IG*3`SMM8G#Z|j`yf3Frg`8teszXt z<)0I8KX^f&qw2w#5N{-Xx<|6d=vjT_q$i$hpW#`(EE&p&?vc!T z!=H;;Jq@AvP3n<(ampft_Yj89Dc=Dyr#U_`EU1zju`|C-x!z#A!Bs$x21=G0)awb% zbmc|iPXQ|YG@!yu?xEm24ZiBo3#LD8@Kzveo07jX`&J-F3?=87`^U{aZtfbJ3JD@R z`AF-v78+3;m*5|Ndd%LB zo6NWP$v^a`ADTV%pZVCu=jj8=JjYM=V3dE^51GS9%$_j2Q03oj_RpHV)M#+5r*x;y z6Iu38XW7+GqWF8W>~23XxVq2e2MkrK5*c>==H4VJ=A8y23RSX2C1z|Z*f656#Bb&X zlfx#*yDo2TUUPNT70s<{q&DTU6)ov+=i|0Nm!{pC26Yuj_I870O`>Ah7afT_#na{m zg(z-cv}X0CE6#Ol>6&J)qiA!=Q*>+VgnUQV-%x5Bfv_J6_CI$&q;oHsupg@B+_hQ` zN4Ou_YIF<~bTb$*uB1(LEiT8A_Cwu9sMIKIgC6}pZLAp5_L1Zj_8Yx~g*XH~rAg=H zQM!TPNc*7zJ6HH;3lQ|ehw#z7%Wb6n(5*%<6xwzML8Y&c^u;~V43Z=5hjb1rbBl%A zPJu=10Pj^E!~fU(;o`~K57jbZzZ<_E?j>k`5!qTF#O;3=+cjQGwy)b4nb)Yn;C|>9 z!sOWxNq!jXRXu=5?7fq7gb0&iR5>{59+S%JfQSt!XEAK59aibf?FrWOcHCg8^qVKi z4v5HK3vupOoc$)orYE|8Qi2bNM3ze7^!|z1dx%}BK#Yn{g%;=KE)^nNo+A}ubG6B( zPUVx9A~CA{Rh#J%{wIb6_E$Xsb~-x09!^YOke8+SoV+)QYsip+(29^Y6DOG7VOjY~ zkFX@Z@&5lKKGt)6tV+X?>Je^R(C8>V#Wq{pQctN)l)g%l=wkgI9gaQJjTfG9WR^Z>e$MF;Qy7%+EW#uXQqzgCVyPVOgZB=m$ zfd~z}n5NH9<e=Aaqtp_L^JYB8|D%W-wCZQm<~}D?DULaFY>ziG+dC}_gw|& zvF*VGvaR$jGdK{MZf8W0FgV3mPbS?;w4Ui6;>UB`1}~)`R^KeX!lO7)H12Wk1!60# zB1j#1tK+e6eC!XIdq};sN(Z@Y5j7?}isdOjZ-*7W5v@y0{z(HeMGgK zv`^gc9!019m z_{ZceB6WyNXppUeC-kcJdPHK>Ihhk}?6Gu2dAMU6gz#tZ$JUb1T>Po6mVdRIT>PFJowhyu2n zOTPHSx;kI@TE+pHeBpb{KVSH;AIlfModH-TU-&-r&lkRwc~RzQ(vhot!@ZF2d$b|t z;||O4TkCy>`0Ku-%ybWi__GagCZ8U~xqtM0r+}A>KUD#RS%#;4IurP3k$dlJ@Yra0 zTMR8tFQQNSCj9yhZzTTSKEt!}AHo-#0j>Rt>t&yh;nFAmUefS}qbHtN^C;+vzqfr9 z^tAu#&qpu9fBYVJ#jp5$441yW;ME%5ko-pI>7CduhNt%DOpbcfJF#}tKW^dF4^Oj=)D13;ga_O@tX2(gSrPM`(cQ&WiR=y!6$*3 z>AQdme>+g&Zv_hf9}WJU!Rvv-|141Wx>qLrrRKlbV6DNqK*e{8!4rWBUkFtA0c8?+ z0I2wM4^Qw{1|`x)__|Ll{2u{@{}1MWvqAAM74EY@#V38^f=xh$uK+6i*+7La1`7W~ zgYPjYd6L4{eN5rM3>5z3K;b`Zu+QKQpyK&AgWmuuy!wK|Uk6lp@ud}hxxr5vTmTgQ zhYaq+!WdO@k8>`V-UH<6Ldhr1eSx`)7b5qO_|5&$Qt z34Su773EK_HhZc0&kO#(UR4(kKg@UEFngFkbzbA>17&nRB70aL=sdyMjsA&d5A(B} z6b>_5)3JAQb2@dQ`e^b%c|c7rE9#4Rt| ze8XV4Ov>r2af6!9o#yhPnu!J}C^cRu(V&}B^R{Xu8jNc2@>9AjNKx6^rd8|K`wW!zNCrB~UtxrAc$eEEIRhUA^o z|F_TdpUu_}f}QEebv4E&XGVKZ>3z1K5k01sg5uc)1-}u6A$)o6)h&0V-M?kaD#|W$ zrR3cbfsUbUWkAyuv32gC?j`ebU?jfxR-^YnnMa-B-CNXH_R~%y@x6ndqiz)xW*hGd zl)gUFccydEG(BiW;(Pbc@VL@fEK~a-PtV&N|9VyU78JV1`s{l^+ZjlNIG3`V!`K?- zd&h9sZx%nD4{8iMQX@X=cD1L7o(%S<8GHwJ2h)9eBBaq^7Qw(_}ypQVGJwS%9@ge~jVsG2$Z3%Dd^R{W;w#VDz-qz!7Mc$@#LX-cZ zxlO>AK|1P=TX7t;9m2M|;{gA`{HdlL31eRD^=nk6c1xRZLAr=LI}QsGg-2789Zum< z0W9|3_I6xls#8A@LRIP?+5wzVIEmmemXBqQB_;JNV_@;lz&5(-r?4we;boL{o+JRJUQ?6mcrS09~_@NeSQKCRP5h(I-#9I`D_;c ztij+#E_mxZ2wFtYgGV82Pr=%ncu<;iEQuB*RCu zef(@ohz$xGgX7jg$DiH8w^D}+6W8+tj@-kyT6``Xxd)tE`JUY)tSO=Y{M`J$D8FQ? z_pi$u+^N^|SYcDA^>nFz7EwdBRjG&F$=jPQU`^)=D(Z|G1#L5C|Jv@|RdrU(a1~aa zdaG>Umr2!F;S5#TGoVvtLO)69n-odG@c6aWsVn-*Ityn|Z}Tc=|7Ioap?ZcY?0IG6 zy(_m`eOYY2!VW4#)xce@#_qr7K38MO&TISJ@dkNZGMG#C2OHJX`AzFtn@aV&oC5vP zh$|U8B}wCVj@RVj^CNnjUui2$ecW}MlDO+Orvd0TTL3%$K(6y1o&`C<3koCi5%WuI z(t^V3&Z}z6I?gI+`v6To#8=fhKdXO?bN$0Kw-~+nf@31|9KUtvdd`?8$ep3=c%RH0 znN3ONdz8$H44Zk98SQV%FMM1nl1rC|=w{mE3y{T|;h$;G)C;HZPHJ+6A1_7!gskvU zd#BgR)~@!X^rWsz2s>@(9w%zt2HP`w!ZPiCJXDx;dCiH$*KvEdNPA^Zegw`~AGF{8 zP5GlR@AJLe_&C_S`+B*INza7W_hZFYERec>pSLBvt|9wvZHVG{53(n|dh8 z%1r~YFYiofPV>ETY1uL;c|9rap0w9g^Jj&>n7Je!xsO@>!4GS+-mG&f`qvTRyYay< z3g=P^z9c#q&Pt||D56?e3@ipFfC(TfB$Eu@3sFRoMETUalARY8B~!KhifkmwN{{N# z+EnZ6|FWj^6W3y5-+v&v{rxv~OPkg}ayG)ZX+mghbJi}`0HiK#=gL@f52rcTsTt*P zJuqzBNv~%^^BJ6v)qib0Krzg!O8t>#ftw_%=N*b|>Qw_o#o6Xx@ln?Cvu;2^Y_qDM zshFQds5;e8b%|>E?WQmaT33hlO|olYX|n6W zxgCdGTH^gajBUqHLvE(}a1*@W zyA|%X;d7JKUqX9vD)y+sBG*(p$cSqyU*Ti0sc2xX<^oO4=7HFzA2>_Xw3^NPW1GGu zOUm!3(zV;!){F*0Yd0oKzC2Nt`uZ(kS9NZhA;<=*xGMEE_l*J=+6S8izm!rncliv? zDsol%cgkR|GXF{ZRCyGPME%eNUXb6OP-t&bBKRFJ%&_})Bi7L?h zhAFh6<1@W$T3WTG%U?3Jq^~-4?Y`<%Yk#uyr(2XU+iZ3%>T@W5B^A1qF6;PPQhD3g z#YObCc=GfMi(B8NE!OeL)61u|OwtbL!db1$qt;BkC%X@p>-m_3i z=qzup>ij?LeGPb2)tUb&Ur~`86l`pX4mGudl9(tW5v?Hf*$L|r!vM1HMQ(I9iO^t$@o_c6yV5~1l+&DHJ}XH{%)k#(Qv5r+i?^qR%I5DX0w18s1}mey|R!zj|!SLb5zKzB!AEYe-QnT!cq=x z7w<3BN^*g&UFjTTf;~s}^*JpqmW*eK@kJ_aVv-GBl+4cuwzO%F? zCsuCO5)9uVjClBnORX2gnz2Yuz0`BhT-B4Nw)=H$C+brF2d8z+3N*YCQtA|HS6M&6#;? z4y;$F_j8W#N50Y36ev%wYYMb(@~AJG)c0dBhu{0^gYH@N`51&P)4dyCGvD2MyO{A2 z=bGPYe`ZD^`Sn-_`FbvSI$bTj`x>k+#yb2Zv_2Y|>Oj!Y52Ay1-8XzgXU-3{u6p;R zMh5JN>um>*1?=Si;qYP^Xf<~h!cd@8SkgZW;T#Nu{U}I|E(q^;QIHE*5b_QWGlunk zneX$D?But%BAbCg#`ygh1yO~wlQ%Ze4DW1Hm*~$?s1}Srv<{gTP^kO4dW=vgHLxAu zU*`P`Ti<~M%;><>DHh#u@-rx|r{w9f#9(S`me`Mvz2J*FD4cj(jgwHK#|*@F6$j+N z>5f!Gmwq!|RTR+c;~2b-ae|5gu1v7WTIm`uu;gJUJK`veorE>r5H{{Sa$Pa_TaQQI zj;H^#$S2~`G4#`k#34-sGz8SpGC+&>bKc_r34;mx%Ec2(XXG$B(2&LEKwZsR$mp#W zQw5$f@w#Ibd0Los;pZT?54#A|K7eQ1eF!(e(885hdKWGYhdm+c6j@iZ#v5#IZfw5X zJD1iPjAezoNK3=&b&xNq^XgQz1&8(Z4QsTGhQ>8@u;&l~wqea0Z+#8um_v)VCJJo< z^^rQ1f&s{xh4D_k(yJbneTe!R+EZB59I1g-h?=@OkzGBZKTLE)tS|aLbm%P(>;ev05QnpcEz-W}sUX>Qiox)OnV$ zu#HVJK#aMIl@V{9YLc2&ku|q@>tfAp%^IN5LP!qcJ4|J9G}7do=51_FQ`{1ZG~ZU_ zt%yZw)}jSgE)b=~3;h}_1T0rX3tJFN1+RoIh9b{O-Ki(uw2biAw5%he5gXQ||MA)t zeb^Fhu0cgV);LK=`)jI{jxCvvSg|xU^ZIzztKqQcWb>YXzIUbZc;=>RP2(VD!l>jm zH5;?YBjW|sQM6FYVooQY8i>>NOqu4Hs|~G)?G%hx(qIhLM7`^4T43fx%@|HE&MC}R zJ*9ltDq|}MUf+PZxwhuEm65BasX@g;O2)WjUYuG%bjI!+ndUG{1+29=vUFEw4r*xX z!rHnMuF>nwUt1Gb)1@2Sz6}O$8rIcCHh3FXem+tg zZSkhpQq?OQ3VL}d@-C~v8W&rKrByXyZLGN&>V>>&nc%{q76Z`NHd4z-6f0ob;lq^< z8-z@kD_-oy>4xCFDtLH#Z@=KDVGoqeu7J7c=RGjoko4n-M~7>Bx*>SO4^uo0{;0%X zH4MIbltxfb8QhTcFcVK3Jp}K?mY%L3zo#n448a>=E_~quSqvt{uRf;S04x8 zbR2yAIQWj^;5(0l?>Y{?Tk!ZQq#M#deaFG~3x2rqbM!cPGjP-yZ2= zp0|FAM8nko4r#c>=-F)R!%>{<(e1`BTlu=BW6mEg{sa}>a~(i7e*X$tIPV`O{iA{( zE`2YUKj~zhM=3I0vEUy=aJKT3xsz_V@!=Kx4?vSGKJ{YL4VQnv;8%erYyBl-X{I6N zuNHg+@w2VZlnbU~`q}#54^9a>@`q+Cf4AVjHVnRcGGlu@?4NAogG|(P=V&mb{F3~z z`anD{=igN{7Xc|ym1fO00i`K@EOjk$O9eX>s={f|JiRqQ(SYwC2m3tGo*8{3|W!E(F` z`dKgQew5`VO)v3DHy&;66}k)E={n>LW`NEobh7+rO>a5qa)nOz4_WE9IMN$woPB?! z^c>^j*%M6fLq~dL?)o~~r2uVj+Ha)tg+XW9ZzQ@X=yIf8Mxy&B=#EN1k3>hAg+nJm z_d4jhPk?UHXpd*d3D8{ux{ec|s{`Ezp_A8X)^V^6bk!$7_ao5RLO0TQei3xVCqOqE zdu(GTMP8R#%Qu~SaY=8a{#XLK!!n;``Oli(M$q*OU2=r+_W-6}~g)jy7Q{1NDO z3Z3lBhSZn+_#)^!g)ZVwFUxy!JQk<^;qrHk&l#Zei9H?e+my>v@8zJ23mx}w+2~l# zEucFlbVJ5Pmj3<`=e$-v{im5U@gMGC~y;CHCXs70Kp?) zcs1ZnfHMH`x|m!j@O*)F1ug?z0RPp1*8t8DNIN;q=WRgd^8z6Ac~;=#0v{2$Q{cY}{EonH3cO$7 zWYdelfrs0M`JHN4s4M z$aY%*xD4QpTz$if!`E(ufTf*#sxMDyjftKK-$S!ht>*MQ7tFCg>znZO?l z{GPy0fnO7t6u3p;CV^K1)*!t%vC&uzNR}?v?-@YmdmG?#z|RBXFF%NXcvaa0mclmD#d_~}M0(%7hyTE@ISO(}vy7_=M-~_<=fPciAQwI1F;9S6e0h|Z;cYr~_ zM!-3MHGl!Y%K=%wB0!dJ5+IVwKLrqf`5$3z#$WzB_=ne0KG$@X_a6jq7x+bi8wIWt zSS_#^k=gzi0U+E^w^C14x|hmjEO^ZP}52EgR|E~bUfKLM={*{kN_=6JuLka(egx@Fd zZa}7cyZCPrSTC?j;B^Aa0at;(OyF$52>f|~toQS%B;h{_!1N>;SArKNbV}5sqh$>j|hM$Mpon<+z?;1C9gq0ip;K zyaMw8;gnuX!Z?V4A6qTZFVHK{Bar9hr0W*gDKIXuTA*K`SD;5=KL(|WFR)W!Twt|8 zzd)}*kHCI(l8P^|Q(#uRxE$esqe8FR)W!Twt|8zd)}*kHCI(hKet+Q(#uRxE$eneLB1$GLI3#=CC7w8q}5!jE;!sFO(ft>>50;>i31$qSnsCcbtN6Kg$ zHv{cLf35_43;jgDxv#20z3Gpm{B%v??-qYZ{On)4Z-I6KaFuf2w^;Dz{QDZo&zyH( zC4O_h-7J1{o;?X^F@JM@O~xns&3Q2O2`E4IV|3)Bqu-o2Qs07wFeBI64ix3V&3W}N zfK&3}m@IVn07t($ul{?%oAdtyv>);2Je>Lwlpm9i?pCw|{a)qscrF8^-<%&8;F*4N z9{dZI4}Nn#{aK-pquuBl@Kbo?OLvvTH|M=CNPKgC{FLC2V*f#RtCTla`e%WZw-fW3 z?%xF8E&j>Km-)rTUnG8We=^$SC+ST>8l*S(Z_}mzeu@8)l*cdhMBz>>Yb5N7MTH32i%4g2A@y=6tbAG*7;+ymE+XZjV|JO-+<~*P4 z4%0XH3*>5~-`t0NS@7n5i)VSncS!l)lJ+zAhd?QOr?dz4jF7%U=nvyr`33*9q~9d? zZ%KS}-}|P-KPvcLlAk$`=UFoIG;ST}o&Eid;{fo($7Qvo&J6o{s1cG#Q(sBf5(OAe#=R}663|`f8K?k`p>!QN4s-Q`tP{fn>>+De5YefLbom#%@|X8GQV~ZRG>XqF5_Q_^Vh}iL+(Ax5RU|RoK4g$lDjyhlt!5oj96&Ae zpgh8f41(P*BS16vWCR83>N5OLE0JdHNoAA4@WaqRb92pYVgt*rX{kpv@u?azNc?l= zEP-VqCsIAvztOyz1*il}WdVf^EL9fPDl?cB&{fL}S1ApPK+QABQ^u6+ znss$+V2miTswTEZm5DhRH6tq3439Pu6=+^b&QNW>O1e4C!I>&Pn$j5x)=K7u_FK|i zvyPD)n{LzHnTi5rs%&!_YSK9%Ef=DN8MB2{5;`Mo^Gez|WzI^mVwy6iLiGSe(@5o0 z$xEB0%A{IPtWsscEo)d)R||_!Zj`esi`O(ZrP6a&We7rZIV}N4Cs`ytRkT&LthokH zQp`CK@TYpJYIGMMli)3DJXPtoRbH8WOV^Q^DwT0qJZeOjMaVR@XyxaLRv{I!miiPe z%u%8DqYX7{*qRKMR%MH)qOf!(Kn)g@M>uj*DWSTKAa^U5H7*1XDtJUuLC2#Wj}>70 zT->m{bKY zb<(_tsnFEOV@P^hsytIfdPb(gNQTjr@~b?Z0YmJSsg6n6E7KhkA_tubGh^MDG~=Yu zxWJnAHMcpfo0$$ubwLHDFqoku>uPm#F|KoPX2YWa7q5v#nm9t2)Hg?3>cIq^sxM-X zfJNL8R)ED#kw{(ExFcXgEgZdIJ65ArEk8@wMNxp7OjB&ELrUe4UXYQkvH3VJwyxGw zrP@C;C}Xf_Dw#uONGK*y)7ODoZOBf)KT_34P8nw0q(PlwvJA}yH>6oO)QncDkg_0C zQ(#yEnGwU`&4kdpmN+BONpsRZhYh$a*{iZCwM$u$sj>}AAY~g4Z^{*!1D-Ncl z%o#}@Pmfd6L|u}&Ne|}%&N|}kw_a1|{{;Z52rl~ty~uwGa9eTM%5O2m<2jsiED(R# zBC9g;+xO$Tl-xM=lxSHuT3Cb51*T*tAr%^gIOcnY>7@WUm2L(^vqN-FD0!!C1QMa2 zpzW)`GRzTwHjD?fJ&AD8L7E7nuNg9Epq^z?2#F}x%(R>s&`zN*%3Apl<`xd~iu_gV zNu<$%q7Iy{^;SSS6ovT|M6;|dKU6ik!xt`nFFHY02;$jR+g%6_*Va~slQ%=;Ny{-) zfmG<`XCYw*@zpmJEl_152@l!YJUiI}d8c4E1^tZ*fZb3S@fH+Dgp!YJMWQ7Kpz{GH z7Y?cTf#m$+gtFOy@~6aa!-+R_>ZL6{t8L*Rlm|fC6D2+p!ZRwfot4Q==`8`)r|T0f zg0NOD>vF0}0d7=985dbSjF0n(Kxe^k&(*!FI;)(ovJ-O**` z$%o?z$7o3RKcw?^Agt$Z6Wi`lT6Yiz6X${vr|;>egXi!`#iv|Z=;CA^sdp9<6a+p6hqvH zib6?w?joo$pIF{qo?Hz*{<&ke=HRTTXt%ZHUyv^G%W|netY}YkEHs%vJ#ZevHqRfe z^qeaV=TwhgNk!^Q_mKcUXqcb4v{!38S_5@G&|3t(Na5rR2)3FvC^jF8cqs1J%gmM? zh@Q&47D6=`^{G!RPc2tg5tg21-Rmb1uLcmZ3+{t&qVhSEENzF>`A+D-!o1{ix2d-* z=?k{~(YkjB7B1$6YK+-|7pS%6eN+yru%!Q?-=fb>`g0a0XY_}XH~FAn3q#2agOkvi zBGHNg?o_HF;{*hTngr$8ZN!v7d=zOo|q~3D)Gw`KT+`q z_XSJ;!)lw1#puX4k&>ye86S2s$4=gYCFz=CJNYo9gxdqN?Dp$zJ8|1Atu?E3y)Qb> zZtbxL#$bH*U{PI!rnr~Hc5;^jrN0bWWrysGcDeF?4%eP z?e}^b3Y0*3B~T@oQWEvkaB|a5r4-G&_f=FPSn_Uaeb#!>ro6=|-(siKB5)PQNWj{p zGT?v=PJ+6N4y!2M1>E}eb~3($L{KL(5K3;UFr)+LX4D_=3xlzf-_S8$h#eW2BIB`S zutaMMa;5?0Z=urt*0w4%(!iw|>7g3-U3)u`b7*is6n{abVh%i5Th(qQRQiOq&4*}M zOMK}!Hcwe+K$+@b1TC) zAD*SOG?|@GD6tPshrJQ>b^Jj^2`6f++3;4|8Z@Ca{*l#q9-;kZzcT13EA}gCy$?w6 zRUARgg?v17juJ$V>?+&9!5k32%B4bCYn{sSb;z-iGe7ME^ zBs$pm@lxQ9*J_>0g$6@C*NlHqZt*Efy`*4u_my;mB$V7%(1|3Y<3h=M_+Xd9K+4%5 zO>Heg$!`{H1!iCZ-seVXjEsjjk+qTfXNH$ZDpbg%QcG^#fvBOxwgN)uzAK#QWYEC$ z^27s*HiS(XL+G4@=#&bR2c9vMUo&MpLRxGlzN^5cj{>0SyHWaGSK{BmI^ceT2XqT} z+ra&vI6rYz+f%N)?8_Rr4!&Ih;;6al8I8MDxt}4DaMmpLogXnQtYIwWd*|er`q8oJD2VS1q}|B3M;+{lY+bXzu@%(g4SIep-q@ zqNVr)(P(6CQ&h?ELtI%7YrHj(1zuNJciXy}wGFjOwwCh6j&s0aYO;7qUAuUv#=_22#D8sbz(4W18L(`4Uy&|NTk~$h1wf^4yjCV=K);}pKXym(w&c!%NDAappuA`7K*Inw=Oc`2v*Zl{?X1t zHn}iA!s-5uUpBcd|0sp_90JHDm*(Xm6&(32vZkM-@h<>mjgRjlIv!YLi+>a!$8>W1 z1S*%~0S(-9z+@}GIiqpgp_z_2Jm+b8120iHwvTd#f4V$Veu?y9{NhJ7J=;q;L!X5o zeOI<~uVCVy8uJcWeNg@p$Jagpm*S)N+~ncl^Kp91s(B8$S)1V0F3jN!sZ0ZF$4knyO!kbd&F;_u2O zCdVWj7nChV+v!lmH?g&NVypH8~HMDgk8wf3dTzSGM!BVxszi0^8qmg z3#S2+4r#0Ken2EKwp(DQz_`F_fqsErfdDGr9f0I}^UHdBj`+REl#XBK`_5J5_L9qu;`FRnq`o1z|TBo&kXsOmE~EL2kMAb-KyGw1@G_=Lo&7dvs?RR>#1r zK^k=(o^^+t!kVo(0hYXca*^1T!IdT4@$NBa6weg1HK}{d zvdGHVYIBGAU%kI`AN&5&q$A0BD)3U2rHiR? z&CYPVZv>ZAD$IQ!dQ=kHAQaU|53itM-SO@(>t$W7mJ|*lJ(g)FUP@9nXK^vwBlT6Q znrqfZbOd+#dL_LblHM$|o3oBczFtrY6yQJJcjzSDfy@m16Hg!V$DgMYFCU(VAYSVJ zlIiisb%%AAEb(;W&V4_DW9N5pK9`*9+i_CLU<1xf?8L7RGgTr^9u6_u+VV@#gp$|c zKx}D8@?@L?-MbGVusX81(werk3lBF|Thmr_LKQNuC2p?A(Qn3is-0Yb^W`aTwcb(b z*}MstgWC~hZoO664TI#}frr`cG^An9PjOgR4aM0wKwk_4u$x1^cjj1|%ZiU#m9+D_ zKzR#bUwLh}wfq-W<>OZ6K^y@G27hJwR&-jvrCrLx#@xzK>;74x(tR8M#ZI!|b~3iz z)(5&g!Ci&TJWe)k#|f_M{z~Z?#r-ezG2;~MFQR0!JXrvR-I2afaz$==a(z9{tvAn~ zj+%6-rx~mhuGs>E%lww_u;qIzlni>39^Ro9;_%#RdtEgr%(mdb`~ID5Nu+4M>Ws4+XJKQ_9ai`wO5Ur zw%6X>KRR?0VxX`6eRg8bVZeUCqku;NkA-;ieX`xUdo(UdyrI@^f9u{4V>IlW+qM;j zuzclRX#Q?k9kzVbs);tp8@LLm_s~F0E96)ERh_qkR@Ip$56_PD#n7265H*5^d(Uo< zD2>AFb_aFs_F32Ou__hbGzFR5ankYxp_vXvFEaA;*+xN226ECNoY|5Rq* z&-w*yrdySNvMP^S(_$DiPw1ZI|Cnlq2%F*NYQ*@9b^S4v3NiLul^LKPX|$orc-`!`lD)N%;NlZL9A$%6$8jQCR-K6mV=q?B_^g6n={Hs>Iru?8q8r|KG9~@5z`m>dP)vEKA|B_2C0rYp{r~F7CkS;UtQf$_; zos0VAjudjYX8EAlI}r)a{#g9R`SRwO5v$O_bP}GweSYipYejI z6!zYQmjfawpY1dr{;8_6o_xO!AL|teK)SI<0M$7TJao6?N5ARMAJC6H&G!t+cn)LS zPx0XJdT1WY>3`gXXE~ktLYE(BT^aalm;Y~EeiA#=OMNk`uhz2Wn)M99Ie|#Dgjy;Z zZf%S%XoQmEp_p}9!*Q68QgRtkaH(?v9)*}=0Z+Db z0X2ra$P5l=m!1t6v%|SOuf`ZV$;NNa1qkU*l&|?+ew@NFJy`_81OOqnvY33 zn0w0QOi}Ywe3{?O46LdWKIxK~ipKrjtr`Lt^({?^^jJRQ@EM)qj>jjR%Z7#ft_B`2 z(sMd@lUG%ZY>#)Rq*p14^ddbpp{L_B`rF=_HlL4oZjt**9V0FU@#gFF4kJBzCu9`y zc;^-!QopS%6kO-InSFpYuwG;I{{nz)=N4Pf$Cv;vXBv2~Q3AwEom-H#n?Lpo&hU*6 zPCT8s<9D1kg~pcD{3tj`7;0~*B9M5OJeRNXQ&*cBIm~PVkBs5}){n+o+g`;A7kK1! z?Vn(6Q#{&_;F^f|JZsxNg}+Gqi>+-`lo)uVM*CM<+a6H<-Spq}(H;P6+m}>O8~@++ z(cJ*nw#_Q&Bs467P6n{H-K>Jf;l+la8~|%ur4GWog+Tz;HgakN9vO$3!XN-^+r>Jq zVij~UfVJ&h6*RG01)Tw4ZKJR->e;P=#sXN|{_J7U>G6}8)&u}++iNOl42B_s#sXN| zo>4((x6e>F11XpcJ1t`J{h|Gp57`YEY-AfK;PL)gti{?2?2NZ>5XFeTXN^{LuDs zWR5%w{w=Y?7%ClIV71+knHvBHu@`nwn}Q{S>G?%_sJ;csDSsxT<{a`>UxJenSl!xK z;D>3@!QRBYoS0^;XNjIAA2JwM=jMbG%L`_exBW4k7>GTpQc)Q!=o!tS2`mShNxIOYo}Fx=nca4%K%nlavMG2ZV? z4|i>r4WF~ZLg%@rji~Y_RQ1DgG)^dEIFDTlLqm7M+!Swp(Mn5?>eT|ai8Afe9#v$CU)qU1 zngR#-_iF=eT%8>4;XX&5CFiKHCLzEDm}GX@&G9EDF~Z;9TYq zj&X3-H63=+U$u(%guMIUGXrLB?hlk6A^%!0j&W zweG9K+Fj=D@mmiKPJ2J-eKcS_^!~IDN`GzLw*Z)M?L2Qd0Xe1Gr_qi(!nMzY6H9m6 z+wIx|FxJ@_`1i+eyX@QKGYxjx4aZ9F?ya#Q{s8v*9U1KvP8<$d|FYXIIacy?=)I#b zXl*Cw`5^Uh400`4siWS^_6?U#wYK~-dn*~rvD*&d9DYz)xV{NO0WZMFdh%*C-_^Tla<&=h5`!g2a?#<)zP+x34|P+GgS4 z0NHohvxA*>yB{IH;o)TKzFCe7l+5~aJkfp{2I~iE0A&n9TsZZho+wB14u8_l89b1% zb0`zBFXu)Wl1}W`Px>X7$#+is?t?O|YcZ|mTo7^woX<+m;IEm_i_Cm}i^bBs|7Jd$ ziH3J@##}{>v+Pe(#xPlJTm~VQnS0Sovs62Ve&4StXxkVP18?iqkd};93#7e6Wz zK3u?I^N_przkh*w2Mdf@L!Q9;;y@1=x+hY}WEtX+*(_z;>gTM}~If>v_ zyLPvoXxo4p#tD=fPo*ze_f0_tc0+KhUW739lInUz-|Jz0QcD#?EO*beCe||*6xzaB0KS8KY}?Ht=!4fe~B@96UXGlrMS}h9j+j7BXL$Y zZenmdfVbE6co$Aw(P#PaKIF9q?tiA0$MH;|zWeJ{7SmtE__B(A8_avxT868T3-HE! z*1EqwuQ%V73!wfK&k@r|49e@hK+wv&EDMD z4i)3|C@!L}{}b+qfcq{Bg9?%?9z6w!y=;KElF;n4?miozN@bt^F*^d&djGWDWn14b z^ZpJO`k2|lj!!Cf#``J~~_Sm(1c5x2@ECVn<_u!Gui7iHo&jER@ z#iV3EV3^qryVWGWMA307tBf(gJHp8V%;s0w3)J<+GIm*8PT|r(Z2JuM)|ej~)WCIi z^5-0`#;vXe(*k=k5++rnW|$h7%;3AtQR`4=of%$rEH#t zHD!lAs-2U-D*6Ma$zkgYcVTT9C{x8vueVrRRd0=IjUodVy_XSLc@t-yT_lyb--*}hTlJ6v42Osz7rpYl2;V`KewrG zL^ZN+>X!m@Vw-yB`xSHefA{zQ#r?fg4itPhV3LA)b%+xuf;$0o*~Hwo&BH5XVz4`e z4=)65$8G}erA@uybIHL=k&||9H}+hZwft&)!7AFTz8d?jqW&RYjgRZE#>cp4!H2F z=|8Ogo3@79udBco4j+-+)9JN6y{C)oJzWzbq}F@x=bquB-4KkM{aiTtbM=-zw~TwR zV_COzQ+~x+sh2}*%e$D%dj5w?eb$yJ6NIomg{0r$elsu_%o!NR^-=3cu(ljTjBxV2 zP;y2AHebEb3-H$HPI>~RWd-A-`B=uI=cwHm_V49g*nJ5aXEIc~kTdX;a5BR8kKMka zFZxgXkKLj=FLCS_@y!_Gm#Eq=LPS5g+5J(06c7*l#d96&Ig?H7js1|RqP$10MuVB> ztJrvs_m8O^bPA{sW($mh*qrh!cGK2@8#`R9CelSIZ1b(GO4r`1zI=Q3@N=2bGSlC7 zrhG5s@EXn9x(DCOI)m~Z;lzb#7`(6NVsuY=GCX@zM|u05_zn*0ZD<_ZP+&Slc`x3MXUTdPBOw@vcDUD1HLUW-{0G50{o}BP};JtoU!2!c-|2)q9pSH$eCi zQj8GOYq*^X zyfDx+omadMV#;QdTkA(S9a$&ghQv4b^+6!B#rKa=@jQb_CmVl;AD0<)z4&F5YsrJ$dc4*HnXUXyWQ>5jc$oaVcu@&A z5B;32{KN6z6d(?-R4c^pj-hkQ;gPNkKU?THPL(r!Hx4^XYk)BJWMsVJnr1@o-6zjI zU51&5>9MbR#qJEpt#XFWAy@b_AdU(h$8QFm%bv}2AYaF?`!JR-IF4uKOu8<4K~;bB zM)eU*pSpiH^b%dwA9S|R$vDqiuQi~n5W1-n-(7!}^DCgM6grN36k-Z zLeKe@L7%0b%R%2Q^0AzMBhlZ0TVlwk6kZL8`_{r2aCuDs1k7K;4=@24&I=;2P85~` zGQ2?GWI*CSM1>iC6(EW@xj-Q8+t6Ps@O**i0HSD<#|YemiFrQae^21I0U57e{M6q^ z{N)nfg^5A@KZ6T_`3_*cL?0AB4+xfy!ahKd$Z{^g=RL(Ek$F-%kT}0g}EG z5UBiBfW)6A@b@^GAsy|fF#J=1tZx?*^8)@oU=HG~1Uv_RKOob)3=j+x`JV*DdR9oe zQZ#MhJ6LcC{{V<4FMJ6QEF*>F=ld-9=AO{7@NWQ_-)um1Md3`q^8n8U#88}^Cvc*` zcaa&(^(r9JDf}K9m+?6k;POiVan)CN1|aF4Wa9xo3V0qM*H5NP+m3|a71#!NHt@{? zR|8IkzZwwJI{#`wrgu3Y^Su(8eFkur%GQ&Q?p62-Ks+mZ9O%Lce)!RK6G%56uow_c zKEVfwCZ6C0M3YTG8-bld+vz~LCZMf3Zq%}fEGI}g#`<-6#(D*M1ooql_#4|Tuv1`M zV6{NMK(9cLz<%V1$Fbc4I|arCRtxkC^a=z}@yNS40exclm}2zf*N^hi1@WWb>~|g( zzuDjXo6vjF7<4PdZ{FXN#c%dA-vABMiwpe)f;aDTwhQrQ|I#6NvtPMf{O0}spOT*0 zuK=y$oBc^h=*|2762Y7O3E8cfpV^NrL;g;F%~yd}a(nSMVyovsx> zcvEhX?&p-hz~$cyVkbS=T{8R)E_|!Y|3er3cU*YCD?iFvJM;UZD}Kb~f76xTnXdQ^ zE`OgZK3T7v`JLmUPw{1vJ5n_EUK5Knr-f&=1nKIvQ1LMoF*L-XkzR?sic)u-N_PG4 z!^z!>q$#7OHNQ(ja~ortAyx^aGSC@9?b}M(b7);dT3@_Q$Q5vHq#lu>%{x*H%A40f zw@5~tfT30Cur`{)p{aO@R>Iz_Vpi2h)-*+$Jyo}`)pTm9Fo+}9+k!W`!l}<(D;-Bt zqH|oeRE8FDmQ^Rl($Gh0(IB3xvk6e~(<;SRL14LgRYoX@Xf~G z%eBqp#SaeeEYDWw#89E>e>Pq^bY8}RGkz|c{NY`r+==q{-pLme9Mfamdc2|d?t&*y zU|fnHcZLpe^W(-P9VwoN`w}UliXh9NN$$A(t{swIT-t*B9j4*KOIY%7CXe(+meb8e ze7ac@i+V+zWx^h+UQ_7*1ps*OqfvE4Mq|5dMgG{2cy<73qil$m;&;XSp6`71V;TAU zah>D*A8b8MpW*lz1Wl78%MSe+bcD zBtN&F%z}B;zBw*5dr3iV6ep^W+PnYYwcGllW%lmFc<7DJ#tHJ~(cs{Wp;5GOrro-! z+Y|jX&W+3a0#;GDAg5(AWQ>AnpUu2W1QP`$aF>wH>==sZbrx~x{jbvU++-&n!yOEo z8bZxDjE2%wyC?W88wW?P(WyB6JA}i(JUIl+L=z@8d^ z`Jqr^ArrtZho{efzK@KfyP$mTHC^PtN*vz&7QXY7u-V8*qodus6F z?k{)ph1kUE5sTaR@=h~iD`XZpP^A6~*1!~rdr()TN6e7%!WQ&_#YYWgoFbc{ya=Q9 z>FC(d>}7e;MUGaSYg+MgUWF{n7 zxJ$J?R-N3*Kfwyi2IkK_j z%F)UBbu5mts9!NH#KUZdh!Ag1dm!pbMw@|Jt}kiFdzr+Aq?DpncJYm zyl2aUwK9EQoVk7v9ltx#gjt6!Cwh8PbKTWqn&}~%x&CI1<{|5^W2k0Xf3I5{AanUK zJ9!gk%yn3C{g~`8aF|x+Mk}Gr-QN8sn)Ll>STDSLqH{SmbI@$p&9I6dT|a|fKm9jN zw~7v}$5q~0;I};MX(B&?hsW@PF6iF%r>YiyA^=^jWr?F0rfja^+N&v)cruj0T20*) zco#qkb2rxfq`jPPJisunwU*$v5UUM_vRZx13fML9U~Nud(YF(LEy(my?>4;92F^f9 z=TadhL5FJ=EIXU=0?cHgH18OARz^1< zROlD-;v{EhVs^a^Ak!}~!;*e$SAU|e9eK)*n*KmZjFan<== zKLg-?g`Ya_L;2|H@T1?XFZ;xA){DOrznTAS;y3g8OYrmj&#WJx6+eJ-Z{a`jas22O z;YYvuDE%k#`_ayH&G->-))TG^5|wDrkBGuwZmb1Ccz)YVUt10c>-`0?bg<5;ZdI;CxoB0ZLACnh4+LAs12 zk9QvBmGV?dtPb>xvyLc!y-rsDF91+o=Q@w_;xgj~~e0l#PL2-92-AbL4aD3G4&X&OB~KgvujGuU$bE+NZpw*XWe@JLOZRL% zqS?4u0kzRpjAyFZLssyhoxrBQGAEp9%7vaRa|qFO(!j|jlxa(SwUhsi^+CBZzTXG$ z=|sXjfYA69{~~3|DOEIh9|^3s=kUKg*=Pro5l^t~)yu?hTZ_7<(7&;8=q`y#gE!jV=iFjOMWLu>H>rC8Grp+rfbu+F%gkHVbp?p3%<}Z_KqQ zJ3h)X%fAPD)V@{n;R!+xn@Q_e8|Hf!pJYK;?I}*BJ+EEw}babSAHMyJ?0J^ox4A(XhAkp^zj9eL=^wES8q`S5n23`<@aY}+Jm%;}k{ z;tiCZNCZ_3e50FKls(4b(zlsqs`oX2B>SK8XZYG`B|2&6wqJAdUGIlZ#yj>5^WB(6 zCJxv)AAp^nvK)TwQwnY9_jKz=qc)AVllL&albRrE2{F}ob5N!BOTPpFG1b#?HN2|} z=;1`dGsa_T{NYT=R$qt^*v2u%2jOHP(!da0i#{b={N}5t^Fw?Yzsaq8EGZ|gKt_fS~%Q2VCs z>T~%0vczxIR7wVa1ku(l6Oml&u~Ak#nZiTKdztP@0iGLxo=3K^P97%?wNED&VAN7W zv9yYmYTXn_ZYk(M+Tgo|h`}|*3jZ$7Dmn(Q$%P_8tWm#L z)P@kJ79G3LBT5zI#px)6*W_*KHbl`+KvATkidy`RkBtk&@5JZ)4T(LdpHydBAUD)g zR#1(!V5Fq1ppp-*@1GnUPm?7q6sis(|9Qm$m_XTv=dxsEM|k$yzS!r=68#w5wqpf= z*eTA*a>pFNe!waUD_C&vkW0DOxpi(s%_`U)d@}sb%V90+PQ845`3ExOV zUe#qnd(d= z(PI{cBS;ID;oA7)Ko2*iSet@72IHN03bbzWcs5Uis7w0&t>3>_9OA+4vxCcW)H^PSPgC%({8<%AHS=uvPrpJf-^)P&xvY{GP@ehNe@Oiqfl-%s={nOA+c-AG z^V(A2OwN}wZ6^>~H~oB5pMn(?>)#G;8OGun(b15(4x4`m*#ijnQ?5=5qzb9~BcRcn z{iAWJiXvscA5H(@5VecZRq>u3{Dh;QAnMpn)B`v!robKYhuDV_JA{S9t7xKb$L0d= ze#-RtVtrKwN!zPZQnh>~fK3s4>Ov(9WyT}w%Lq7LAFRkp$G{;m8m3>@p_zTF(r1Q0 zMbCIPPaT?HI;+DvD@}P}#&}HUr>eq%#(psQ4ek%lj(IkI73IW8M*s21I(fzOxNx(v zxn_U7G58ddM>HspuuC7?_-obwpFy=!{cR`b%R=!6t)QiP`eiwRelv4EtA!4y4OkQ7 zS6xK&)h!n_!IDkQMT?`cy4#jDHs5^F+{W6*mWwWFt}BGW_2_MdYZ_Lz6t*|VmiYaGm(RN)>8ptinlZp+;|DiieUE}BYyNz>!_C1j+xfCrKKkY< zs-g9368sUQlP!O9{?v;2+448%MUMlYEq=FJV-*i0OE9GVeS-fG<;WJF=TLO+^J#vV zkRQHV?C41UVG+;dU!M*dOl!{}p<_QPXXspf#Y{Jf-z>4aBmFugUDACMKd;b9{|=#J z{`>GVc6`{+%9;GL@WuZL1cxPE_PcV1K1+EEkmgq5gXTEMpcj5~mNyJK!!Ir4A!~Ul z-gQXQ|ibF~M{JsM@$F6aKI3VF7E zo({UW&~ZE|XVP_*yBCKR=(EC80LlORH6+Y);xhq}XW>qKQQ_#LumcduPW}QQ!y5qe z0c!xU5zQ|L{51Si0H*@}M~>plQ4-@QLjFGZkz`>tAo+o5kLOc>^9An5`1iv9T|k_z z6@~zbzZ~$BfJNe;D*l%-ATcKjdjazRzYoZGUl+I)Fc!UCqkm(GfQmpS{K(MeEeg=?y*=GWhk9!;-x-b8yqc#8bR{&YR4kV5vrz=+i zGT#+|%$I!j_?vu{z*z#{Mkb8+Z9wL`4UpwtD}IVZ(%*~B&I9D#%T&OJ(5a;7+=I*i zGX9Y+4m|$GRtxkC^a>;re`EVWPuMN6Q(#uRs75@B4_X_=Fh%*M=YcW}QSI zt8?@|l%I~W73!QG{YQ5TXzBMWpU3kcp!3}QTjDqCGCwGZH;z1E^!H0Z6CnL&o&Sya z&3l9A@Wh*SmU?^XKPvIv=lJtbUZ7L%B0M?$Yg~BRM{?rb_HcL{;Ka{&rI+K1f4z(T z7cTsVuK4XPJkKMX`F-7mpY6gQbfq`b<)?;lXL|Rz{KPr&*SY+cy6E}I>7-BH3mDrp zf2FM+vZ}6ZfWTzP$@zQYW_lDetR#_U^_8m+!?en4mo%4fni@8Okh6oyHXWeSC5JDV zXj6uPv;iX0YX)Gl2B#`e(G2d`hze1Wwa2L(*XZ0;=;3Zncxwb(Jr#{DQKm2#=6F`Z zs!+PU>*})MGB}dmW`#_Ivc`pt(RyeE_Ea@Bu2&4l(irJ`8VLwAHLbZVw6-a>rX}L2 zqzYEnf9i%JL#x*{HY;itV0a@%)R(+w4UACYcEMpYDP^z7lxZDJV%B6bDYGkeVdurx zDKkatVku>ihWLJDlQpPF*cw zX271~`+xihOChzFs(FCdhrZeH@CY@apVVRWE#Fye4?{V*gj!C)V5+e_VW0D;xpVToU$>ZGzZ4l~i zNpHKPCtlv+)SG9*0{rk^9m1d7CGF$Ieu4XB-u+aN4vt0UkL6?;T}^7c=FyjmNG`sb-JWuQt7{148?=f{; z{vu_Oxl1! z&Bl2jc#TyHs1yeKr)nF*O7^4hb7HVq`TpDG_|-eXF}poW>S4xKY#2ipBC>%-eT`XL zh?O+fHb9cUPFd~s)_9FIWkp(qPRMY@@MZgsWjNhZ4P6qgZ3F(qD$E)tY`kpJs#}S=*&l&$;`<|nn z3zHtkho=G`zxYne@}3)6?|ikSqpp7tJ&po#o$p0@d>6Rg@%SEgN_zb=2o6blUVN0Q z^6A|{D%s<`=eDbtx8_w~B!0&`-$N(*p4*Q6`7L)0AGOseoAW&fl;U?_y1Dpa9(`=b zbzWaTai+)(isPJ@c)kPrY-rz3X`CmgZbGZPvv)F2FMha~_VN4%gS*neSOBHfCw# zq%!Y8rB|7X%FB|gz2u3=vy)Xm>It8%#BF{>9b|#QgRwWvom*PY!>(QA)f^?bEM4Y< z+VOOLT907q#nB05DS^@*5JFk_VcfrG-eXZu8ZYUTcJaV$C=$ojYwc0!wwxJAz^7D9 z+q+*ArOk<+a%h@{($ca5@4y(|;`!{_L%8>#WKfPZX}7)mmC@yi8RrJ9Gt17+p)y{l zpioBpvHawRSrAUn_myDhuqR!9TNk~XMaQlB#y1BFpv)HZQ0qyfda#oXjtvhsMa}q~ z3RVubs$xQk^MUQ_=2LO|Gx!7`ScGj&47y(b0!>=JP;Crld)K;`hK}v_DzHO*6d;>< ztWUKc_ASS-O$iJxWu?Q3JC0drLfk_4)$efq1$~;FN1k1rL9j0dV%(=;xN9xLP`w#s z@-G4#XrDKj2zG|raTNtcUOho7pzxr>pyZd}^u5jtmO&fW0#MS`6 zLT-2*u9qg3>UOsyDP0HSaK7_ z@_OvI2^fcA^koqT4scvQ@OSd%aciwBjRpOIfo-Gpb&CJa!Oef!vRSYsZmZ zYJO&x$5D<2%HG-vhz8PJXVq>LvpZF^4wPpU$^)&UPp$t1TC98hL{%!q@Sq9;IW{TC zGp>RdJ}R{N{G6TKmq8RPr+KXPRjpzigX4eP$$nAZTIuY(@_031wtZ}q;3I(9_M!cP zp9+{Qey-$**Baf>{3T>IklFUZ)q=lVMIRc!Q}D52;+y@*^~1!Eb85oLJ8?+)I*x=!zY z1Le$q-SNG^?|^!t<9JZc&^h!peFcavp_?jXseB#j{S3IBLMP)R>-Wd2pz9PmjuYif zzOMV40w5=$l}!FJZnCC(1?YMuU5+2+Mo4!J=<`HALdMgObeaEGKvyAjslAp-SF$19 z&pV)(J;R{CksHxs<@V~Q#L zG$`r>q{02S(ochGVmGZO-GpwG6Mthn1;zzd3-k;03iJr<*YU@83+xma7g#OOFVHIx zfJuyf8E^s$V!mUpq92HUKswGf`pr7~XYsQfbg$v3?t8@FD*jIK^FD)kvrb+kc(X3{ zh~KP(j7EC1?rjjiU)Cw!zYuTMy*%-ob*>mVevcc+{W|?#38)o+llXnWImkVJm;V9K zIq_$^@VB_|=eqFfd|iJH57DZkgPlSX4(hZBh$eIBQ(2smo+FOZv2sgGV>4timQa7> zV)cj -#include - -#ifdef WIN32 - // For alloca(). - #include - #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) - #define CP_EXPORT __declspec(dllexport) - #else - #define CP_EXPORT - #endif -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/win32/include/chipmunk/chipmunk_ffi.h b/win32/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/win32/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/win32/include/chipmunk/chipmunk_private.h b/win32/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/win32/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/win32/include/chipmunk/chipmunk_types.h b/win32/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/win32/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/win32/include/chipmunk/chipmunk_unsafe.h b/win32/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/win32/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/win32/include/chipmunk/cpArbiter.h b/win32/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/win32/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/win32/include/chipmunk/cpBB.h b/win32/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/win32/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/win32/include/chipmunk/cpBody.h b/win32/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/win32/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/win32/include/chipmunk/cpConstraint.h b/win32/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/win32/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/win32/include/chipmunk/cpDampedRotarySpring.h b/win32/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/win32/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/win32/include/chipmunk/cpDampedSpring.h b/win32/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/win32/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/win32/include/chipmunk/cpGearJoint.h b/win32/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/win32/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/win32/include/chipmunk/cpGrooveJoint.h b/win32/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/win32/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/win32/include/chipmunk/cpHastySpace.h b/win32/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/win32/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/win32/include/chipmunk/cpMarch.h b/win32/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/win32/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/win32/include/chipmunk/cpPinJoint.h b/win32/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/win32/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/win32/include/chipmunk/cpPivotJoint.h b/win32/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/win32/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/win32/include/chipmunk/cpPolyShape.h b/win32/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/win32/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/win32/include/chipmunk/cpPolyline.h b/win32/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/win32/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/win32/include/chipmunk/cpRatchetJoint.h b/win32/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/win32/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/win32/include/chipmunk/cpRobust.h b/win32/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/win32/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/win32/include/chipmunk/cpRotaryLimitJoint.h b/win32/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/win32/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/win32/include/chipmunk/cpShape.h b/win32/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/win32/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/win32/include/chipmunk/cpSimpleMotor.h b/win32/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/win32/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/win32/include/chipmunk/cpSlideJoint.h b/win32/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/win32/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/win32/include/chipmunk/cpSpace.h b/win32/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/win32/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/win32/include/chipmunk/cpSpatialIndex.h b/win32/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/win32/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/win32/include/chipmunk/cpTransform.h b/win32/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/win32/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/win32/include/chipmunk/cpVect.h b/win32/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/win32/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/win32/libs/Debug/libchipmunk-2015.lib b/win32/libs/Debug/libchipmunk-2015.lib deleted file mode 100644 index 44a950de2e4bf2c6dcea20218203dfcbe15e431b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2641300 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

  • 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%0Dy`jMSRAm~42H&PM zjFPH3XDR@ESLOa!VkkkY_g@tO!hi^TM;#?2K#OGAA1DGpBm>YAf-qc0hEY;A=S&BH zAEotHX!3qk5up3^P-^a=2smH_030WYKn0{ATuz2jQWdX{1Hdm;?#~iKC0f0oRRs8& zf%l6Zfhw?Mf1?QemJC2!2*U6|WEdq?@m(GO_+45*7){>qDgw=-BJd|gpdA9!qFdzc;Tx}F|0ZX<%MWB8%04H()Cy-$PplZ&!4giXz^^?%#6{!f6!n*$G zxg%CWv%66QP6i_Y;5bPHXsaoNX)h}Qpemly06;_6Z6Gnwu2HXniU482ryCl&uq{_& zPXkMKcZ$I7$pG|#APm#iO9DXEoU;G`_K?cI4( z>|PWD+Cm8kI8G7++G+^l-eejjRqRGPr>P$4PRk7E%zNLe^1I zHRrT;ySfKT6w|25J5a&kOV@2-{K!h4MAN|$Vqg!i<=Xb;;GhsjygP$u_DCJIw(Z*) z19!t~+cThvb>>VuC@il;XJ*SO{N>3UzY_9rcoqtBoT_-ji||)T$FD*YLZK}ORIwoV z%K=w|!{d$Q9Y>6L=AU%74Ry(E(18rcNxEb%q#%3^3PMIzJPii2gI%|+>mDTW%>%(X z)b-lZsfN7}hPRjG%c=)QG&V9`Q@xhNk8lZi9$sKr*-|K?H!bqS`xczcpXYmAWtbfO zx&;@Fe%*r8qF=Y*wCL9@I4%4*A5prFy!o3RI~#qmnYdXohMttX?|`* zN8&x)Ln%`9DBC+o<2_sm{KHNm=-NZ5Yp;hrbS;jPbnOC2LHI@#)U{N__m|MM zN4aiR_Ulb(HS;bT$h(Eaajfed717Bo2THD4(%$UtTS%mn-rHPQ?@msRetSd6M!&kj z1*2cx;I!yhH#jZ&)eTOI?CV>}mpb-!C!?>ARejAvDyMa8Umrt#y$JTu*Emkn*UKRV z;bkbOuc?}I?m}Om;9`0em+&jl>YVI)C!mKz?~|w#(JGSFcnaBR4ofC@tFJ4|jnX4e z37wNqCD(UyPA1I}=j0k)G<;5`6}M9`@xrauc4+NS3qd+v*Gs`yYk%s1X^eo>T^Egp zbQ*_r2ZO}pLN@&KX8T+SQ4d|M1raHXK-5zgjYgE?h}J-X)6I3xz{5^Fg3PO}w>M54 zC!^=&gGlYYd3IWtC(gT=FWp=^+n(X(%r!J!0bO9<4QBMr88GS`FV^i3CQCfKFx}y+ zLP4Rm5YkeMo^jyz#gASG)__@MA{PAoTbg?zMtfLRrmJ12X)D?%vl35nYq8WTOi(bp zKzOmke*sH;gI&YIw!*ArTVY5IZG~Bx?n0j22krPyDL?hTMo;wo0m2c|_b=F_%?bL1 z&Z4DxKp;M*1;)qm4m=wz1WkL+M{m9(IO2o6_nQIXV@(LEtG;zU6VCT@GTD=8qIeLk zm?&_ZWTNmO1>uKL&_qF1e9{UNMK9MqQ%)3*P^;IAr3}I67o&U%I8#gkXNR)8kDj8I z>?X|-*?o>K8lBx|^X%SWht|Gt2vR>?uLTlmjDU2mE*cG~FNgFfgT&)PHnb_Ae+W@s zrT|hHfv65sK!1+tF(`1}6^|v^CLZ3GTH<0~4K82k-J=E=w1LTjb0bT!3=SZ8kAZuK z7Cf86U-A6%ao7o^iQrY)`-IQL?~2c&?0pig$X*;L$==P7g77maD0``jdqZUJK-V20 zvv&)%dIOQCeA^8lR6KhJi0mB}>X_kre_K+8G)HvIdAewHstn^Dv(*l*{fH2xk-A3m%@8qx?3=~)Je$0d-xqe6)4lD(ub0#O~ZcN9nTJQO%XT&)M`sg3y!ouN9p zVUUc}*v8x%BBn4TGL|96xZY5`;mFZ$`IwN8WA)HkqE6Z)d>p5XMn`=#_wirkqw$Q2 zL*-+R&Pp$ZI5>8nV>@veqnziwHp)G}U#k(M&{n-yp+bu@Jyv)wnyHbN>7h}EJxXJc7S#B{4oleWT=YgA-Ig5=DJhmB=ZScof)n-4GDDw zQ|BW1Mk>R?7sAq)D7~31L%pdeLc8xu+F#{*GeA-M(R?6Sw@ zq?^`{1)7rfv!oCb=vVA@^L5js2BrII$tH9|uKa4Z{7MSA^yF*d(YI6z#O-Ihn#x{K zxd7Km9j9j0QoSG@bv*D?1rR@jsI9KR8yFlk6y7u~qmetrM zs@fk((-jCA-_=G@S_~F!x!~7(3+Nisr<12o(-ubgoqxZ7^FZ3sik(K-c~IcPF}66- zi2Vts*hkxbri1$Bv$2rq+%GPTT`UrWBz_?mjLo*(XMF@m0-$N>G~fvh=wC^rF()L@ z82J{|@6gCz9c7Dums2nQLH^NONPp2mVfie~Y5w*R#_~5&^2>3YWaQ=NvyqoVK_ic< zIVX)*1?Rf%HLg2H4!!~q9H&ZKESrNKR&VK%Y$35+Czc@aed|^pXW=u3pkOd=zC7by z17W!mD<~Mun-^ugxooVd;arcD?jw4%(>~0C)>oJ$u<|3{<`o91t0;esyM9WSU7!s2 zPUXUl7R5Zysh+s~60$7MSZ>t^bM{(VdAv4RNE<*9#&$zNVWDcyc@S4j^Ii7_8PA4j zb#8LK`OIBH96IAdwh@zk46iI^pv@SSuVd%7ai+*k-6Y3^h9WVE7rB<|gCNn2Y+Azs1;9^x^F-dV=q z>e3@ugtC35K8P&ikBmfQ`zl>Ddi<^6*}^{k=R6^%h*pG-LuRQikm4A3kw>l$LA+hJ zV}VE(A|T$Oi$+6S%^|j8f#fj@Oc8g65Y=UhAcYZ#>M%vz$q~_q1kFLI#f;7V^cg<$ zI)QU&V<7f^Ue^bxxS!|#^Pa$8aX()HJEFrVGD>ke zr8!k|&IY9UU9P)Era65(FXuch5~wvL&|OIHxwPp5-^EzNQe7m_+E91ht7m~FfyhEc zcipFpMkml(-dzV1M1drbK=+3b)g^&QVFaQ&B+&gF(IHS^CJ>Jqq0>&}2%C7Vk-iaV z6VPs^eF6HIpqYT&f|h_nv{0;f>`nl;ucL4z_#+`Kj8Q})r}r#) zviDF{-;*q>>HB@i=A%(iR#O!}VvVd`=eiHbtfp`7dFzn7{HY5^!0sfx2Ute)Ge5h+ zeu%EH=`(x4g5xBY&z&Fz;f{m>B~^2njPWTp*Ih5M(3khThhg=1_L&bp#yOVtK`f6D z7WyI|u;4femJ=WaVfvgNVWBFGYwY@Q-3=1UiD>m6h1Kvv-G(5R#|R63U=LVuoCFJf z*bc&{5(bo1&0+Tse$v8qH@WWP63%HLn70*=GZcKj=|-}r6U)=C#|e~9ZE>|AZo_b& z!1rx-XBM{dyAS>{^A@-K8Q0-W;$`M7uD8{N2JdND3BSy|*(HNHsPZ69jY%)V_m-7%rpaE%*)O6IldnCvd_5Xo82CTuyqDG_nhwBp%KoV$((ypckTtZ z{CU^mO~SbsT<=BZ+;fr6ZDY>$+NpECwC)_!9PeCj?%eZk`8Mtx``F)0x^q#lq4#0V zy{bF+id(+jb$F9-?iJU2l{xoPq;oGb=hz1TUvoX5M|XkAN4bC`;x7cTulc>5bZl$V#F>waTfN@=uxyAs4cSFIPeTwGcr;?5FF%X3O zXcRPTsG4)W#G>67uKT$h;A7G1eE|pVRNGhXslZ~;8ZoviX>9p)3Y@VR^f^T5(51*6 zzCUvu^ku&yv|lAdOCQby%87&$B~^1yF=nK1UH2Q;{aOOP5Cn5Z`Wg_7g^o$Y^1WQ> zn0Zfy_YG!?H5K>}$(o98f&x!w;vLCvA*{V4NnhB*Z)5U#V@x;^+GKKAwLBL^#WCMP7CzH z&#t?}b$^n*Fck!|7k&!%!Zc#}&Gk5ef}~vpsq@0+%)(##?DD5u{=4h&CNaDG>3V;$ z+2uD_37;4KU;};zRCznl(`!ZU9z?nOGwWb<3SKqxrS*A-X%5Xhb2GRC#aWo$ZOnvf zjNsqh@;~?pzJeNTD^*4)5XD(w&i+ch@oTc)xCVldpM!#WgQ_{_0QAN`vLEJBllKpc zJ%xA>Qb(-r6toGxBw9#cV_a8Cep$DGk;4D&%DbQqdm-goC@@A4ZkFWUJm+Y759~#` zYte@tneo?=rsZNRvTemX5x5=#*;E_EIn^f7)zAV6BEC1Gpg2<%i>!$AE^XX;ZN#fW zH&LrsuMJH$fl%-EKZTkU{%@h)jfZ+66!3RIc5UPAquv2|1*@>$F2E`0W%}Z&e9dFm zHri_*i=Y6%Jj!P~_L>J5BliL;Oq`%ig<2#cC%@bNZ*)gy#$xEs7EwnRCF|(r5JU$r zLqQ!))tu839o?{v+dy{o3f9`Vjn@z{BEOZG-K$Oc9&H>jHD-aPh|!X^ z@wBUaFG+5{XB*@bkMqGaD{(0dM641wU@3)T+T@zuqfPmqyn9yyM|OAea`$9j-U&f? zcL(`_lBzhBw(08b)5hIfdbtLz<|{sXD^CJ_&k1_p?*mrxbr?23-UVgZCIq!fGN|`L z5D?cAM3hv;>(A(recQOr+PF<6+WSCoTC{OW5wJkGWz2ES3`?b`E;+3rn!P^3i*q1R`V?0%F-`_(y* z2JVJFoyT|Q(g&3&kEoh+u5Tc|tyOy+>e&qG&HNweU1jQRM|#`+ALzY&cLQ%H(%b3( zK<|(}487e+Z}sK>o!tl|f#^)xC z9@l^9;5=Lv6&2={J-b`pE(NJ=8tV%-))yJ;=?%EnRH~*yUcZjxhE@+BKOt{sL0&;& zVO}b)c1&R&tey&5_2_~9M-J9VMYy0(rA`5<>*#Uk_t&NNV5Dl0audc4?ti`}wI@i8 z@&WP;Ww}R;<(yr8_gM9Pl=`z`)b|F>;#e=cRQ?ohI>J>Os{J}vW8(Dh!J6U5Y5&wJf#3V5wfbnuqn>! z)6rI+iL?5uvidUEEMeFVk|hi;fn*KCYam91;dL}y!|;g$^l`|l3d2WnRzHol`dOUS zpOn=fz-9@<_aH@vp;3M+e@C>{pX00+G?b_RRKuWZ;VY>w1Ti9v_0Vh$s8h7+&T*=HE7fP3Y{s?U8K9ZY!XrLM_XH_29aE_uAX!EwCfvTta-SH>XWP}E z6{~)bQa>O@eSgp_j-6|_+%MMhaAkRDjO8JA^@C&8k5cMK#;6|wn#Hm6Y?j$2(m17l zOpN-`u{thPIwr>Gm;jmu;`mtg7c2D_#i*YYtD{!wxGV$%LyG72r8X6*)FmKUayykj z6~u_CavGYgQ{_Ab=$epKF~(D=IdN96jkbDSoYkeu>SC~&y`jQz8%UNRz6d017?yz; z5r*Yxwua$81!!%^stUtBaaQk-w)#Mv)hCqI$H8U^!($*thJnsgPexmPD$eRl%Ib?D z)xuX&y**m>%WpALBgL0yNWEc*Mu@ejr8mUMkfbq)rou3>iGG^XQ4AaL!&}AT<(tlDk;tYs!9;FpM!lQB! zZ638%9<>3N%_A2y3+yV8tgtIVjDuaF=popM_Hhc^G2pXdI~ueQwgT4AM=AAzs7_3! zvWlje9*c!BcG5gWneG;2`ee{79eol=AyoXH^F(DifU1^f=Lw3gA(Pp8Du}ke?4dw+ z2bV2gr-NoecAByrjjTq|L&(rwXDjo)W6bvg%@VUSL9!q_Ls^bS)>F}=ko8x{`hm|D zn7*J{kevgP1zDe1%R`mr!7-Kx+0_q>RX<9p9~q;5gkAl4N_})(hbwwiTqi2?<73Q^ z1I-fGu^?IEI!0NJMmAc}L&#G37l3FRC6_4Blfh+6hKoS6Ae*EtM)KF0iYpjl#eEl82b=yL2v5N(bxRF-dwvAn>p9_SY<9gAXg+zOfn{VjI&sr)4% z+R(31mY2m?UTRkl^miy7tHEa?#3dlV7F%UgkxH!uiC+SQdN!4RCx}7tSl3;HW-ZCg zb=?gLkOwvkpoc+buJ7+jgsODXY=L@=ZmLh{by#M#SQMG+Sfww?g$N*esp*2S{d^aM91Noqh)? zuJe9V^a#NJfEWQdZ}%9$d+aW6QyPKIM5Q{fAxLqk8Yp@Msy#uBK(!Z|tzmQ&s+M50 zgs}`H6R-+n2BbK^X+@6!d?1JsfLo*43it>G_%N`Us8kpaRaT?3@eoCiK-C_^2vkR+ z*^25Uh3W*bS;E*ABonX-KmIB-hY$hrd#xs@G=rEq4 z=n<&S1~CFvA2eH0jZ~=41Dhp`!$C3ut1u1&DK3md6+Hs*`5;CB9))Hr;7b+Yi@|21 zLKykY<78zu5JucQUZiLmB7XCj%D)W62t-rRY(;dvLUb+IEFqi+k_lFYa4tyJyYOp3 zjEnCaMc2HMH=H+s7~#!)G+Vt{sk~VZHWRW+(`6u8Auk0n4)PL3kAS=i#0bc%(QJjh zK|%JwX6b;3K{CA&9YB|nk49VF7-#i4Wp!&vwFnfcem+|Dwm8*qE7fm;&En7-A*-50 z??hXDH_qx8%IbeYsx^ncj8^?soa*0|>R)WCQ>mXp;&~I17k@-s{WH#L!#(8rf7d;X z^f6Zaia?7@j8v*VNESr6x^Ar0?*TqbFYRvE-pH;!mA^NL5#wMVG+W1kqX3neY=*xX z&`hw%8-6R02FVhNQjqMSI8<3~7i0NgyXCfa%LheSrYlOe*q2q7+s9ZwB1%0!RU96r zo=8l62c`bl81=`1W(n!hQI`4j@KI5gm1A9%Q9eRe;Q~O$7<}B zPgRx!XJ4^MdWxcJ16?_OmO|DGd|I*_S$rmF7G!6DWXa;5%5pTa9*Q1?te--5PRKeY z$a-wux{uxZ*>>%z{BuE!81Vhkti`~*ogSwEjR{#5Gj=L9I?n3&XsZ+AtWH-}r-IGw z1X$%$Ni9g0PM88xXe!~|pUS@+#E3A=K(jRr*DFBRhODYE%!{*nL$uZTaaLC;E zK=m-1t*EvtRGYzO3F9*$nSfJrRpDun;==fpqDKIJ7Q_g^&!O20_$>wa4X~N0R2W}Z zR-?oCnxaRbdK<(DRPUhKit3#`<+aXRdm3!UtobHrW{43-K49Mf$#e#!BiNMoI!KoH z3UC?pp|bpbjOF+2>feo3|Cv(%NsRh`gJyB;W4q;#Vl98AEPoMW`E$Ga|HP{QUa9|Y zjQVduvpDvR-SXG5mVZ{3e~PjEqh0+EvFiU&>VJz-|0`$~$9}O{W|w6DDD{8EsQ)uo zN8w&_wB+w)A1x`+ED-ZRiX1HrVv$n6ON{z@u{s(l9Svf1>;{?z;;ymk_fqQjh*7_L ztd1s1$37t#mB-jki)=AJ&fLeyE0uZ0g%HpgZ7;Uw6 zoYiBM)uX{?_J#_>Q6NPo4Bln{$r^^^K#T}O2Q*v5aH;}S9kQyz&@IktO|;e1;;i;l zR?h*OB@BH)vV`GmkgQ=i7sQA#^hdKb45JmG^Fvlu7)Hif9TRPJY@F38%Ic+HvxMOi zkRroCD@ORpeUz_L{`O8?#KPk&U#902`uKv4N^}i|gzr?8j88nMyJ8YKO^~YaI{U0&ve~;CX-&kHE zDU!~W~4Brcy1TjRA6}*Buj3m@*9E} zamHzcX6qSeKLu#tkX13pQ>kWgR$D|{-9OH1m9km^HcJ@FL5hrID%Bb!YZ&kq>!>ia zL9;asM=Ld9cUgyAHRBEvxEsZ*k@o*HNMY-P1~NVV{l zRQHKieNLR}5lZ!Nuvr`$7P6Z1PrM_et)3reb+WQLDWqC+=;CPAm&B>QQ>nh)WHY9e z)u5Tq!XrMGSAi7Sdw5j|q_}0E6^gDcxE#%v`SH#Yh{3TgUmL$qfnEzPE$0o;_kdaM^m}CD1G(|Ch2HjqF854% z$Wr+qfoO}_e-!9X!DWltC!kr7{aaa%M)t9yhmav=|5fI{i822*XqK3L1(F5XmmpbR z(D(wxxViFkMGwJF<$njFEug^}8Ia<# zBCY75j7{aY2GQnt8wI)wT(*H$30h=Uq*4{ia`enquIM3Th}j{^JbscQ5Eon{@{6^$ zcIyY(wWsnA1u^J1-YY*0&6=a;gYeD@P{)u}anYJeb%?XtCEDuoaaQ{%t7n1DOb-=? z-XK{zp%+MT>2ao_hdLpZe-4NdVd{%!YnaYgfJcDMM5V%Xp0XO98p9Pm0@WxGBT$V- zvlZ3l3e_~QS;9CKBolB-F6h^S6c@%RiXH)Y28a=WXQJ5(c)kLBJ=jcCDvZ}DtI=V+ zR?#C+-3Vd?ss(7aqFSv`tpuATj4MDg0jn@B2PrO$%M?8V@a-T*0KNmwR=^J{zz>1V zM5V&`pt2er#&wDwfyx6h0@WjEwxW7gq1pmA3#!e^YBZ{66g>jfb09{bdLGSIRG%nR zAA`-(xgUXK0#=>-AxLqZ`+=fI0R9xj2*97A*$Q}v0{kP`OjN3Ke^6GV!}z_TN1*x{ z#0XTspxKJ5XdihIxXV7)FxCUf1gyeX2$J<0umHrk80RZ`gg3i_7~#!sXtsLOTzS(B zY$jwCqgQKmsi?e#1 zvU*HNwFnfc?hviIW1Q+5rTP@GSsbbkS=AgmE!yhoaaQ{(t9?SMHHZ2|t3EeQ^@U3H zM3c=}@0tLb=`1|r*L~wbitN2qY8*&B-L!O~r}At$|59c7;uy=5?dmUzRX<&+pBkgS z7Bq`vQ|y*6i?w{EvV291<(YQ%Gh)@>pwwRnJ`+5Wf%nR_cJ1@*+Ee-SL5vvWH=@}( z$X6&p%R*K~cBWEGVwMa17Nd+;eL=T$$1}0mgG$3KLlb#7}lfN8ir>S zpr=AsRT!R(v${Fj>XtaGZz!v;fz1+zS3$Cb0iRcoJte%X=%F#3%6}8Yh%mi{W^0%} zSAahQn~6$==~HDj`byywMUO!B1&9%-zC^PX)$a<`uVAx;@fVOxz$tlC@-s+rXVx8x z9s&3d5F-HpiDoO{2F3EyX4m2%Diucjlu#_H`idTbsv(FGs2ZW!ifRN<6{HFZMi(D| zPZJjuj^Sm&SW%9nGQXhycwVnRft8I?snl?&&5fQoZs6eD@X7efao{sR!xULV+Jn8W zIuxWXgU3%8KB_-`kvUR)h{>brIGvr28Wl7uY*eoippOLS@sq}k>vuu_k=h4L8F?4M zwoB^&vG?AARaEK!@XWmzh;+hDKp@F2VSq~pL&sQ1r~<(t7my|)Bmn{;2`Ln7C?Z$@ z5epU&1bgqJq9}^pwfDYjUtL$%UAyn+IcMhFGjnGm_q)IMzh&2Z=A84C&-0w;)G2Ab z%!8~=hqMkybO1q3O9VJmIo0&kncNeBv&^*FOxFm{tb(K#JhM_%OIC5utU%SDd8Wxu zBgt@j<}^^Y;2G6_`kxV;(GmfCvO~o5C7?Vp5d?UR^J0{YrUv2bl15eCj*=-WB*1?5 zMIhC8IjbnA8uQqQ+yVKo2>CC8Bzct#H7}xqJ6jfPEm?jN0{#QKF_qO-%c>eH>m^cp zuK};Nk(9>zs+vVo6@N<;Fn$+Oe({jPUsd|qO^W#J(T+@O0JtQRT!TM7;}7`o$?)ZH z7D|%z3(l(r=T*d6Thmxyi&z(*9Ov4vY*EH_LdM=C?bo!(d8^>OiRhXZ0BDl(8(S1{ zb~nrPb=^GLaV;v6JTSy+$Jc~_mq9mraU!nRZD3V>$&FpykbGCLzeVgx4&)D>zS*LT zzX};2xCik z#cV&(oMjnvW)?H16&owUN+GLWFRItD>Wx&Lri7IuR=rVFpY2wCo~Yg=3s+6yTSWEw zGPi09zerSXb*sKqR9}qhS;_{E9Ktcmxv9HSFzjFqrY%sXs+YNG*ew`#CNW&)#xOF+ za^`V4k~1xPM~mtrx9Sr_^*Behs*Xj8Y$Ef1v0#|!U|`i#MD>Yo)zd`vRJZDxqI!l~ z^;}Us+pT)OsGjFmT_LI$xK&q)>P4uQ?N-%=ZVWYop_(&@VY!k0C5WYNObvo*d6Jeo zH-?php@}m{^J=3T!)bzHwOjRBqWTQC>h+>}EmtRuDr82jNn%ocXQOPKg2-0ca8soE zHlSpJRf2wtsq}my_*^bn>N%T|go0tKVA$+dyhd+^;VS3BFFKOn-6&R3x<0g3{2g_qWU4X>c>R& z0k`UBMD^+#^i zUyAC_-Ku{Q)&D`Y>`yHC+!+2448Jjk#0rad(_`%gL)#>V zBitC$1w&`XAg`%AxiRz-3_aYcL!vs{t@`tng`@B0H$;^_N@ zLh$iSa3Yda^|&OV==(DS!!)<**`j);TlG9qJ=d*zfvBGER=rSESGZMQ$*TSST_M^x z(|-7JkWDVDUrM_RYcGub$qp1xu`ih6#ST8cGlh|RgrciKYTpbu(W&<}mf#Ajl5dil zz(*gqfo+M? zDy)=A1#I|fFUZ?E$&YX$?t&-|hwF`=>YHUTFU1W3;tg>q{ z*R_D+Ho<<27yHdEu-_%v?*NsDH}4fhcY6~(D2NQ(AYgXD`@PWJ*8;jng-rZyNH26x zg2;zc*O$WV)YbnoOKBE)!VSpdUO*0d0a1NVVNj}N0~;US3-P6^uu{9MauFN4%|dg` z$5E=<>UnTf*3{xp&(RW|{+3-K0^$u}&uhscqpGiZL3_m;+MCJH-bscA-5(0w?}wG@ zN@>hDTj)I~@d$t~1n+0g;rUZ9%%6B+29|Gyyl=eNzixs32f_Zm7yEZDu>T_1e}Xma z4-PtJiyytj{-*`8YQ&o3|8P3#_ppKkSxX7dHGXqW>%ZFK0cSR<&lgdavGz~{oiXp= zkZ3QTn_3G+frwj^;nsu2>X%vB%#R@5{@W~aSUk_rm7*7u1qS;iNKdMW!t7>*wzDo z5Y(Zeuh5{m+0{Fu)VYfCtGeLqPsVe7W-}0aJX9LNx-F@k`FNmUJ}RQrHZI00Hi=MG z2MAAzRwBtv!cZY$utyUQ^5pK}D{%VZXd!O6hc&~ztm)w!>6CW7kanyGxMMuQ`PET^ zyRZeS69m<`7O08^)kF`wCV1K9S5E>n%^T&BY)V^Ku$1PFl7ukZitogPFkAU#FNmry zj!w3UEqBGtF_VhSb+{;;8d0h$*a}q?%?90SJ8LNwIa%kiLcWL>%yX%bExbk1bQGjh~)M}5wTiOD5gWz87!CmLYt@@f^Xsx4xRz?(u^HxXr*2D6TZ$*S}J4C@MCdcmb zM#zzy9wXUV&OUdh0Drm%_|v?=!*QDg_c;_7i7^#Z(FSU8TglnLV=GusL#`N|!Lts! zYz1qnH4_vx5u6LTY}iu+-TCx&2h9V1b(;XQH3`fXr|Qj4O&27=J>QA$yksyJxr6E9 zy9|!*j(s0ySAyqPFA?arTReW*05a`TbeozLr4^O(k`S$Sl~dT2LfGXHX6+&+ci>0^ z71l0Ns$jFgZo$6Gb*56)ogNtB=4%D>UXO^m#*4X!?>=Yz-6W*l;2vkHdcB7@)prj~ z@1>5h!*{#cOrmexP4j&c+0AI)${M=QOmiq5hbQ*nzPlm{o|X_xY}I#%881TUZPwC4 zl-z19D@4hiX4IJlXvqhiE%|`3|9+TRUslslUDjA>PU{jRwhlSq8)xG3Y_o7huf=93bQSotG8SV^RvieAffLqLb=hX8Lq33HeY^4BH)xTq?s#;+Nplyw=s$ZeYuc~TrNAS;x zGKwULZuxCQDUu3k9*fcz%kMuoY8@1x6GeMhRAK@X2kVcpMKmp1z;OZNphewzUX(N? z397A8rJ}46bD0oF&()~vmZ-9@sRpxPfZbMCmF5?qMpZYrAoWrq_2Q_qxU6Au6{c0` zG<$ngsa>!nN!3Lyh`dsWyxdjf4tJ54wIFi05V^}$phcN>A? zo~Y7TTDhvqeujQGuqAgHRlO@JcA&Oiey2O+J6eGJuz>uK2jmBnAaln((1O$sy{!|G zcD=E6Xjp0s|F*rAa?GKNYU`^iF^5SVAJqJySuLI>+Y^=`?{Y3;7b{Oafnxq(I9DDRDHMf<) zRLOD5Al}~3YMopADGO?8+aw0qpIPYN(oZR?$EHFQ|A1n~J2htUPKhZEi_7Y;;uBOI zx|me+8I|8(7h|Wut(PP9v3rU0VwfTp)=Eq{U{cjnVoJUJ*3{gXd*sZCxkt`yNRV%3 zsp_nlyjXS2elxw`tG==rrX9C1TNG24v#pkx6&IpJK6O@om4MOEBp)@azH$h(j^X4$ z@-0S%ZQo+;?yF+9fToRnhcq>9Nld9p28IsTB$}mx+_r%ZW`jSO8#~k6;4OxAoof@JV!u0yT9pG2g3DU(ARlE zU+V^ajT>|TxIh3n5AxhxbZ&oTiCg(5s7da&tTitYLbrP`U*u)gHZQ9#bhB!!hgDY! z0GE4MwZjA0W!_fp6GE@?VBX_p)ow4Vu6DC(mxon12>>^E1k3dv)?VjfmFl}09OdlJ zPh#4-OX#`7L(lDAhTi67=&f#s-r{Dc>bo0VrmVV2-o|4y_Dp|qluvg({OSV&=KWr9 z?(>3kuN$0u+~GXbUs*cPe(JiPitGoc5B67N`YuS2rxT z6+Qx)gX}V&V(d1mCyBLYmHoKz2`XIWkoP!DEUik?eE>$f6hB6uazc8P3Y~HvCY*M6 z93(nBC=4wxi1v97cGwrN&-Pa;>+5UlM^%;C4=cc@=UH<>|2&r!0PeHoDGhaH9zRueRGv~(TOk|Ar#>)G z5X|E}n8zhCi$&99!92;`trJa;ph3i}n`Qd-M7v*UjivfZ?0%&}fQ$=0C*>*JxkB6@ z)E?@TJf(bbWjWUVwhA_NoGiGf=P6A!O%0XUA#*YXf8C7jyr<=1?_5(+O^<>(B&fcb z5MEoyR+GHVnn@{e%@>mA<=J-hLhdQ`WCRV zQBoO{FA~ZtJ(O2?DKGa@zSu>1m7DS!p}g8d`BE?COWc*iq6Q&!xrfj?FQK)bLRXnW z`6@za*zTd>B8LXFBn@0dE@%WIDT z)bD>kuN}hG@BbhVuMn}l>05a?=_p%Kg?n-?`;|A7Wm_%$E)9Ik>S}9nYlIEqW(yxf zLpWaK{1C>GO}w~~Irnb@^vB791?bOB&|e5geM)_2Ssi=9%6dejP*p!k7UJ;IH$vgx zlWB#*?*!Gi0F8k@URPOJF>P^uWy9jyYWtnYegR5g$+LMUo0M5HBC2}KhCY~_VJ-oe+8#|gE^=;r!bQdHor=y(@JqdXP$ z@D=M~L&={$n_#+fGH*)%6f=#R=?vlG@j&4+v#aVjZ+Me*rK%y$=3r@UsQM-*!bF;r zoiic5jL(Mb*(S(2Ca8I4S|-5FObC`WCWivYpb^Ya`H5x`|TEujev!e*bwq zZGAqgC$wuB+Q!ON@*!h)tPNCk4e+=eJmVESsoBl8;ya-Y3703gp?Pe2jueW*EOT#i zA#*mt+MT`8T&1*f$-H7RbL>wDH|u&b-S@6xbgS?Du<^dtVFO4-4*x zS~TXt7Gxac4hlS>v$bpBkj~bwfhToZyZQsqn&r=#<qlypTqqs(}~W3SV^=s;%BgG@cavYOB|DJfcG{6bK-+GoxEBYMZxp zrN$hmBp$@XSE5zFkovh8H)705pTkKma~0dFeJccf z{eJ%d8W{=GAKp6HK-I%{!~n;7BFz-iRtRZ5z_l$@wG}E{k2J*$*U=Q#X#n3jb{@cY zj$H;=JID3|+}E4!yk)EYbP16eT;@4mCR0eJ2M4%5QKPC|C1z<>V4>Ahupc=99kGdS z=1Cjs?gQ|i1-n7X84Fdln-@-e1RGUs&wR3APdf55=G%Nkac&s|YIaPZu6vtsVa zRW*YL&7E3VU0K#pDT)Ww;f8H@rA{IAIG;T_TQB9BBiM{bU6 zja(PKG_pB*d1PC3XJmI|Uu1XmfyklAH<9lmKSX|v{1o{$a&~lUbWe0&^ycV&(fgwZ zqmM_QkG>FnBl>3a{pbhLPotkj{~7%*`a|^6*yXVsVzSBL%r?K?wvX*+8f#% zZhR=VC3H@xaBJwP(7)0)hMLX}tqENlx+?U~v|XW1(LJFXLpO&mjb0zx6}>%larD;E zy`g>4heHpB9t#}^Jsx@{^g`&l(2JqV!{*1%uPlrDbKNq__vP=6pd`;vowAXoB z`qPmIBlpD)M$V7i6T2XCRpiI;=Ex7>P2oLgvOmy>`*MxgYoTXzw?`k#y(D@tcSq>e z@Xp*_xsUZ*A9+4}bL716OQ8+1gW-d*`ywyp{*bmd_DS!*_C6GSCwG73K;)O+5B4^C zU!C@B_^RALdcP4`AA2!&uXbK+W9;16E4lxS9_amg?q71Zg`VpDK>Eh=-)zbL_ZIG9A3*J|3LVs$j->w;a|`LJ_!Fiv^(-~=%eV*q0gc}hBk)Z4L{e9 zV*mXR^_Z=!53Gs)D@1*O`o|@aJ<-cTpMwHJ}v{xO z8Zsm#{Tn!B=&+$f1`QrITq?xn!2JAS!-j=I!-otVK9E(-Z>uPO{Glqv>aO&cW{mj# zuJ-%hx@q#wSG<02M2kPxKdLHS+qY4uu1!Q$FcYwUvcIW-yq)JXux)4VE7Rvhr-9}S z2VJ4kxscgu`km;m%2kwWsF9?9g3k0kRsDwl3j0Vzl(*!W{-@djk15J=eLd*RHlW&m zLltG|mmYLxJ5X%{ux-z=8$x>FQk}xJ3OCLQBABnH)Ysyud0A*2N*Y3aSB)6fZ|>x( z^7`6_+J%jw8C4BUW!0g0V^c*{ZD`<-0r_)hjGnuos%CEapaB)t)sYZ7fTGhK(2A;R zMPHc06xdK-KDWFsUR_mDIk6Vc`3xvm^zjWt@{b;-=oPgMiaxta(N9(eD|*Qy{I_5b zs#h!e*b`7Sc?>dfMITqySh8TrINBGO*X$fnA6NVTaw?WV(xbWhxQZ4gYn|QHuCJ`C zt#2%-tB122l`b3n-}N7?;_Ew#Itcx?tJ3`P9AyWBsQZi#7$UmIXrSoc+=>kt-TSj# z9xqE{W$E+VmKV&0IM!Nt;8C>JN<8UYyRsp)w5qXT?!f%HRW;?+O%;{6q?Jbgpdm=- zHkH>m&TVL{sIFQtV6oC!eZ2V0qrW+(;KYC570y1;rS0|U^E>_5;+K^*E@r}`&u!eF zwf&^WUMO8Vy7fmjlhcQH{eK|5y1KTUiQjg1{Kp55Jb!Ecy`{U`Ej{k#^jZ>6hrkVU z>&=B1JYp`qto4<-@UpyP6^n&dDFtx@Q}FB4TkpTO;a}(7aYol?UYz*RqV#^j|3*RG z3Jm>B@co_l5BSfVQC+?{YQR_XPP(vf`s4qd;03%f2Ohlg$^5rJn|1T0|5)DR(C1a@ z$7cLjc-f0A3v26_G0>AYpEB~Jb(?0d>2=-E_xByTKmE44A;F?eW zoxSF~snfM zb@aHx@l!^R9yM{)#KQ8r1kwo&iK%2{?&t~TF|;YJHy4M$vkGw?@mF8V%4-|wn>eik zA%MRe>xQR7ct&6=tZ43m$+O*o%R)rzPgihfsb)}ub{%M+CfX|@ta&DAI}xo<>DVb9 zn_P#~XNYoK5I;{!QghRlg?Mq)F7#O<{Wudp3ou1kLdT~ob+s$)l+O`mpeKGF#p24M zoRqFK;E`sVQO^_QPNMt{l$KF(P%f`;w3EI-q&N1$Pd-+J7U{vRN_pKv{*oRJ;@~T? z|1U(_>nQvz#qzBEfvwDb{IL+C#qwuEs|4+fM7x=2FPCW1u%InlfPK74OKtEH(JJ}) zdD@~y8~laQmRI9$v!K2J)GrhDDx&@j)Lowf3cv4QSM|xRYR8uoJo)sX8plIAULmfI z1M$O@21mxtGg8VHa zzhxMHeka@(lnIQSf8&HZa0iIrCgRhE<7Y$%$Tp3{pMHSrXyKS>Qlfr`sC$mU&q|3J zfA9g+b(Qt(OA86y?-KQcM13!)yIHtTVdR*S%4!x>v-c}Givb1i5le?-@H4WbqVxib zzf-z8DV-Ty!x-^hlSPe-*|U+{jH|%+KJmSNJbnV55brDw)Cp*SVlu?ny>0FH z5wT4z!p|PC9SNg+V}j~(pj*q>@Q8v_)5pY8FbY3Uf~9%A0$pi8cY!DTf9a}nr7&+r zP(2;muV7+$pAwoW6#hzLE*p=ZZ;%^+Q1C-D7*B`t+Zh*q97S>_wely#_4P#j7+n-4 zgIweD9TQY*!1NF?O)hI3v}(|al`EN@ovFhN1?8v2H?J5!B^XUZ6iWf6BR-*DUN>r# zjrs;?`HZN~JP|+m+lorAN&UW{#&_t)uEOI6c=m;CVp?tj-{-`)paehoBV1&YUwsq6 ze&dXz#e2j&sO|yB7sT=D$@szd!j%!^e?91f?>gcO@PsX1xo8>qPHL*8ufLhY%dO!2 zk~kxC@bd>ao8MK)7c?vdp6u%HIGMPo(Tl>gzJh`5x~{f?w|{r?%UzK26-ha7A%0dK z3B+V+Yo+5!Htq>EE3o91825wm@5H!e5q<(a6s3+j(BurY3ONm6J-UrTai1U}F_}LB4B5UXQq3fRu}p9na{FT>CK zU>k0+;q{!6@~mD|-pCe2{1#1N;jE&WQ;Md`6orL_vz4`NFk?a%{^peO*C;Mt*^Zyp z*m!62e%-p8uj3%duCK%k+EptmOIK84JAntRNaRS8NDvDPnQ(eMuCOqF`oO}0kj;As z#N{Ji|3TK?eldPtfbd06bq)lE1u4+cqo<%-od6wWb#>LNORJXEHB~oMCLnXELKBI$ zU=M=iZ%J}^2Y$Z8IY0r68b9l`>STo7Nlw8HPRaQR(X#CR=qcZZA@+*P@iV@kqVy)& zt$ZVc>IvDtjwcJj3-BCv%CP@Qu zgY_eb8VrAYM}kXs;%8@!rX*nYGf&h=BFP7`G=~o?dHvu6eELag)_38jb$><4VLnh7 z!U3BgkC|RxTe*-4oIF{=Ld%^Sa>16h7eAAAMd?VqK6QM$+A%Fh8Ch3f8E>qtOEgDf z9a>mOl2|K;FdkqPxL$*hYp%!7y94kuL_L9IwZ#A(3u25$B>B-U80RrYmu2{Bveix5 zYDav5l1J6(GCVY0F~J#HEonTPG;X{NKhGV7I}}VG%_S#6F5c1Oa#NDHfh1<%fuBkF z__;x0GTU$)22od_>0(eeQ!yMW7F9M%3V3@Z7VfMAvz7{>t-D}EA#Xo_H-2Ue#O+U# zuBy*qP4{Yd44w&Fi|9lEH%pIT%Tf&H$~lCr_#XV64$dx%!KtXvwpBa6Yv-I$L+{d> zjQEQp%0^=R8!>JI<1k`uA4$j;5SP{QHRi5AgS1+*xhCvb|cGq}76;&%r8&R^1m2^zvBF!e#>x|@Y?W+Y7{b_~3RSarTeSO(#{Na+y z#!8$fCkAp>PHO^!xwcI}!N2BFfVqyrJkYhgZXE9J0zzRsyf-!PqIIyKDUuBLQJ*9M1$(UKC(`HQ>TNX3X)FtONIyVdgBDXek<1fueaA^tMwXy;v(YmSGvDG&iCwu)UK4 z57yDm0Nj*s%f`@V_+&G)t+m6M5Zs8DaT`o`zRKKrW_LL@reGedtzJ=ShC+-fKGu%B zh?YjSNi1PO^1=?2Cz)_1le9m>9u)Ed+*CTCy!0?ao8RMaj`qarbcC%Fo!(@0l2-GF#(kD9T&tu#e(iaG&l1YH-|U&R^V2Zf}GruOR4)n z?{s;{VCEGTj-ppD1A)%XyOm~aBgxjZ95s}q_RUd;=cw(J520~XE&d*p5^ATMVL4|q zB$`3BjRn>BAQO9Qz`cXPy~AP0s8Qx{agbH_MkI<3bb|RnI)4zoof33!G0YO!Et=8E zr3C3Jc*00oEF=*Kj+amAdAX+J-9n>uo09w&a*! z5Ckj=Hnzs?Yjn6qSaC0+AkY{47}>eB$W6>;^2{)0lv^uEo3cUDeD^9AN}pm&-A);m zC5yL0lbWlY($?Xq2{pJKXZKKF8kN}dZCEdpDfm0-7?mm;8p;;Ypd3&NVNNM(z7LT| z!_jUmu1r_F1*26Z7R<#V;;EJOwY1uT9CH=o~VFK4hG zbGJkI1op~TZM`Y~1rWAVG7xD+^=w+8H-XA35L21V+)oi{>`a3z3!IAqsKPcj(RAZ?hrvH^)#tJQ@bXjOFGez$k8#aXxqeX>B*z5 zpy1f18azK&S;6k->+CHkyxm17q}MUZ3>vf%mncYQ1xMS58Cn5gC!C1;7Dt%C4su%3 zp#2zg+HEv>&~tuxE`dJngHsWBAaE(01ni5JGf{DnI>3b_&t69hnnP6gY+D6q5PZLg zSlCEC2lq=9d;}2lVv2HkQR%koOSau`>D_gXv9^WKyEL-4i z(ILio** zruuWn_}XDJ*48!RuQ*~iLjnIKV}9{4nZfW+#_%_qw5uA~2fnbzonZ~fVqs1zuD7Uj zu57QAEx^+SQ&x6u!uj;z zL9{ExI{0ESTuSRndF^A4m3*7Ao}u0)c$}lK#ppK34&;YgHWq21J)enQ*p|@YZEh1@ z>mJg|!?An1m~r@Iicyt|s;s2|uWl<>W3gaca$d?Lbd*Wrm33u!vDw<85e0Ta3g%Ho zZG|N+=2V`vQI5;t*UcmCH7w^WY@_V&hI^>^a|XTu9%I7OdS=>2c~n#|f;LzSDn6W= z27EZv4ES&W8SvqVFwh21A}IcFVwDoAY6#)6gHTzhfu3Oq@rM}jjNyFH^%^i>F8{yF zLu74~GLZC^*DCVCTi<(O{Y1{tC$bS`v3j=p9lWuf&Y2ne;)Xs2ma@Q|9Rkl z9{8UJ{{QkoNltS>xmqa+HUF-Z4DPTny;oY_=G#eI$Le&YQ;BbW+Y+_8TvZe#3y{Rk zY+MU=7^kOqC@$$jMHQ$TyrHPEQ{jf9bR)gPwMAcq@^Gn4$4_w)ehM-=fUXjB(|rAK zoj!h=I!!q|{foK&MW%kr#QZ}w-0YlFYdJhXm4N9-ru;HsvP6zGB_WS7y4|`#^ zX!NwZ#OPtq7Y`y@lQo~N#}v_TK{g?-g;*fQbt;JK!3E~!gcK=d<60Dm!yWXHg}4Ew zS8QtiZK!t#?U(lZ>53ob8ezKwjgUQGJcwvb)_l4iQ$)W7xrDe8Vu2Xfhl{uqxVnK0 zNhTpRvvKX1&g1lg&Sso-N0oL}r~T{0UHDBNt)TPt4WkdF6(iaj6$Dyi!Lgmedn5;d z>r?>Hn{Ht4X#${ZTpI}h$5{ZfP^9fJ0nptY?KlGPs0^Tx0Azy@9>8@f0K(t`bBGip zrEFXq4FE+JfC!4TD`WsgNdU$WfG7w70N1Gipf}IJ+?y05rEFXq2LNL&0DVxTZSJ(6 z{M}6VzKpS*H;gTuj{l0O3o4=F!Y~j;+W9hu zVmAyWgkcb9fdSX4U>FK6Fb^T!NGTiFrUJuBo%JaejA1C%E;V7$A+&Ll)f~nY>xxF; z#)3FO84h|t!F4K73cv;CqX`01%Eq;m0cCn;eVPU37?f%kno#J>+n8>7#F%DXaVRqh z%CVpa6kMkQWhA)3d^|xwO4+zJ7f@z*)@NBz3Q?+Um!ZtI02s5ZD-Pupf>H!}K*4n? zP|AD^%6udQg|cz&=Pu*)pSqai)dCc;d1(!%)Ix-(@lzLclssHvT0*quA%|gWY+=DK zT_B3`xF#JIn7K0WTaGeTuS2`j%t)Lcbsjx!jcc8Nqoal6G!zkzS{5xGy)bkp45xz@7;v2m zhO@v0<}*n*Qp(1)uE3CPVQ5AX^Tj617wKL&f`nrY=z#;*so+=-E-K0`+saGeT<3&92Et)v?%W#d{;VCZ3C*oGp)(1l^>;f0|W zVYmpiz<}#iFzf;sn0JzHq?CCYM>JiJSWxz%l%RBH?ugo87!g}m8bNv!s%yatRJcwB)lJ|6^NoZCDP`kY zKcMQHuJ^G}-HcLgN|*gKv^Ue!UPj;a4Ws{+hSlM}(u_V{uwn%37VrWVu2X?^JGj7n z8^J+J*|;_Uu=I32&w_OaO0_4t?5BB#y)`Ck4ROrY)qCqUsk6;Mxs z3(QXv7^IYqYr_C)sDW8Odo zjKOs(#=H$KFu#R_jG=5?8xLc~rR!rYW8Oh28?0`%2CH#4=*C!ERvINvAY|`?9msH< z3bGHt1?Kk&5mL&=wMjrW(Sr3MiU`(H*3=WdFccGpk3b6yxK0Jb-@patzmjgGl#Od8 zz;L34;S&@w*PLUy=0q0oSQuNCOv`>0Ld-K-suf4Gc@u^(7XJBT&lRA$BTDZBUFQwrnxm z(J}8VBV=vC4rI7a1z9I>fw?0gLQ2`V)&OMn7Oc)FVzAa((Ngb)qmgiQ0X=ZwIu#t5 z-~w|762d{*xV9QNR#`Z@p@`u)XyI7ph2vDh(H-=_f$LOo^aK}}dmtekl#Od=0LSST zj$SCz^3A!59)mVc_rh@|;m86#aNs%>91(DVIZXPIQZ}xg4IJy!^>r4MC`z?qCKP(8 z$XIWKVyv@erHI);$a29BWVlWRSs!qLStCS9DI3?$1+q;RtiC8>EhY9*o4jzGM>zU{ z9yoBF3XVK*fw@2FM@reawi!4suyE)oA{=~Ad4U&(ErekJXn_IOsbClaE-()!-AE}L z*De8ui!BU8QA8N{UhZNq43`pyVW0&DT&IHJSa5;)7}AZDvTKP-?k*b)<4#*v>M{2asuRHqRJcwB)k)w2^AtjZ zl(KQ{0iZI{_4_SUQ&DQ)%Nf#M?tU*=4-%|6cmWI7slb{EE-;@=aF9|qu00A^2h#ON zELgKps?Csxm;*K_#v`_@rYt7=AqP% z?2rwL@q{faA$y9Dm4Y3}aGeUW1>gd686iSS*|_#RkUf{KKWiZ?N2z_&`JC8vKI;YQ z1p-w8PJqI7Dxj8v3(QLh3{uL*wKo9jbqi57iYVmyhVOMR3~v&KWuOHHT&IGe4qRZa zCEZ9V8`s_ehPN#Y%TYua_{R5bFAVPzhI-Hf1FloSa2mM4d@AWiO4+#fB`|!Eu77U9 zIGq!nfkgYeW7GMyx#|4e4sH-uptP+#6FkNj=#`JA8D9$$tM)9a{kte;3$w4tm}XSK z7+j}f%tmm5`5Yu<3}xfmFEHlkbp0pGm`x~UqpH|+{wx5{3flO|mX-RzuY~Meumc&c zQ$e;JTwuP45Fw>(Tr`;; z02i1qBmGDz8`m;`BWU5c97TkKZ+?Sb7%~aN6`%zMT&IFzC%C|T73oGw*|>HjFm$&t z>_QP?;G53wUKn~1hO0pf47g4O!!_Un^B&TTl(KkC02q2%81|xwwTIa7_42}zO*r;} z9yoBF3Xbc+1?KBWKT^uZwJ>mmEF3qWh;Z=DZ^#QngfQF)T42ESVPY5#t~n*@Z0MeY zO*iz;=&DaQRnLtZ)4OgMy)JFUoUR}^1^>-6OY%01{vk~c|~ze!z0bp-m$1_-1nfM~u5n=5#K z8xnwFS?t;YXuj2m+c^ck1f#@_`P``s$*Ikkm`s-<)#i6KE8#WEgMPaQn=d26a)}TP zkq_{ukqj*;zxN)#Uov75Q-*K4FogI3i=w^Sc0YYMgMCz!@V z^c#^gLgQ25UkHszQ_#4iM6H6xC2{Q;XnfjKx72u=6b;@mu@Ej~{{l*c7pCz<=zSJ? ztDzTZ3VQ2G)LQ7Ri)(*@-WR&+&v(_IGqo>=_0qkC7YGX7TR<~N#m`&C#&gzHF?(Qy zod&-MRP{iGGzC;EO4KHxS`pV?2CA1#JS%OAZQv3f`gUXh52hg~Ub3M{5a693M!@fj zyaIfyfDdU3_|7a*&j7wNvHAnP*SqSkb=6-rQJ!VIN}3Z236b$SmH7k4Yn1X_z{foF zCJ;0?qiul#*D0XD2iVvcvJMH*uxwm=7l_{Js=wV;f6GMFOy^w2TcjDS%$trrZfLwi zMa)_33b(U>?QMpTQTtgta+vQC%nckSt`8GtzhH@)TcSn*FE_5~!Et(CQ12h)%a`8T zQ9&APl|F|yZovJ8{=sX7f&tLh2W~`~0>1tw zY7F@LH(%4-M)=OyGmAVEz~pgva-@Oa7fnZ3qJ{A<>39OMH1`r!t*> zO?o9^kV!9<$n?d7m@-RyKFf_U8)rCd91I(greNdn5_K4C9FAuNVPip1Kiaf$1lMw0 zl8r|@Ez$~{C4SjPPA^$x(n}>Wz0Jnsf_58^g^fqUMx-g&cwC8kENnauH|}8L@uq>t za|4T#3_RXxP8x44UM|7r06aRVk1{cj;h4uI zVIJkgY>Z~TIUu(LCz1?sA+lLB&SA}1STh#ZAWgxV2_@XS@-Q?*G>G+MFK z(E*c4LSqt1W(E9gDmoGP;=qSA1$-x$s55}?(~WAwH&CBrhuxcL~R7BrnpuKR24zJ+yu6Q`+8B5 zugjefwF*`uAq!}nNGdXkb?jcYaV-7?d0&1+F*ABL96LzH35@mQ|~mS)=Y z01vKH!9(Yy=01k-P&TeD2c9|$&ql%%mj((uxH=m+TTa^b))PXyDGP+SP6gow9O3zd z3_>Uy*H!>wQ&4XV>J1jo&8Xl(cWMype{1}wufFr*)y`?bXktSno2HCL*$!LFueMr# zy0n;Ir_1Hdct-(Jb9YsLpoaH z&N{PY`w$|0n5J*E8>iVUOL(I5h=Ag=O_X*@d3SWC!_G6vPCD0vow!cLPCA$avwTh$ z*Ve+$H9@^OsGnt7OUHBC`k*bIx%C@@+UX*K=-d8Av&}>q_y!BO93E#U2{_ABz}a>I zcsq_iOL!H*J12;DEE1En?YJW0XzPqeDtW{_^;sW;I5zRKA4@ns%8UcfbEuNt92vav z+@fD^_~*-$7fczMrbI?u5R6lA+YK`Al8r%hI;&IBSN4rHQtz?3$MCjwqh+fZ&FiR@ z_dvwuzZNkK0o%4}}c)l><367oF)XFl7j#W9@^WBGl^PEv_7s)N+ zk^@Y%v57n+Z^~MTg!3%p!(ABEw+8hsR)@P8720;U4tGgXf7$BUUoNo> zk==Z8l7KCq0xq@-5FPFof_LeE+u^pmcQ||v+>Fi3f*6eCo@6_?H7>RIjSE=^ORQ^o zm2Et=dCBlL`7+C7v+*yYes?<{p|NqDN@L#*E->GPgc_T&aqS8;_T@o+ht<;fthZwk zvqNqU!{x@&eynxqDk8FaZgscMPQ`Zzzy)S}x|{iqvT^Mu`0mD_euL$> zM^S29vT!%tlH`UPZBcrIoU<8li)DZrKJ2vUX0qZjsDc%^PQ{8t-~#g#gdQnnZ8C1-Ryk+0;!Za!?jS3kf+|>n>r||G4qRYtRM}yKX^ev<0Q0$wvn_K1-2cvNlv?R8+oF@ zQ({7eO`>fs@ExuX(|3=9s}Js_!DoHq+MDp#8$tc`p#EA=f7SF_ zU+ryMJiMBisd-fJYAY&UbFa2y<8}9HD?;9IRF|mzjJGL9_OTe*7cO`Uh-0u3X$m$T zRiX}njYq|`_hI9ELH*sJ{*Gy2{uNCAhe6oCpIzdQj$oe9-eGo2Cnm;w44!;$ViHMb zFUGrGM9GrmJ+r4InW%UW185=6XSp%dec+l8;F^JO4bl``Gqgk<0@nOQ$Tu5iCO@p$HcYI zf%LPW{;7%dSnX5Mdu{h>KNEdeE)HwFTxvA7@HC}Rm$#AkGApF^cg9;h28}^>0kaoS=Q< z>H+N^uEk-K-01-iayW*IcY462cNW7joZjgH4|>@#|Ab>Ez%fWua7=MLuKf!x`97$B zXS!rE@9zIj8V2PDezfnIf1Eg{(}ek*XO-2ecgBa7CIz%gsQ`{e+hLF{uB?Y`K$p%l*=F%l*ij$ISuS zfBp|G$Hlohz!aBS%l#=jH{i0XZ3he5pQ3XEE{n6Z+%Jxn`xz~F3R(_n3N5z)53*t~ zS`gQML;L+|HeNYjkg6GuBgetlPQ;Tq?B9p(kECTX7e|eeB+gVto=vK=srtiOx^h*vI@N+t1IAYq$#+1 zaf!MJu3n4})nwp9H5vSovntJ(!Jh9G2+e{7WWQNL0~|NPEJ#@F53mhzAOjC<0vOU1 zfYp?!%K)qf->Ctx)){&$6I-qQ@y6B;plr-(tO@X$pR8EKwWax5l{E9)4?=p|{P@k1$==q;-U2Y=`IVn5PmJ zYi%6`e(M~4wbm&^JHk<$M4ltb{{x5ff6CxDI%Z%_4A7aGd18O6*2U74=#4FEI!kD3 zfx$)7XhtEyLZ_iMBQ^N)!lJpQUA54oK7{ zk-NLP1qQ#7;dC{7qE_o}X-fofi`o+IZh^r~8$F4u^>DbnyX9yj)4H-;-h4JO^mMqr zB?fk@+UP-oj3E7nN91G}U0J@Tm1j4xHj?OG4$+KpIx#aAx)NCEMzxmZ0MBGH2Byu% zKySCi=@uGN_7AUhWMx1kySEk|5y~)niEM)ITij}+N_vi;ABNFWFNuC-J(t{ASYv*KOx~;G+=_oylo8j6owi17c+7(FgKZF%)AJ5Qh?*zusgj-Im7ii0f2v z)BRsCvsXEgQWhUF0`9&UdLIik-7Ds+js8hX2>H=)tq&UysTaumT51!sin?P`RbR&C zRwXa2Y%W4^3`WvL@TQqQ7HZ5hGu-cUJIqrqq1BoBR4|@-c)^7GGzA zuk{Q)&+;|h=hgBv@InWV5qdmL%VQprtTjs{OZZdw)=ge^Yj|J=K9rT{GDbf2F4h=2 zlP7WinLN5_tPRRA29k(G98%xQ<%Q-i)8Uh5FLt+78|-S36euPDDG2NaT}J?hI1C!> zFi7J5GkMpOyrCJ!5I2KZA+Iu+4x2%A2bcGTVb0!Q3?*^Ny5)mEV~|86HGxcHi@;%y z2t0}+kZvENx8pjM-hMl{z)ZJUDFP`Q*N#R6j>yo5TM>8%O8Lg{m<;F1=5S{R*G4!y zuWX0L>E*!X^d5Gb^m02Mj(ka)iAO4t@z^$J$7I;g77NI)_3fA8nl3>z>?5@2wn9VZaZ$b%v9PEge1J3s9}K{|DDc4m zJZ}yk6lds@GW3ZV`h*PqgbaPW>4T%R5}Oak3m9gF<%5aN3d;v4I4dk4OmbFOKA7OF zuzXM~D)2^(QDXDKiSPlPh$BtG2gB$zoL)WAPJ$1nm_`rR;u-ekj5fveg4iqag2eJM zV3J7dcTPfGgYPf#)GEEE-HM$ko8$fn^jkFHvhjTC<%!!>JqFH6dDcSBFkqO4UnUIB1j6R zA_9&@1RzZz0ul%6CnEx8Wa!h)AQ;89%t~sR>0kv5Cw9VyagBGSeo(vYSQX?S&dBF36Y_|i2ZZBB+h+l;hgzBZZX zT$^aKosl-jF$x7tl7u5PP9mFQ(nyge9~yEU2@jb95(SnH$@`uJbERY^FG#qCPkf0f^+TKx1mtOOuC~+? zBl(|;N%;Ry#mv*HGqegv!x~H29LN`L%dGkYT4SkHUt`rLwA%PymgdG*Z|4jH!#-=^R?wIiLYVeYg-a8ktB;R1;T)#e2OK@BCQBw(f6mtos+CFVOcu zkfzWV7U6ph=nISDS`+$0quCJ_^J#u%(lp=b7%-;80f~Kd@}ue2sg}kW6Txq1w8)Z0 z*`}P8jwxpaOs20sAWgyK<@Ch|yf7BmPKC*Htu`LGI zBn@w8a6hg6b3Z{R|Hgr}x+0gEg^97m-H%CR>u};(a3Xv63Xa5e3XWu7 zd;l{YS0i9p7N5t2Q`cwc>rB5k)7i9kj_KQtNxog*l5aOA`L>x3u(^LXIsL1xbLo9h z?c!oyXm_#6ZtsI8dxDaC*-fa;%bOft-auYHpPxG5Iu$Qp2re*hMM7StY+O4JUOv}y zF?}b9`{aTopPb9gPpq*tUXU;-V3s88HVYDKzkq)h3rxs0(i=h0xM!)@{tW#ihV@Y5w3`o)%?*qcdgF2BO*5N_Dz z?!`Nj?7i62VLL3FxWkM~JSi`CP zy3%qIJAGzO+LhF$uVh_15&0S~NOVEptTeN%1tNbd>M@DswNjX-90r$k8pZg<%_?g) zH)SNct67j3HWKh!ATr@4iFXCuk{kzMTj=j{H0e%iQu>M`LLb+uH0hnZN$FIbnv}9} zZ4a7scZPno)vENOkha&H3-@I>Up%?mw(Q+4=WI)keaX`zy?VrZ&$UVMa<$vExYuo3 z+^y@62??;7pbB1=E!(g)@VQhd!ig7~*x&^yTgc{wP_S^QJ%@32*gw5q<7B_Y> zabqXb{D3NdFL-q3hS86Ntu^GKa6Y~~8y+z(Gj6!nScIR0aLm(T{zb&6X?Eu1_#)yX zVfIDDs|j|X-?&VC_;73{3>cf4k^wZ20yvvwky19Uod5&ITL#eNWQ=#iPbevZz95v( zhWX!ge3npha*mSy@xTe05N^H;i|bTeOp_Rx+4P2#y%VcV2EyV@eNv`A(ZWf0IgN>4 zIB9VIl5oCcdh;d1Sq$=Z7Ca=7sQd`Z2{MynHic7o14$Jux-#G?D}K?MP^R zVFSB172r?G)Td5URE@H7E`Mc`irczn^V`BegcQYOByIUWBQQzSFE5YzSa z<+nJwp5_do$8{>Mr!f`Gbf1&ZQx>0N1^OA8`t(eFnuVU;voxl8p{K?9-wFNert4oP z^fLtd=@NP_B;j~^bF*M3Ieunp(CPI>K&Anfpi>s7-+(?RQ=grw&$6H&K!q{O3p(vy zlA+HL&}U1~xsU|(Mo&}oTW;Et`f$k2_$pZ%` zPr!Q;G79Dsy!olYqn8l@>luQDl(KQH0`ST+^#z%FnFaDWR2XGmAbYubwp@62f#g{( zBmte?b}XnQ=#{BKe+i6${31a{O4+!!6wsGs>Q$Ng;!J%}roPZJ;AK=B3%v};g#lkv zRDWPb^#>HyOC;D;7*O7#0p+c*u{cwDILlZhQE>$c<6eQ*f@(6ZIyK|o03(cgos2?C z*|^pS;~Fyc`b>R!re2q+*JkQ9nffxzM0#7(SmtG7Uzqp}nfQrm;wNNcg9N@FCVosN zejGNIXPR@oQI{z{rB-Xp)kxf2al&+ZXSAS+Om9lf^bf!Yliw$kkx~|aaR#QZ%G6h8 z>MJaBKSYJG!pqzc%>4(M`>tv3yJYSv3Ghm(MY)&+_>UmF;8X&C>S2T5+6^BDq&J7? z`+(Y0-NxxpcGC}a)1TPwEQ5vUq^>h%(;6;8(+4Kfm=Ue4K^w!(p{iEuTghU+ViYc+7K z>Zz}kaGjPEoU3Fc#!5M7!*!Yi*Qtc-)YNeOo#Q$axX$RQpU!aMv&4K|`8|zzXUO`E z)8$+-`+39X5=4G=jYf z7)WT6rI~`VSON6H3ZR!>)yo{dUPGx-)eC=2fbH05sj@zT9ox@gV+l%s4(CX#!krQ2H$o#7RePmJwy%VZQ+* zLYc!CW`r3t`wjR5LiTjXjvKjDX}=8|9g&yC-dLGI+IySY(`;W~TIAhdSKMp#YPP}VcQcif@~PUC!&4~<8?Cp(qG(|V<)BKp1l!{zrVBd z@ZwmOb78}}f^3#12e1un%x(ym*zeCBW$UOd3<&+~@@=~NCp&7c-FiBQ*&8uT_`Ctg zNvGJ!_&rbFnpXJF0}1=fC8c!Hrk|c=zGXC@@_~MNSvbJ!m4(r@S8Ahc1^5A>90`rC zl#Ofo7+sIb(g#?>=|Yrh1G3D$1pY`4{b?5VM`l7v#oAF0x}07n4K+SzHEC!H;RWrO zu$-P|g+$40a3*+#$Y z4WqZPXqVSmYbFWMWdRfg=5*>NKz9h}1_1^A zvteBS?39e_LDt|;M!=kb*?NAqepI$Tz_P0+!5WgyJIL^C*Dc1dY-dj#z_3vm91A1( zv$#^ntObW&XI}IR7ea{#t+i$aTqTNmhkQO@9 zq~yrzXSak81CqqV^E&uj5c{#zQJUHJC&S5uNj;=$!2yowJgnGr{g2ozrE5ZO)tJa9%VbOk{KL0*8a=IO6O0B!%;2S%yurG1tL865Iu4;5tli%+?#S_4;gmxn=h>)M+cTjpc5wRPRzKP@hbktFn!igqUrTwAI;(%``m+ zW^J8j66vXKmD*{t0AQU%q^HYx5&>d~n@cojWNQtONPij5nv0VP0>Gj~LIg7!w-POqJf8rNjv@ok>90EDJ9gXNeq4o=+sF%7x^WGh~u- zB5BSx5)G2nujuD_o^F=OW^S zSJnz6$t&wb4qjPIB=Ab2ki4=+CRs`(>$8njRA`(=zX4-4%bdzG;&`bVl#p3N3};Jm zNGCqVdZHC4Mzx^9BUi2Wgg0d4>$mhp%RP9nb|{SpT+!J~HXSz^Oih|0l`!?T5{646 zp$C~D($Yb1rSDnE&0ca|zjMumc&cQ$hAJxWN1pAwo)7e47)so{M4R8d=DLk{}|?nS=v`}H9aI@tA^-TNyy(t2f&fomk=lTc@2dnYQBCPjffZVRDfe{}^>EMq^iY!0d^92lm~bk$ zCjyaFhO-GguJm;_l(46NJ_VHX+0n*K8k5N8`ywE^FTxHm-XM8b_2lc3Q51;WNwTnn zh$#?pkVHI4A|B)--h_yPFKCVMMQUyLE*RmRcaTuqQ5K(sMB9Czt$$~=-FqlCzR%uJ z^mHVTMr0b6eL2Q=!mJ?)Oj2onqSU3rV|5PsmX;r-gga523xwOn$?&se!4F}n zKF_V*wB?6zK`XN5dnkl0xIRob_fWJ+S-rB_9Q)`=Jv0`&pCr zGwz3ZC2B9NojWZpAZ_P%C2F=Lv>4UaroKZC-tM)|D(GcGzG`ou<2;OM%bZ7;Xh5-V zb|l#p!S+hq3cr1h?G(*ONF4*lT^fG}oWF%&W9*RQJSme+pC(z<$=#xkNfxy`Jd5by zpaqLMIxPDC*n96dE2{HU1qPOmYhep4ZDElMNRwq7%fdFc z&_uifB37(1_TCa>V$>uPzr+>`n)r!{8e3vCAG<_jNsJo(y`OW=%$%7!cV*1y_h0q} zbK3Jf=lwkAId#glrGAS>gHkk#X@jHO{Ml}>JUc7uI{lOkPmSt?DH%6ErO;vAET;~< zvLQWGM)r19X6yYel?`!L<^YnNVw1QQiaLIN!5AEM9MNJP#=%8_7M8wrC#|VRC5%v% zmLPVYng{TFJv(aVh$!8}Iu_hLkeSOPO%k#eLd-st6LsD7a${tGxm9ygG#t%-zbH3a zNLW%(kP~sR@tGqT*f9jw*2X5_ye8N}iADxHEb2Nf;<$$T&|zo~EjTPizp=~uEbCpI z7cJ!Q$EDyh#`2#GvFp;n<_zU zW`&N=y&1#Fv)L+?#rR7l=Li+)dw@nCi^7I%S2)tDklhr{G{Qt40PmXQPSi$;0rc3Y`-YHR z9d{}EQ3@l<^p)-lNvKkN!ZB1Go8ssv;T)H*J;#xEjgrSHNv?-G+1NbXsenyW+@0cf zoL0QEieuC&F<-4xZvEi&7_`dhsIG}tnN2_1E^3sS+Hr^T6s0&%l{P8rysNHwtIyrUnX($LdW1^53J^!j1s-w;Ivrem@1ceKJE1){tb%W`Hq#~``OyePDWUy2Jr9xmXGpJ?FaPE?;Q47EiYBL?N?vN0%E*d5ZCW5>1PD1hA_H)bR6^FqKo7^l;RgX~nGQ)H9g zQ{m5eFlH|Aj@F>lC6S!KN#?mox+N06Xfx)M{|nFGDizOToyJ%o6>pb{dFwhmppddt zka5#i!nCKsvFT0)PF-NdCcd94bkS|)AB={RjHghE+E4VXA}I99 z4p33p+dMS1y1Z-?c^SQx z4BH^?$IEU67npBAK!X7#6WS5jrZuX!nC7{OVf2&JFZa2yl8B$7Xxjy`V5Gz{11C0%wP`f?+@RTYMUM*J=K&==pN? zr?BE~(}eU|w#$UOW$)Vaos36Pznk&)aO2TC-3A9@dlz5a(N2tcSCYJozRCf+AnwPz z=JKy~NC+xB>s_!*T^ALz!rrDe7T?f9Cfk^guGtdEUpobyA>0KO~?Ol(6!mt1f z?-J|deX@7aYly}B$-DNOR$P>!h6h9yRUM$JYSsXydZn^o#fM3PimD`=u&x;p=$)Ys zw@7jr$pIqCB$7=gNyH+_1xe{-ml#zYLD`dB*^oXWaO{8sy$35v<$#jxfVd2GlqD<1 zWjX6p)qF0?naz-%FxXV4cra6@7gHvtl(6CwtN27#e1MAaD11H0HmCNX9hv{l+T(w^wm6%j6DZIl0NzoGLQwXIc!sT@0+azg67Vt9YNjNuF!W|!;=D(I}E zy_hCiOnOQ!ib_=g1=ybZU0u)f29aT-_Oc6XQjc}G%MK*%=L1t;*eMI2&;IQ zS8>ED9_dvaw~F((Rv9eaxaUn%goMnWK)401Hs6ieJBkW6MYG=Eq$SSg@jQfdLyXNJW-Egk#R9@tN? z*o)J#AJ+qWiN$^rsM0{3V-b~yl+F}`m8IugU~$e%hi+~U=oVY-mFd_Q_P~C!#a;!f zG|DZvh!W|ER$D|X(*Zf92O#S#_O&6oPYUOv0mY(NpB}{qi>N*win<<9Y_`~&(y?#s zfxXRQZvj;rYj#*f?dgfOSw!6-c@PjCuqz$9&K}U6Zpl0?eZ_l06i_oVE(p==k&$sB z3u#+_rWcT8Iv{7H1EL1@g_Qa>Hn8#Gy+jS19a7p_8XDPHEHcHIkC{mAbq+WhTH9Kv zUx{Kk#HE%#7pJ<6s$P^1+QIbDE=z@WMJhDZeT`N3RUxIhK^pT#3tfpy(m24a7Vpid z&K@gDRQ0BGm~Tvn8CdSJBQdK zgV;ls*azH3`ejI|b6Cv?xmE$caQFkxY}CN7LP`s34>dR#^9~M)ZsBv&BUVKZ0ZwX@ zsp^9!Ylh6qW~P@c=0AG%ju%1-mNBl$^LYnaVWa2ZMJ`H0{W554ov?2w*dqde3GFve zyC^3^ea(XMr;xI7qf3~ozKYy!DY>tZEosVjOvlh|MBq(#4gYJ^@P?OOuZNU&Pf;1_ zyB6o$q&%-rGy|bm)wig{Qu3LNk66s_qbqi8#40w0P*vZvEM>J4NoErMZb|qsO%wku zE%%7PKiqcs%o6uW8f`vKr_G4Kmu_iaSkgXE0}fAo2q#EY?Q4r0&jqBV3Wm+)Tp*mD zD$}Cs4Jt1q_X?+Nr2$~3c_SK*P}n=4g*0#UvxPZUe0^@pRPS#w?aEBvcqle*VPWI1Z49S;WhW37fMNMp-*8e7KF*%DI6T2jY^y$8P0 zJ#bI7xb-yLo8&$7%8+$dQ{KBiZp` z*H~F>fuETM{ET$qVYoRKcRBfmJ*Hv;FQW!`vn#>N zP?uWhmY6&lvH~>6CD3hJw^r9T$V)=B+A6oOm6os-5N7ToC3E0N0|n+TQYv7xz^NAd zny}YQrK+pbV1$`#E#~!UJf=Dw^N2vF+y5FZX${_frmFR6#HoQTVNCDU?s2PGG?Udg z+CjE0g={05x1qI5%%OA~ZtuYZZD9o`Jk}Ch4YUYx*a5&s2WF3tMEF(gqGaq zZpp2d{#{VBqo%d9xu&Z@%s3Jxwhr0l=045h-Vs(h>uQ=CR!O}@Rkw@Wl~OK~w8t&! z3`^4KVWp#{z6nSiOllyB0&G@j#o@3P)H=s4ZoegNpO-kCRey`N*a)Ss?gDpp=UdgC zo5ooH@-ipah`^=pj7yvu8S2HB+=J9LTdf6`)T31O!m!fTZ90;xQ={Iiol-{xu5xEw z>CDJbzi-w1y&melyytqacT2s_l6sAIUt_Luo15)si|s~q_(`e0sj4@ipeVI~#biG@l~O5# z=CK@F6=q~qZsML8imgNEW{3MfK2)j09NO5{ z(bRxBOzIeq4OJRD+Pd4NOd6t|8meq)YNi2vKTU1@`Kt0`SPoryL#|m@eXh5;>TXYq2LmmFlMqV)IC|bvBJuYTIbrWDT%i zFxPJysnm2}Q(BF+Pu-0{7Mt2H3-0 zBl0jsY-p31qF_?h;dx32+Ya-GzR=Nz<#~I~&^&L?$$_qAM+%HWfn(od?(UDxb2v1= zb*W}*c}i<4Fm$*{R?L*{rR`Ma&j0j3{+&t({m&@)I{%ceMxw9-T;4Cklz;@jvd76GYuo zCJhQxBj}0MWN(jAVI~SEdlv#?xdpK_BCP6ik&<-KXQhLFk{9$7y`TfYd<(!_$n!E$ zMMT-;l|Kj7q;^}@noBLAOVTh`rPFG0I;|FYX;qm!sD2G+H%U02(XeY1~!7Dj@|jOr>!=to|ZKAG^bN^b2>#g zc`4fDrKlQcN0+H-?v}Ul*o^IuSO;Kq*CRvSYQgME2d6U~oDMHITfE_Hk0_fbIZs`8 zP?q!HbX!DeVclHbubdU3p|u)EL(;BA4eTMjJ36;GGEald$xfO37`uaNFR`|6cODm> zNtxSS@{&-ox+$gZT~N{^dpB9i4e4~sbj#gIIGyG=gXo-~FtnU&wa)?Q;atF;9Z?!O zI@&tQnrfVf72tc<;(HrdQ&s@D&k|8O+iU9NNx#3C9o`d7$elU)IV~gt?~BHkG6R7R zAcR&9)$KJ+V);l9KPTrxQcw*XVO7t=7H$4)T6A(=dM4;I3*ILYoSf3y!+cmYIiD>f zK2C=Z+-lUE=)M7})bUeQzeb;HtCyAIQy-XnS#*H2$O0>6D6lDOKR5)F=o^ zo%YdIg{YP8B~7!;Iy%LyT6zRyy%05z zJt|O}Ml5#*OY9~gw%HQ9F%2VE!D4I|j2#wZtBJ?c+%0Luy6|)hvD+-MooN_dcuo_H zr(29WQaxgO8d)w7Ng->GC2MyYMi+?vg7JXGxG&XH_ok8M0MTFV%X*`t^lJ@=Z~J%f z{x7b3zU+=K-h8LJV8ogDz@1WFymonKLr3S@rA>7;9rbN%XSZ!@ZEmZn?_68Hv8lbK zyLGcZV?xn{No!j=x7MxQS~qFR+B#9N_LQd9DU;VOZD?+&>1?pFC$wYxI!x&k&VN7u zNd8CpALk#8T^ze9c1!Hm*zK_&$L@*!D)w0Hq1fB8k76IkK8@{-|08xy{9mz4;$OzT z7yl~uY5eQhl?CU;AB z6|pO0KaCr)r$>D-`r25=rLnIH55{kZ{k!m&@f)GjozUs+*qx(pkNq%qckG9w4#ggb z{XF*A=+6u9jqi(p5xZXdN&M#cT?OA1zF4p~^PExL*FlN1V$Y4fJ$~lcmqs5RePr~x zWA4kpGXI>|i=(e*pf8M{7rQHdcHD>`j*$Uhh`m-oMtlTHAC6yNKn6<2o{L>m@J4J8 zGv7n8ukxRb{Ui1z%=lXDANe=NUoZF~|Lua$^AE&cjgj%l;AAi|9vSk{7@7FYf=~0w z%rC{Bf#IKyy%{^FfXsaf8iShV>-@W6;9oKmKhBK&J7(sWVdl3A-YIwwWoX>4YB8MtPs*N$=!Ai-!b3DF;J2Y}|^ zEG}Od4Q@oxUoZU6P$$s)iH<);)47A?^~MzohiMK1Bp3~xpZ@ybe}+n*vUUCuhQ1Rg z&zP1k{Y{!WZThsSlc!9dE@dJ*siP7z>wlv^93rwB%PHr!#-d_LuBq2+t8K2qN%gHra3>+)m`7zmOp9ggrc=8%GcI5wXUt3JfXh1IgVE(6h)`KMtxJW zqHpjqymofft*vWMG_|xhH!N!FYU`L#r|5G#rxqPIUD4~?Iu(6&lcJxZOi}czM*Odx zjN%=NK4%_^7R^Q?q39J&T~)Q4D(G&Ph|i`wVtPf}|K&LEKuNd3^osf(rUIR9AUhh` z+d8_6+dE+HE@jC6jE~1nQL!3S)XC_&*-G;FYm{2J(XbT*FiH#?OJl{bWG^;m3>(K% z<9S{t%gb8dx2||C#Ig3m%>}Eyw&AW~+qTa9%}rgMYbO=0ZECG+?yhe@l;*Lb$x{)o z?XK(STHD!G-`rF?VWTow{dMK;j(YE;#+FEHZtJ_zd3Ly z@3NC0d8T?#dGFU-7iG=J{yz}j+}u{j#9wk&;`3h)KmVelpH<)3Z}W-2&uSy_-E3O# z5Ysv=BBph7_7>B+X&p1$n#QZijXPNdUmd>a7eDL#^t^jc&wlE63tn%`Dh&N66|`@~ z=+6ZIV(_5}|6Efx)zpdpQ%_-{ zFOFT-T=&;CAJ3>Qd2#pk4@a`r{a=W#ZtrN?iaU+0iqAg3Zg0m^!yg>~!p-wY}nGC9~%* zTr_{-lJb&r>rTh4X-%E8rnR#S+)aAMZfS))ozOO!pmaVizP;Z_Bo zKF7N-Sla5A~6&Pntc1!}Zrq)Sf^SIbCLTsrewtQ|$ z*`g&CWmStSOX}Kfu=6{m31!x(^7;IZjX>A!eLpGe#@=jL*LJbLIX3h6ih3vlWki1DCuFMy(SA6`n`)mL>o{B4$8t_)+O~R zqO3r*$tNVKqq39@cu>(r1YD2P1JQ!otubeKcFCYu~^hio-J|uodb5KSVon zA}*V;NbCR5MNI!EI4u@I`+M26za!cUiS{aq_9;eNQ%fhUoR-?)S)x^na5-$!q7D9s z(bhHBwBTO5puPaqzbESLMEy3Xv!4WtjKHJW>J!=Oz~9?EMRYK1*YOA98aN4;as3o! z2yv+ypkD|-SND$&x-O}C69=zk^SAhH_BLC5JT)rmU zCY1S%oWE1V4R|GpUnb(yX5cb&0Avd#7cp8|KH5!6)UObA?o3>^Nz_Xib$dexd$YmD z{VGvEK-512^-vS{sf--cQcY`PGkczqvlyu0PsB3dcwA-;RFsim$rzNSF3e&Iw=zb& zN7UH0k=={nYFrDxKNH^zC*cwt1b=6Kpw34FY>{{@&moT2h-1SnTnfQ4hVi!p5# zOtL~Zfafp7lUahxV(^T6a&SgqdPtoe3Jl!EI9f5)VnW0lz>fBNo!FL^;&Kz%hC`{q z?2x(z==LzSPORc3(@{-t5KD0xE>D03-v>lpnO_WnB{KdeTjiBPy{#d27izzniQ#?9 zs+nBjuO#OCb8-0_QWM|`8K@bIyHNR07#AIYOU9&Dev`P4EWpJWq9|c9O(1Z5NNokv z|0AYFHC>apPhQ-xjp;dOWi56>S}Jws+w%T=wi<2CL$E7WvDL#7{1L&)s$P$?Q*BO z9~|!z$6Kf1vNfzIGs*sXC;;0H?2iY1!IWrdYyscN-3|1%wHRLR2IqUk8DE3TH{eXZ zs*o*cSPDLooiT6`aWA6>b7_qQ1zEhkt&_L^FtW?Nkn%oBId20l+lB)%Y1&&Ec(Q|g ze(P48W=V{P!1w_%9>iHfGKjC6wo?aM6jleG;^16l4gjpa2f%iO*e-6ufm zmnlk0N>(fQ4y1y=BzEg@1VVh1_n-s?2ZOJ+1#|Xp?Yfr_6AK| zJ4oa#lDGmZ?vfHF9F-xzX!)d)Ns!H9LtGIY??Zz9lgn{=2ErSk92^Wz50S^BYc4_m zn1?!Q+S{9VRAU*{-Q3w=L*`Pgnn<(>n||N$Ba$4u5|@w1;CoK2`7>DeQy0O1PO${n z;y$Bq>3=8b_gsz3lZ77AH$eL4YI=6NrlXo}$%XMRE z3b+Vf%K&Fam09f_4T-LXcH0KhTC1dFk!gW^=!~V#KXIIqy!j4XUY(#Qqe~zPtD}LC z!z@}}Q@639e!knRJ&OFCL|$_zE+!gR;zS`AYIrDEkEo8~Gz#>WZ)wB4Mif6oh>^99>=FETv5>Za^Nx zR#6{;^-E&CoLJ8R>yV9LRn({ZsslfDvCeO$XDtOMUbR!cB2N8oT)qd+7;y#zV62Oc5bG;3-sba1SM@rl0T`ZWpp z6$zO$30kj*5S7*bg{$_t4P8s=6@>l0xZW><`5R)M_7hy%!F((sP=&`NFzi-*b9vHfBQFE!sv5t!E2ccr5znLJ7(kdMOOok&FqfM@@cpv z_CeJhhj>e<-`Iy#n`00Ij4Sp2eEgiKR+4#@8wHu{i1Or)0yXOa|C0z?P}J zpEIj`Np)G(>{ZpvRxO!Romf`7Y<@X7PMON>ybOmeB_*W_dolsfDFg!ns8*Wim@nWr zq8pNS;9fFajAOQY(u@HV$?H*XKP5hrwQg5U9oex9dBMvDDX?ri9ed(|h`y}jC1H~b znQpyZ#)RN5JmA+U%=sKM=k8&$&n&?>*w(zYLAc0RR`Cf=V<)L_ z4U=>z>~t1+ks+$2C$NJ{hA1048n(CN>o|ScK4lMbFM(3Q=lW7f16r~#>mui&;8LdT zXx31*P4r;0lFVTB{mNBed2&>K!ZCLsLq3aLo{<8UAl$J_~eLGGT9mc3D$PLuVK5@W`wFik!LZ*=kC?hE#c5 zb8}N?Q(G$@eWAP@sFPq%*<$o%$^?MI%A*LROc<l3V>`-jVmSVY5yaW+r{j}Lo5ooLiNdKaVNUf4$gKSX z;NHXF-s94vtV|3SkFw%p;fYoUnpe|WkKH49uVfNK-Yte%0t;#3oqTG!bR>po-e$Cf zBmc22&DP#!Wn$&cs7gv;2@9+_TA#`FK&>?CE@|s*>O!{`c>9uJzJwDnFF4Q}H|o&g zx}e3+;03`kSl-IUrG=3_m&r53k}|JWkQTy|rTGpYds5!QZlj-4mM4ohU6Y!tpVHT5 zsQIn9?clV~7#fw>V}Lk~AXQrF7-~^NXJ<_#4az~K1nSUt?mx*Vk%p_?m|qD~yac6# zkD)_u+|k~~&g%FCM(1w^>k{|5xaVVRufgp!A>bL-_F=eEX$Kqkmu>85sHsQ8=P-TV zf-BKx2^kktUFTwisdo%MG~WM`RrR&2s`9q(R#Ww-Sv{J|I*wtHuXf&KgjZT#By}aJ z!&1Z9?j!ByBy#jT)1A)Yy5w?qDlR^uyS25ZrJYMw3Jc#5oWX>)9gTV6mGHdX_wvt3SPlRdFQHRHwqpl z55Jh?Im>9p@;H?}-50MSiCqMI;Q)0F`i+uX;^a$J!RqR*b=5UpT^&uec!9LDxEM#w z-OUZ9W=?T2-RG*tSeCq-slNDISwQ-8MtXK2MS8ZWh$_m#>NhO$f&EP)?1^;8RPelk`XoimN5iV8M;_Efz!w;nR(25zhkT!N5hJW z{>Z3vQ?0PEp&2Kjjuz{tfkLX6rCFUXGbtm!gA_pcGh^<5RLpp7q^7xxJVnA`InL`$ zQorvi30U4@5}xgo#-BRdx;yGTtA2+uK7Z7VZS7r6Ewo)BhkuVT|L!Q6!SHv+@V_)G zH+8YM04HnDUDEKoQ zAl?y^AYWjx{ZKz;TXr{|YMwHgwu4ycUTzJS(t=T5+=#J~?<4jx)Yn@)?orre^crL* ziNg-pde$6h&u5}H^d)rdT^#~m?-A0{!nHlRoN)wXin4~rCUdUm#eL;stOguw$}5^^iLj6IuvNea`e3oA1aK@C4B$*FNY8`^12{Sg_Q4%hB_nDtL-LzC^Ktt$za}4Z zP(HhNIss2hm4GU5!i2T_pV!kceUwtrX!2Ubaes46opqD8Q0X&hO>#T40cro=zyDg` zzZUqf1^#P+|61U`7Wl6P{%e8%THyaL3sgmuLFEReDnI$PQZ;43hOCj9W0F6i+6Fdf zDTAs4>-*xzo$6Hf8&9sDkzckCp8gN_byZPf0 zrC(;ssw~B&I6MHX4WPrXBO!j2zcIz?-v}-+H&VR_DVflQq5d4R{w8Em{mF@V`k>^% znb}6pfIH57FMm9u%5q#POK~Y4P8c?U78nrsgP{dnU~ZcxO2OZiM8^Z76XvKr^J6#Xa zulbgC;ip+kyNXX34Bp`!0OEcCjN|}v1prDWv{?Xfq6r`mS=yBX0NuXPP9y*i%K%CU zKm>%a0OEcC#J~mSe5x2BB@gmjmI0Ke0GLex3P1<|i2DIR?=6A(SgIHy zB@?8B5;9uBGrwM zk_l}wFjSftCLv2ZU&c`Bg`tWtOa?75AnpglG;o1=D%FjUk_l}oFq}MCUt+?Tj$G{u z0fP>qjg!shFqW7x8iBit69i=j=m7Hlb#;aOnv3coCOsOSsPvc)h&{@VK zhG_}jIvyzuTXRZ^zZ?P)b)W|h#Qosd04^{$Q2hugnb5ulj(?jt8j(df&R`h+oesk{ zgkd9SfdO$p7&e0o%$ulggp^EZ8Cey2AWK)XggKg#%gk|>X^udaYz{+pBqi$vvmmqu z>_CRNA7t&|0&^Q7LP*Jk)(6OXo3OSZi^1A!!s?w4M<(Iu06lOZ?gvLVxWL>+^&_NY zLhA<{eN7x&k;QO4YU1dd4o82&u?_UVfw&(WJHZ9!9aKL;N+z^Hz%kIoaT>A+M;r5& zf$1;|CJehk3k-<+!Egq+z`UF4Mo7tomJJM9CWa)km@UpRZIP7@M~HBo33}i_+z*a@ z-~#hrsvjXG6WUPV$T4x8g)G8R!)%e04#P0QfG@fb2E_efxENeuzKH5ZNXdkj3k)Mn z43{8_FbrWBMx?_qk}zBfT3|rj4~FZ(1?KChZiJLfXi;E@m>6zA7Hf}Ro9z)vha;bG z+z5K$K->?GTfhb8o2h<;luT%&fTJKwkDE~N;uC{1jG3dr0mFzplF|rrETOs$tU!gh zA5=dC7npxQXb@5|p%ntvm@Iv?iRv!oYDGgvi6sMnu*onrnGp>^N$G*LP{pI34o<%>ElgU_aIk$Y{(&+XV{xRhE7muxn_(vW0(ms z15G3-KLtIYAnpgs{on%geFOm^B@^0YK$(=K7nx9ghFoopun;{wW=zV0SJRL88b#^s zGlf9?9Gn1!xF1kYf(y(~5Ez7%OlZ>qYMP1YFtW(0o0um}ONU_wVR#C(z<{_P48H{z zn14fcBcxeR}z*cQh)(FtxcTzw$~J`Wz_Bslv+nMPR_GTEYLGF*yE zU!c-bE1P**2`TeO6hIlo{V4M?xWN1p0#b&O32iQvsmRjjn996@TsBzY0c*bOs&GIz z<~WklC^3(ay$W_9L);It*T4nlKNBK^luT#~foy>Z>o3S6Sesc>FGz=>k}$juT3|rj z4~G8*7nuJ_bt9x?LaPFX#U_R~k;P1NwrQHh>2NF|9B+XhI1u-P<6Urp`5mesAte)9 z0yvhMINn1R;W(AqVre=I%Lv2!pallR{b2YTxWIgb>PARO>{)P75LH3w9tw+z+xr-~#hNLWGc#39S>zI!suDk;P!`HNB-H z9gZ%-F$DC$fw&(WIp6|w7y;p+WJ22k9NSGCLy^UBJZj?Do({)O!Z8f=z=60Q9J$~E z^9TflgOUmDbl})!;uwi6tw_vO^qjM?D;3dBm1<2K=3n=tZk+IJK#n|geN*=SHkc|R6kRk2|*=TTqStCRUDVfmD1+sHYSYwdI zTFTl-os$m7d4!`7^uU3*9~|Ss1?F*7KSD|-ve z?gztEaDjOW)s2vn3GI8paJh+L8nOrj-^*Q|4#O3MVLE7m0dYSVP5>8}kEgm3QZk`k z2MpJm7*0eMVc>hYYtv!4o-mvQT3|rj4~BAZfw_$8Mo7tob}KO4Vq%z$Eanr|UhbB3 zIBp{xb3hLqi2K1&2`(@%r1}w3GNIiE9QS7FKQ*B&LM}n!d%1fZFpQr%l2VVkpHM9Z zD^MZs2i3{o0`n3=gOHL5?Uz7hWa+;!Q7uKTb1!E|d%0hvgY^KxN`M!z5cdOXCAh$R z3c*20$%OVWU_F$jKWM^Qg?8>%ax( zYpHI8luT&Dfnk`5;d*2d2EOSWmJY)R!f*p`=L6T>aY zV(npV_(rC~5g{D6f*v>!_k-gOaDn-DsvjXG6Iu*7@=Y9fB8zbF&2N4>3~|En1JD8k z;zx;L2DsK#sjE@<8f>~z?}}`Fxu|+=!dRZYzkF}z%r)5{I2HfbiJbBK%RkFhj1}4Y z%ep7yKYDt#wmjP|{V0<_XJrOJxi?dpOji)CU)HNityvZkkC#A_O$}|2CX{VSWDQ*aG3#tu+gZdJYF)2C#E1nDKEqKG!Q9X2M`+p z0-+BO$xE@hg7q&!05B|xT{{4+HyiOXPJyprC<$XdH|hp5YVv!6=?a9}`fO1MtC<$e za9S|=eIl%r2+rHK!yoJ)i!VPG@;@WK3s`jXD)duUX6MmG? z9)*1#$<`khCaN|b&Ze{ON9a0APVm;jx%aQZzaBLrJj&Lg8tbdnIvBbhiy_qbc((qS zsIkF#jMex!UE^}Xs_{wiZ$OO*ebl(AN^L@on-bbnsPV9S*e763aKzWAo9Mx=BNQjIVC@&*u zJWnA{1p~}NF9Ja_iM9m_#C@Q^SESe&vKIl+uw+7e6^LHR)?d!nUlNFtbk1eGL^Y$8 zdDGDs+Kg8yiy4c>a61dwUSl^n<;$_!#1IX(%IL=r?8p6uaiQDhTo|)&Fo@!yC?4-Bu2MB)VhF4UW2Nj`JOQ0K&?~k=f?mpz=_@C*%FNn}SZcOtoEgw@3Uoy1L&q6a>U8Kh1J4RV$KsHF zoX~M5ujRxP9glNsq!qh!GGrY&y`+(#mvUr!hmI$PoI0KW9gl;K2z}^yVwHLVbUYC^ z?x5pILcx=`f~6@6p5#_1lQ$O6mtgaJ2jEf{;1U3y1;7Y>04}dm%K*4Mq0I*1@{nF8 zFwf?gD^f6*xiK5%tTzYcmf%E^0v<#TZ7N*a%z-v@pbbJF+RU#~=RuqK32i>KnHSRM z3T+l>a~W(2kv7kr6BI;pr{Y9Xju`3}0N+C3L+AtF$yMqS;5#{?EdsvEkiJmhTdFN| zqtPneh7JlM35_6<)Cy*>sc13qC4dj14}7OosVji*l!Uef_^JfBmE0AUrno|t8#DJ_ zo-LvD@ZP1a_C6VSR{<|VA9zo#Qr80SsR?Zv@FoP_bsX=C6ub#HUeVonz66-*;qcED zF1*Wuw;Fg6`oLR(#! zrLpDgYMdgcDtn@I@KyGbI;vBoL*q3rjaNhC255}XhsI6VQ9e4rAjkWeFVL6sFl@e||2zPXZ4wb51Dy@S`o1qdyA1bv~sjX0{4SPJOv|gyx zj;AO&B>HZMw%+Y(Y%N4;h$6|`tRlXStp%zrK!wl;s_rVa3#hsiS_4qkhx9rDY%8~Q zV~VZo+z_>TmLnkxYMe;Q5=8QdBd;3-gH-InkXEWxPcZFF-RNq?4Y1cX*bAW#d!1IL z?u5NgOK6*5ucnZ`QP^u2w^wtDy*9e7qcyoL7}PkCtUf17r&(GCNrWj?k|C;=a)NRz zIJ~~uWv|V!*XghqLLc@@(gO!#djq?%WI}6&?OKH4l6yem9EMutA)~km9cIff zmlpHe-NIbkTP|AeeMV>68n!!YaMZrjEEBtiZDh%V&=ra$aPuOn_9X2%uCNVlp7BUI4~kQteIbZr6F<9{!mo$$gmE?%vYR7Q4xC&1 z)t!I;{i50>voe+V%nL#Z>TNfIjGN>@2%XOCRP+IF<4mddILu?D*Y$v@tMKN%)XF!Z zl4ZS?1&c2X6^eT4z*IX26N7oqM;hY!LfaA?JJYF`sT3Wna%kMwGnJD);oKgpbSfxJn(-|N(wp~OCj!Sna=uw6oBmc|`oarC%QDau zw^2G!h-UHA;eH4%F#iAnISnNf+9l|47l-tVLi$0o!`+1f?J}R)@oi;CPmzjNq-40FdJk_gp^EZx4@(~ zhxD65`i-VlA3yeA>|H}Qn=%-WV`Ic0UN|cbbNK z7`cum3pc}$Qq1rJhnL-J9#QkXT8*qX7X+n>X zk_qi+(Bl4(eqTtx*Hq-UD1dfc5q2hXpN!GCS58$L_w&(#2f?^~m*D3F^%)2QRK)#2 zeFH$wU^OtdefO#7ACq&{(=H*U=Qf_fEOb%=uCXkK8r z3o=E)FWm+GMZp7B0bsm>s*GQSAnT@BDZ3UQA{}2vK6FIfkB)x<7nol|Ksr(qkJ&-T zheG;;rgpC*m;2G9DSP#YteyEonMKf8dyr*h;`Rs62x^>!cF+!z{#J%#M=i){SMDIU zGtx@5t8hqk`17NtKZ{}I5whJIP!P65{3vbrYjBOmy)@WtbV7R(_WEN;e<7qlAJU%_ zRvV+e?C^)@?3tQ-1ur(e;(704(>Gr5E;c>nkFMe>wa|E(eB@T&=H{z z9Vb?)6QJY7g!X6X_@|KmYDj-YC|GnglmC|x^gqO+_{9Ru6WS|GZ|TIu_!EOCpPL9G z>FmXLH62l^Bze!AR+3CqIhg@85f`!4Z0bHR&1*2tB$x)F57SJmQm4W+(-PWWVVXBW z`s>0j(|Ij#hF~+(F7%T<#v4q*<+K=a#9wy|Wirw?Lr$ds3#2oE6rm5K$5*MvKze*a zdk0A04(V?Rq$g-^S-sbBul8-L56jsxjps{^#ulDJ3Uzr0`AAV9wI8SFVyOSS=y^d3 zJx7^JZ;$ft!Z0VoFbI7ZrnE{efniD$+6OSq`yu^3VVE-QJ#WLj@0lGF;} zg-I6i?*5OIVNibHNBe}?$BlD2O_(32Eppt4@et=Wt0c~=$RSRCN=cw|n^zL&RrGD* z+{1(<&Z|fk=NPX4;Ti-#L(9<(SA;%VZUtKIUue0{L;62O%bmho?#rHA?sL{WUIx(q z`5ju0i}Nyo5a+Muz7?GpaM{$3g9Ytd(Rl%v#W`B;OIOQ%ftEWJEr-xY%hlpRRt!e9 z3GLr#zpq5&)$s+X8g?ByPPuIXp2T5)f1#(^?5)2Nc0bwkmDPTHr77)!HC{%Iky7SZ zPby*YG|O`7jgcZwR7I9eDRWfyjk$E?RXNI36NXsUehpLC!_)|Un0jNC z+6Yr`#D{9a_)txlKXTTj1;Xt4UJIefupwuN92(%b5+cLaI3vh5z`-yc*aR?yK7h4W zsVxB3itp3_SnsgjOJHkrKHk{d1(c0By*x52oqo^xY<(m?XJ%!FSB19P5~DNIvqIZC z5}z}(QrImMc58>-5c;rNSC!fcyLBbB{;*rWu--SUA0tfHtqp`>9Ea!qn5AruwZ5*5 z4D%d)hc+mz9pfrZA&*M(zro@Bw=!fH1H+gTgLGylPV9GTL(H1&-q>SJXIM4$z~E8S zX3^HTpN$@T$6n3~mPsF>mu(zr0wiX)M8J4Nf&~i)z*rh4t-lpz> zA;So}P0gOD)rOh1*$&)eZMM04VDPGqp2XEgxJ*9GG_;Xp#!QnZ&mx9gm)Uz_V7ID` z5hTb6(KR+R8aA?7I@e6In^*@(^hlRz#<-lA84JZMEOet<%X5KeG8qG_&A~u#wYECX2cz-SeR|lm$NIrV`z<4K%8%H{*EP8>9#b6N5uW$ru)BOX0LJ} zq$ECM1l(i7`e+k0-7Ds+jd3YU2>H=)Z8RGXsTaumT51zfMBOo^Xbj`>Dv}pgj=Q=- zoYzuO6ww%-rY5fGm;t zJK}zN`%l0HX1dKv9!SZAb{sr#W>}wLdf+|C^fSj5WVh+1N7d?N#q9nAe7X3f;yKW$5H>*Q!v+)ZE(&Zg0neMm29;rbVOU=f z*5`-yd0~C7u)##F%3*`K77S5f+F*gZz_h_UcY$exh3*2=2J_torVT2s0=yApR5@(0 z7&f32afCi>Fr7}r>D3eMWY}PdP$6FcSQM5&kJdTEoPA+NlS+*Wbp(uj0BmCJ@k`8o?2!L z&rB^$QB0~Q9a_me9#CwF9@W{b5)>K@U?S6I7!8o3dm;#mm%;;1fCnJ-;Q{u6`YG^$ z6=8k3aDp;k%c_)?S#FJ=;@DsX%dnd&sBsco1&xzP77GX(J1el9CZaULZBwNcZr2v< zQ4|fd!XMM&wEe&#%H|aMq^fM=Os}%dCF4vHZi_NiwsVB=G%BZvvNO_(a;xm{v{f|k zNS?M5o>l=*L+HcP@apsej5Q1KrE7TFny|iFcv>Z2o2+xMO|;c+Pg~;}g@S^_HiX7W zWOW3MkPu*Jm~}|jPg{r7v{D_8wb44)+UQi+auIBa(1$IT(tA=>>QcOB z0b8yQ>(#=R32w`}6kAriZMiDQTr~a@$Z^I*F3ydX(s}Q=Q9BwXoAN z*a@KzJFTixSHe!K650mXsUfV_3p=gWHio&Wn!-4wHXoY0pZ2#6jyZ9R#XNK(bu@NGnA*!>{D77{6WztQf>;Lg+$#^7c;)6dD7 zHad<+>iL>&IU7zL{@!8wJ3m%&tou7%>;6Xc1^ONcLLYsh5#MV-UuaBd-RKKlq9bhN z)BLuSX}-%fU@V6L?0t0Vqv__Umc|)v=XWxiWT~PYQ_eQml(Q8o(^nr5`cQcbeenS= zj3u<4P zyP@CdLb+X9QjBe9hVf>h>5c}u^3F0vX@YYmCtcm zc|TeCe17VHxF0KD3@$KVgn+C}$%J+utbDF%V){-Hx5))5HaVB6Z?Ca5o?$B#6gjru zBEw$$1v6GL$KwYDs|2Ai6|IGW%BR}-91O(5Q) zLflUi(CbHFrt@HG0!k*di_ioI!}^70D_m!_!ewFY6l-Jt07ekrIG4J!jSJ0_$F7A>r&L7O}{~;Qu9O4`TE^!KQlwD?)i7oNPWG8wj3IhV-e(Xf&(O{;- zZL$+36WSH9)Az#q<))q3n@MagzuIjOuGm%H*;l6MdwE)eU1{pX4Q6~VE#*}%%Jed? zHYtUjzE5_#mD>q%KX$s4+lfx6$xf6^XxG9{*O*3Pr_ant*Qa#pYgm`IJzwJ)b{7n+ z$`pA$5M}hD9%C=Bm6A;5D7d84D8_HytTJbFA;a#jBEudwYJjffx25>Y4PMjYEnd?i&$Jzh4e*@ZZa$XjrsQL?mr#enZ*v*^ zW-|CMfE@-$+>gQO6&Wzodq8AxN+z@)z~Fa=^*h4)?WWBSp+LJUtljQXSY+7B2AQWA zcZSg|Sk!hkx;dTU*n1{_MPh#xcD~qkhumbw?Q)8L_0uU*s>>z)AxP)Vd3Q>4az$+1 z#*YXwKdw!qq}_NyUT3QEsX1(;XWT`?S(CeEOZD1R4)Id8DdrERRG5;%&k-H|bGOTX zen|fFYZwdugZNSU&yR_VrfURjE*DAM*vY|-ogDE2RsLRZdCvaw2V>?M^6^*^zC0V7 zS&@@4JWEW%cR)D%aEyNu@i5KKoE%?7d@#nohB1}(TeoK()Y0dz8#Qm6_##AuVeNIA8NqmkK=vUGefGrU90q zQxd1&fW9V2U!9|`GNC_&0%KJ==(KxDg}%muzFLCLh1k#^hUDT?3Hqu2pg#siK&AnS zpi?rTRRj7u6EwZeXsk;IdKf^b4ji1^hW7+y6t5?E>;1u_mk|N$DT0NNk_oLI@al5( z+8n*c1o;~j7&YlYj`Xx_on_ft$+BFC4V~V0EN&p^4gR1%3r0Zx9YID&$%M8U&^P7i zO*#6;9KA6|-(V{6dlVZR(kU`?DIr^3yy*)>7%h6kN^cGV^dRxrh&kS9&yk-}YjdPpC2n4^tvbCkTHH;l zcl%TQH84WuKaN#J)LHTa8$;=_RS<`8`!PnosY?m@}IEsasSVFYUuvQKZ=#orT8!^rq2W-Jj(f?ntsXsA?S#J z4W=TA?|S9pyI#3^U9Mi6E7m+T^l6Q`{9t}#u6u`4pZk{dy|_9#<=CNY%yr-MVK0Mg zO}Y4Juk^&5{4qLS=caF|vo>v=n{pj*C>V{ok}p>}UKV$iv7NB>#OtFl0mssu>-q7d z&AF~`>KRSBv}d4KF!+lYF8T7^u+1)%4vRW$*lbdYR~wz_b26RvK5xZdZub^zD*Tz#8_>$DW-+%6+Aw#g|6uG3t&b`q|g{&0Q3aqR}K z({uG*3>Q92%-5Bl(1>@sT)(kPPF1pR37dA7zhYXz6#w!Aw6# zPG~8a&<5mH=>78q)Y-@~`seL0zaUN%#ah&TEkV5?F6GkR$5ga_?&T3#L> zULtw!86=!1jmpMQIpyduk-U@{WHCvO3d#B3B6(O^$@!_0t4MMz&&bKcIBpE5D}LjF ze|qd>DvRei4|?)s>4qaEJ-@G%;0+yliZh};@C7q^qIGaqTIiM%x&jwE2dxX8vknJx z7iETNfdthtD$gij)?wG65vRn_3o~MjnO%b!K}+^>$W9oesL**ExM1e^Jod)Q3ab5B zQG2H2>x-O^4yP(JI3V-2t>h^r*D29BmTHO3)bn`EE~WeOl+Ws0N%d*M%f{rnK7PmD zdUT%aZA>mvUIFyf2J+B2I?u6carA*Psh+wT=!_8A2^XILANE-FbNS*gW^bhIIv5ElqY{2iUPrMYzPmZ#R^qqxLW$6guTQ z>K>PBsI^Y*=^W;kxFO*41|TDy>Lla$Jb7!H?!OKs?3YWbDblA<&l7JMt*3ObaC{yP z@J8lgbRFq$bgc(JAk-nC(Up=3tq7y*#5{e1Ih<}lt~Mc0>?QCcIrP&k>_=wuQ?j** zF1qMQK|_ttSp^MEAv~iW6Bf-C1rjB%HI>qyS|-ud(gK7~9&tZYODMpU&qhGXQ!=5A zja2A`5ivoAk)@4~7=@Aj^$eK=HT;lp7cErQ8V820s}AbtXmhqKG~*qE9gO$|YD+BfNvmh zrbpa8aRS3eZg2vW;LqYp9g|C&7QtuM53vbWNwPIrQAC<<9erk6B>liM-C1VXm5)K? zH^({Wawgg#bVej))*eaf&J^k%@2zfeins*KK1J_o!4u2iiKP*}B%;rX z=qE+=6HR9t{;*0zM6ZwNb*4RLqd?mjaSkU94uth`$~r=w14g6Ha%9$bg&T@k%AqIX2}EvDYfP^N8*7+btrsly}FLVXHxZjTt-2r=6vX*(kJ zW}2P@Gq+AFiFBt|p>~=q09e-$=`I6h^8oQWFnT)3r z<8G6Ywm9M~JTA%3a5JtW#xqPtyT(jWWqQtP;)IoU6A(7b!b-*&RthSwCz73VCRycl znWT5G;(;l0{vG#>DZ&SJ9ZxXEDEWExTqtKN~r za7iTeAQMEIbGa#Uj$08>r>A5>I|rTqKtw;=?C#r< zYxhz13j%ZHk479I-I!`;o3Tp%yI?G z{(xNVy@>HP#vFcXPcD8F9ff}$XYunAa!ZuF zFO`7xd15^h5e(yTx}vZPjz!|h*SAzZ5fmI=MFUu-`AfMkkf>kf9-@bml;m;n9ALt! z+)Z(aq&%EW;BloR5mdsS{&@>f&Sys(D``w3oqrw&(a+=T0OOA&@7i3x9w{S7!e#G@qQ0TS^57x5xQ6u(Prgm?Y5-K$`PbzVV0ZAVFb5)y6qNksqHY`Z@p*Z3r| zzw~f?JdMaSEC-^-$Cg@CZA?;bk)11Uwmc9o{*3(W&kzW#i2L!gcfbYaw+SOcN+vWV zTA_av(Z4pazKdMrYamNGOESJeF5MckOXPW4hH!Uq79p`pcs!TW&#SdjVhc}}yGY-{hPnkwPkIaBM1>_eW6NTc(_)^^d z0o#F4d_Yw1FBCsk8yq$IAD!ZwHpH9OL-8?MmP~7(1{wpRG!cq5PoXi`(p4N4WKp@4 zZQCU{7$w*)k2QvPGuhb^lQ=sVS3HQ!HprLR>tgIUi#qZ>(6u}GIV5!8^{(d1oQ-^EuXyBr^_YwNQwUT~qmEPdj zJ{^v4jz#tHQGHxgA1f@gN*f~%IG)SK#4?^aKkCL4665T+mLEml?Qvr)vm8(zjMM7n zAX`NT+a8*w-C?yLrPKrlH7u{C=!DtwMJcUZszRPwTs-@Ss5&EdM zoqkZ1Ugg%lK()o9TD;YLWH^6f=p}0ZVg>@L9v)qJ+(}W~Drn87^=3)3nwGD#qR{`o zd}{jp@(C(@wY19-*+My5iA<=K%BjkQ+P40D4LckUDOE0{-#05fDM~-G)gb_Ix3~R? z21V94Pk`>7&>f)<-M8VraOl1bpHhbI6IK$?W~1ky;Mi5dkF8;a#T?7f_xp67Ww zdf3J8S+UnUdp*l}r=I>^@8@}D=9$^q$bRno`|qO6%=0|&@_N6Y_fw~=s;2f+%9krU zRlLF!P*kO>0kzQ2*VC^aYLTQfl3hfSLL}=Bnaz+MHPAFBZy+L>2X@dcri@07{+r3v*CBBYOWW2XY|uK;<)3L;x&-A#e&D@4vbGY9P!z0+Jva4{DwwVc^;LcvgC zG0gWWF0+akc@;0QiWhqoFSm-9c@?j=idT9SS6anuS+U)ySsSRgifg@!o2=sXu3}YP zhnyAUINo#f4zI&vXmc?zbz80C&0fVPSjF4Cig#MYJ5U^JsB4zgtLk=SF6wNmtZ9?7 znc6cf#?!pyo^2JMiZ0N&bI$Ka$IfyCrj`TOt2l_s`~FZp=kT5Y38UjFpWkf zn}LO1x>X$XDjsST5AiAvTgAh?inFcah*$A)R_yn$N(+k#*)otVtY}-0CbH8fhJa30 zU5f0o4&+&0^uvq&eEt0W0{wcx$TgOt)gX;EY^{;_`}tH~xhc5XEL7Q)uM^Cb0!A%^ z;qO^z!C6aOHBBvTTjEr!zA95B!z#paME!d9>(ws>q93+!J(#9cI;J=eq$w3r2CIz6 zEb{$sa!i2Z$e*;xA5T+i-NK%=N}ownnkqI+<*NELvKpElSx zrNbfYC6HrEEDcOpRM%oQY~?V6-?SvWo~BewrKMDz5&NWW*pIT<^AfQi(G7dP#XbX62_Vk4h>C(rdz`}x6LZeDIOirpH>VqPi!An% zMC=Q?VL#epF9lTsY&^vMQ~AvVo|J3jH1>es!oKW zsv8vRE%t^)?DgHSw^-~=pi1D)HjAh=G0`TAs52;c0-^zSBtqBT4Z7nkna3qoyd6Y7 z)$czmNTY|}znh(DS$~ojkgh~PPD}(u_3a2M)h(=JN_>4v^3S!vA$SjiasAB zk=o-laMU!nG*P<}#R!P=EPM9Ehm5M8lL*?`iJ_ez5ADKuXwZF$rTe0w(pV$)`J#sQ zLP>%ExYpvm8tUx6B41UnN`(2!M3{l)W=r1h60zUd4f|~t`>l!CZ|R2pPK*5xSkurh zjab4Je@Z0w_HM-Pv&7!xcGBHJrOM$oBj}n1+~tS|?AfTkdxJ_7s}D6W5aSLuiLT*e z(}R|x`vE7u%2f3}lhrS?vXSXki}_`*)^Q-HU>f5ZJYRC46+U_qQRJc|)UScI(h2)| zf<4stPH?BW+eJBk^=%8vn?a?%-X%;`-$3rBxZKytmo#KMhGW<^)c3wy!{03p?|Iqv zZcu6U6y;Yxwm3f|VfrgtgQU%rtIfg~D|18DVD{H~QGZ95cS&wlGKjA&DTWz5yYn zV>6rXS|dl0vcx>x%IqIf8mie0)yhf--4-Wn24%Tfhq6pQiMN=CP$rvrTUmpUwb_{! zBCTw)Y*D2Vl~@vpOg^ruJu*Y)^1-C;F$`G_&9ve{2Y;AVF*yl*nVrCw(L}z4)Wa>Q zBSYRD--vFw$64HZ0`4)1xK-bH7~0~hpot;H<-ExuzVtBtT^y;==AzF@P6Rg*$QzfX9)MA94*}Goi~tF@tK; z8aCMQRSdbTMXG@zeE7PJ#sR;&$O2Om2WEj=^?bLcd2w*(y3x&v2UF?|W~gro96bc< zK8&se&#x}F(3P1ye%SyT<6>ww%^SaA(+5MwB9hudp#UrR{A4v#g(R((w(UM!*ONwfPc zOsL6C?wZ_a+1~*(+bWvd8!I|$#E2t7V)Kw~ZtmkO?kypuy{e+IW`)#RRCTk+T`uJ^ zNhiA{ooGoqKBTl&R5t*LgGu#up#X~&nsGS11+z|bi`!|5+uUEfzwF)t%*5 zcc!K8^aQ~IkmozOhWgHPXPoQI@T+?)xo1<;Y_=v`Qj1d6-65r=(+nh6qlVs#ol=MT zE^=q=b!Pb0-&%Tq(~aH>y4QQTTk2(&)JweE8Vil<+-z4{Y*(VekB^T{RlNcQx$yah`u)Y}=0DQOj740)ydn7v)TrwGZluO6sYj)4H#CX-R!b-rKNIRoT}1p zL@u{PF7p(*)LZ0|ZbTkyiCpC=a;3M(72SwjYl&Rb4ONXrRpqI;(pzywHzFG?k?RuF zV?$g$zRK#cKHYPbp{jM>C~CVw(P^P*Pk^E=4#j&6#fEgHqr7HwgR~=o8Col_#WxvM zZArJ*Hqr>Bs?FYzo4SF#)q=b^0pv|_kh$YFb|dxi!R8|F(ZN_cw6AxB|Ng;B6~@rI zmbQi(jA2s4cx13r*VfY6DrHg^^~7MMwxN+a@SQZY_2sk5ui-f~;o1ySS9ONByQ(t0 z-Bp?4HMb&#bs5;iYea7l*DtERh77*RY0eq^YO95yIm2T^y(zY_dAo zA6V!&3{xuFu&A)Ize6_T?VoA#_RUn<>nmC@KgrmiQucg z%uEbBUSXD#scc|NEo)TFMvlDetoovW(cUR4nY`dC^0*^+ds^f%2@%SH)$gx7V zlu4b!q%c}yIr-b8SD1#v3EqW(SY$yg2n(;eLL@&C^qGmE&+vji-3vMZ%(DQ@fjlo4 z6^E5|Uiq`3CcfFS+FWc2Ela>$n#ig}iL6@aWmQQ6tCm{;mL;%iX#!wN5?fVa2`x{+ zye5%V$0o9BwUZ=Dw6}$6e4_hsko~8tP8WS11K9Qm8 zybNvdGF0`oqRCV=cFN0mEXH<*tqm}`>)}^7S};2j!D&wfr_Bq_25&f2;heyp8dhrB z+FIHQ8!DWe72x~W;`4(WH~}(lbHdS@6CIW9O9S9_GWMUGvy9 z;_F2Cz^!JP1Klq`72kiV>d$C%E!DDdeCPvn4~yBK<<0ENax+_#rb8^|URhFg;Jq7F z?U|*lYjKXZxKD*?lu#ShS z-D*@Ho^rzq+1eC=dfiT{ngs{G9Z{|!z>C+qvUH6~B9Y0+5QsE6hy#G;o&d`(aoj#=~ zZ}rmlnzr`UiyNvc+NxVt&uZD!+}Ki4-M+f0zM-|Lvw6Kfb!_g~@vEEKH&(6QST%m) z>MBvN`k031i4#^Yu4$~PXs@xd$F^cFK1AsiihLURJn~iK>&V&BJ<+S8*F>+4ULUeQoxYId^C8&psvRoSd6;?##I>=b@a3bDqw5Cg3DKv$2HNbvu_xAR`jy$Q=%`9=)7^{KSx~@eIom|=;_%7 z`P-w{WM2@yCHwxAuSeaHy*qk#^mo~NqPIuCiJlvMJ3Df5^s?xM(Y?_>W*gBbhkrKW z(y0Hu=-Jsemd$8+24-( zYSb$^+f%O3es#p-BR(H-TJ)6>e~RplT%5Bz`;6$#*{5b3*^fubSp@n(^z9sS+Ji9i z@$AcU$RS{$Ndy}F8a^tk8s=D(SJs+%ziiLhscLH|BCF2z7Zv7eHkGa zlZ(h*{az24;PmS)#IWy;ioC|Z(yL<@u0r^!eO|4@as-IugL;d9!%wLrJ+M0@vvAMZ> zRHcjOjIC~~sp{BRgP6k$MKs4bnl2rGW2+h(hu7AzJiK%cnvq26_+vD6jV#ZPBlbd~ z4gw??4Q|xZANDgr^B;CC9~cdGQt7V;{`uAA^vf-dKStBOh2{0c(Xak6w1EA|4yO!q_ZYW3 zdk^FW2&WU>Fwh+DqRUqX<}*WuI7)fiHab)DTt0&j*F**i*<_EhQ^ws$R<*jSHAYjlu~mvbr+rfH5mOYsx}{ywS2ig6G0H?m zFRjDB$_XgmqUf{dqG;hPBw~tQ+|W^4xvrQt>c#ae+RWFBTmE16>H;6_-Rs5G-E{dn zoAtKUw6?T$W;TMconj<6$Y)zK#03TfHY9$DYe(Y|_o?&^l-s>aUh8eGzN zl{;Y)&Z|4C+B#OZcT_hvRF17z2C5I2oN&Y!N9Ha1=k3w({eybnkh*rje=WYLqNAP( z&v|OszRdHFe(;&{lZ$%3+q^J!YTEw;;f;+gRZRT3r^Nns_n~K=ll$lLEBmaU{(Nc+ ziSJ~?cbgc#;Sn)>o1?TCzD@6#+17AfPNCb*6#Vq~Id}cJ{o6BcJ3j4+XXn3LmpUr= z-zaF^h#sE_zH8vVvEQ#M9Q4Jwv7fFvde6wzhyOdlmAo>?KXl2Xxvzb=;^qs#+%R`r%WOIs5Iy>R!jGvD2Q+RBrLT|fD)Yxm!kdh35D9qYP|hKfdZ1CJ@V z`h$OlPda1qlG*oOJL;NQ?`5T)Gx)!P&(?fQa`ofJpyg*aP5a^P-A2_ZrF&A#sS*9R zk-|jpiJsqB^|w`DPp!;<<%G*02&b<3e<8ZOwXISzyEg6<5wK*Q;y0yZ05}JqWtpQxkdSN ziWU{mnzg7Pe??2@%*j<1&CM+xIM-J+*VW9NjE5O#PNtRY%*idyGbdLx=PM`o#1gvg zifa{o(FsrOVlLxTrdtvV=jP8VEM73HXwkg9Ss|6kTH*0ii`P@v~(`*5R6PDt-+F3 zv>?9}@QMp&73R-wtZ46OsA}kdaZR1=u(}e)wzjl4Fwro!dgf#S?{F@#6JM$zf$J=R zg|qT!m(4CMEhwCwUn2>eIebv&B}l5EZ75=RPX11yO}v-9T` z&6-nMICoAyXFGy$t%nC8m^qF)5A`~ysMU4#Sq6Z7G=UAc(OY`S1DqK*u zVDJvm+42!xRm81?&Rci5kqf_XUMEYJj4waawm_p~IDy=P>oRm)y zWgr8G2QafYDe)PXcHDV$81*z!UPhE(gVHoA2FeX>9Zu3`i1c^EaLC1S#3X$vO{r?F z<Pw8wzL?|UdseKbw&|GdqUOZ%y| zju(il|9Bim_feEV#HE^CIv#d!Wj9s*DP-#f(DEYDzdiwnr$HYSwoYJ_H5(e0lYM@b zXzBNkULxA#CgL!xucBlM+9`~-qMAMM!v$Xq;sZoHX%Y^rK%Dc~K%c4y)&55^>h?}{ zJJF`58En@O%v-xIlBs7h>gJj{x{JiA=`;JU5cN+){VJ%3JT_2evS%^srp`w8yc#FJ z5ah2C`R}LT@H62yq0D3C{8b$8z`Y=Tjfjt%io>*ikS&Z{$Y^QNVpl0qzfRN{SblYF zlBmlVb!$xjw3LFD?q{UJh(?-E0JKzfNyhA)G`8X^B&*;Yn`h8P^>a3uz z|2D?ajL9LUaCp(yQQz+p+u{Not^(VkFv>S8sBQqdlNnn()|!&5Nz;48l2?esqhRUU zp+Hy44};(d|6kKot`z2N4656p{bDADw?RuYh0fnd%x~x5@C8z15juWo2IDp;zlm{) zcYf>$`aAKAn2*EOL5dP0$M}3la=d@ASS0^bAiYmapA(beU}}b*zYx>HijE1JCoHPj z#9T9w+9Z7|^#kHtQ-VV&I_wCAYe4D$3UL$`I;d}imJf;gghe=f2kPO1`YnsPxTS6O z<_-*C?5R3G({dB|J|e!#QXE<^BEk)R^%Vg7o6N|EQ5zlJZc>cHz;b*U4tUcSeHc1{ zx4`!w&R1kTiOb{n4ruzAG<|Rk4jV&?GL5QQ5Bg9|{rlq4UDzbXzoR>A=>2KY^W6f@ zPlz*n6%N0Ev+E6o98W!F;L$XH|AoZ8gdVk}1qd9&t}z|sp*Dp4c{`+hN>a|K#bMK- zu#`O1Q|W)SgL_`{Mr`RyjQha&88M!X&9$xoK1kL|ZF^xz?SG7ebD`NcF@5)d?Q>$= z(}2U#VCy;?aq44?s~wDG>=ug^nsx&%)t)T(M3UBVz`{h{+kB^sq`N zS<7WvkVnz<{i+m2KxR(W^CS#!_%bsZ5AuNdZPC_GRPZv z&y7JJwebmIWo8?u-ZVEZ-&lja0?gt#9%v5d*j&s{n`e>{xiH3iYRXro_J zP5t2l9G)4WD0Pnw3Fdks0rZNt za$3a^Y+eB#uvt@usEL66H3=@g42R1OrvdpKG*kw-j~zJknj281D+=VA#`XC8vO+VA zifBHcpD(%JELn&GtKxV1dj#OIt}0agc~sq3-+;p#V-=--Ei?zz!{Mr@@cba(iknq~ zCx}|Mz|V&$)GKTU;CqN|$W1sb9;YZ7^4=FN(uc4K=suv_N36fO8Hc;TdI+IJbNIW=L>|U%RL+B!JC%Eh zr^oMccuV5>(Bg^JbTA&%EWGWh+($ee#1qI>lo15c*K<=}wK+}gm#H3=<(r=6n~~+~ z|FI^mSw5pZ!AtS4=-ZV(_@mphl%kHVjMl**7u#vRnS(08^RLLBgB(;8xBW<$8^f~G7lgA zN^9q|Rcs^^(PtdO=H(B<#{I;9Iq`2|`~wjH|CYH63mF3&q8|doqr{N%M;tB%L&{oW z_)%tv!ILd*=ynfb6Z(h2^BD286VF57G2`rKiwll4xkO{w53a|F>mB0y7+k`SsJs5S zD=FF#{AllgSbjMb%uf*W$+zQh*aTap-{OQyiBqn=CyCSlCma@lbF3V!P(D3NZOHPi zL$LO+WC4Y_)8WAI6iJ$M2M&8B3@H{LFj#yt0yb7WMtt{qBWTa^bpSzcOA-*oI@@aT zz{xT(blA20D7^6uA?bT34t*w?mDbPVCilCzO*oH(`LD!$1~HEZvs4cQED6w0x1ZU4 z3$wF$0<6yxYr$PO91m8r;!`a?XtwxFl}~~1IpTYm_^t+DA8L8n83^E%zY*~j6Kxir|LGJ=su(` z^-j-%@kL_XdN&S>z{uOhFpGz(n)8^-o(IoM#PdDzbU2kgYc-9cimLh=xedMmz5~Q} z(>*x+8GPyWm;=6mcJYG6wX_xQgRqI?A*|tc4N{bsiD~m+aQGZd8TFX|(a7?$#l+@g z=6sjC6R*oFuMl6=J{)FER+J;DJ@~N+gVD^_|4ob8FK3>6BUM2P{{6KlvU%}qB zT_FK9Q2H<&Vs1i{pLZ-V?W|_#(W0J*Od{9feShUO5^>>!INV2z>&KV~UjWQA*;Fts zQ|%unS4%r=1$4W`8o2PG0_Am*^1*%_?!~Hm5W!H?Cws$fSu~53c$v>BmT6wV=3j+{ zV)&P+^7AnZux9#f>PNG&fl3711<>~f={xsP9G--}+_?jNzP|<4)tIZl?pA1fo;31F zr(2UW1+>Ynxd)r9K{38Fpu9;jiKN z)d?`L;QI*5TZCovQ#d>eEKx$zL(M>aee2e4Po;#<+0LV#yKtd3I~DU@h{te=J6&f_-vm)b8@V`U+&pm^~!{BE|zRyyPun>ZiQhjI5)(MuQJqDDRWT1Eets zja~Z{G#fv*09J>56=*qQDA31&41*|Fxp+$PK3kAypiQ z!@Kb$Kyomx=Y630kkCB%1`dBY3WxJm)_x8_&&$?z0d#*@+RY347P762j7(qu);MH# z6H3sqtag>VP;OcH+KciL0jT`|hu5%WH;>c@0@x(EDX7lLP?y6K6WvkdXkGU}#>XV% z*pF~H2Ag=b_0$FQf(ht}may(0Ev+@8b|56DxrND1?L)}=gk%l*6o>aAYcRW_d{SX#QW2uz6qN@F5ch7fH>ZS;@d14({Z%@) zHL;pER|xEZBlPSj4BVSR{W(2KPBn&aMs8$#LuFzvA`0^J=OG7u#7=r<7m(?vkWP+b z8l`kZhSN@*JRtB*lZob5iP%Ibq?fA#fne8_N*8WuL4bc)L>(JZiz8|uWgswOn}VLN zm`5*2FRo#aSg4)79M=(IYqXJvPSlJ*yaQ*-VmDWnn>p@s= z7O-8YhTY7aJze#O;O)Sxb?u@CUt~3S!Vo#C%i3yUEsYy%L=YbiC4H2AA!qc+juwRU z#&V!+kW$-Lv$+*tlkLsA^plZ$E}#Tn>`f)Kzt)?))O7|5&SMxyFc(%f(2Km-9$@`7Sr9EkcTZ=p)5)h%N$87ZBCRfCj9 zGzc5>DWKcSguM^iB@Ip3PNZAARNsF?&K&kGGNs-|%3AQ^RT0WdhdFH02e`wSF#+W8 zdq2pcx0eDvX;nr&275|{)|0Fyz%BH%>=!ZJVV5Cn`6w)Tn}l2nH`G>l0GzTz?d>C{ zZbbgYjQfhgR-eHc>5W%xG&4Yt01y_w*s2G8ALS>Pv!#{?8tNJXyO}PB%eNx`a_98OGVmMw#m*VUmrr;C#RV}Ssm@qR;P6NX=jNx6llqS1u_Q@jxeMA78@a0wY zbq=OoV7ituo#c$*miCVL5FX<4r|1A>x4r>^eUvNE$oR7v)X%~L)RhK~qz1}&7UM^V z3Q&BD78>|hU&K-a-uLRs!@mU*Z)6Y;^tIf;yVm<$UWcMbnEv0xR_A;!!Bvz(wI+rYh*|YYYUq%Ohf#Mvp)myIUZ3CTNggdjghRz6iH( z7vSy;#>u5tC&;!2cJ>Smqd^2;QdZu^Ev-JvdDehn?KhB8K8!eb9au%jFP#b??yJKG4%o+d@!+=uJ(b6X5KLf%(N(jxPpp6YS zOX@M(tA+#8nae*w^PrglGDunAbaZRgjvkK&nY)>)pIxeoS~{D}+If=c(OeZM5166> zyw3>tTCpm%ZYx-q%dwBR?{>LOL3_Q-Y$XI zz+Q55+~DybbMvh21+|#`xQVWQ3-t8ABkRp@TI>1fXn^na8~MEMxT_3@a49 z%&0Tsy-;7%h^Mq1HP%U8oTQhfna_IYv;UA3Q?=+uj z=xCx31Yv%@%0oP zR0Z=9MP<*Pn5SOK^bo)9n&~WIDR*WsW#3>tzKdUx^9Ar87hX~n=U&PKRskdEh1V_= ze;eMii13#zBK#eT2wt&>R3dmIEzOY%{Lfx&h_thJ;vz&&ZvaHv*wzvwW<`-&v;m%^ zSzV;E22ah^aGB_4EvaMiPUdtd9z1sJYW~0Tox5Im)k5*7N5x3Y7OXWRnTkYX0^Q8qz%J=kzg@EG2t;Ybpckjb3!GI5Ul z1d0Km8P3epXRx;oBGacwwD?91(hltZs`y$2ZrN~EV{zfb4GgF{2V%l5RqcEoW$W4l zqQg9N$qO#NF6cF2Ro7+~kQ9{v`}>~<{^x=JdEkE@_@4*<=Yjuu;C~+Yp9lW`@<3@; zS3tQ!DUEdftdvgdSDQL4Wn|YMNL&BLRAoS^Z*A{VwW~^16r3t?!mo(4WK0Y8E7nu{ zm6Q&mtZEd|uaytT-&v4qr1rb6;N!>`T;fN>3sOr8aL5bw16>X1@Vnf&KFD7$XZq{8 z{yL$bk}+)v^rxHp8<0i%yT; z3f5e@o>f4{yf7hdfmk5Mbux(Czy;GVOC}JlV9llLSp{^=8%~HjAQp&meXxiJfNL|df>oyGB|3% z1?C#kk257>+Rwo89}`C%vIxhC48wmCVfckG)PoinaGeZ>_22^YI?|0ZC1aXDwOIG1 z>T0TRMVW^IzX`^f3gKu2J#gSU862J90&@rH$C;8btq*YYHgRl37Q^w7iKBNS9DNDLCeQ;1 zu9LyB6BgCoF)a%i!X}0*kj3ibVY5EMiEu;+$CaQ54qPXL;~H>*`D)USGbLl%aNx*E z)w4|~*CLmo3}NobalkOL9Z9JNIgC(U2UeiMbuy@K0vDKnM`&=SWK0_cR3lUM5hkje zk*k#r+DBb`7d;qhj7;5G^lb`ehu@|cBND+noM8PPynu!4WMKUPTwuPH;NVQjm^K!$ z^i+L}3F|iGYL5)sN8=28*4fYr3QgCHG3FIULX1G;2+AKp4=A`!2Fe}a0`s2;0?w3- zX%hfte5#&nLisatwN=7H^cbcwJ{8r7C1Qt>o5(*C3Dlk71Sni51L`qwf%#DagEJ*# z+7y7AY$AFbSrkbPERrTC!Z4LEJONr@z;!Yho(30~pCa8jQ!=LI0mBg{hG&pP7-|@X zBNAaak}&)gw7`JtWH3ArE-*hwx^bo?RyDvdBUPVn!gzrby@-=mkgBzcYNC7MT45?% z;uzDN;3go{7eL@k;4x+(*zZp<3R98ECN&cfQdD|?N(-!P7HRop%*!Z%F}O~~nAgAs z=2vkdV<;KZ=D?WZRDHH-%Cxh&5aDn+P zLWDCVW7+~Bn{UE;2U!GbJ*(>Zi7=E9hIc^=47g4P!{5OL=D(3{oGBU8N`YaKiQ#=@ zG1r`Gx@J)#9A$*#1JDBpu9Ly>F}T3|5$VU7k})j?9E(jHpCF5H9Ls#MI1z>=gyB=r z0t2p-!SDsR!2CJs#+i~>vjD>~6T_FtA`I;e!?HvemJ^1rKno1GP6op_-~#j4q#I{S z#7<_>G6vfcs3Sm#KVuoWHiP7@*P z4R#>Ibu!2XfD6q12@%eejA`va)@H&Qh%5$cyBRHQiEwlfjzORY4qPXLBOP2|4&g*N zC>hhX0LNw%$6#bJ91oc|HYdWdm2eCJJ#gSU85|kl0`pLu2nQu&+VQ}#&BQSbSz4|b ztLTjZV_PB|ClHQI&;tjqlfjVCxdJRxWKFtBAh81(@qDn(@a<+k;Q7tT1TCh2*(+OV-)Ct1J}vm z7y~Xak0$*%Q!=LQ29C2#96GWH2VYa3l?cPxgkdabfdSXaV3-6hFi#}iI8!pF{RS8= zFfmL<7GdCPxeF3uxR5Z==hJ}!*U4Zw3S3}5l62!t$(VK-FkEV4n2s#Mz}Iq@Ccd9J=0ehqGbLl%wZL$ViD4G9SWH-JxoZ;PxQ=kl20d`#IvE@#-~#gk z(vLGGW7?m9R54uH_7AEq7NUSoaXD7Twp#GCo+bTG3`ef^FylsZ_}95kjr{iYti|G1%PJI#=jj&sSW%@$W8}4kl{KR zWaonm%;ymzoGBU82Bj721JlHw`vu5iu&f2&z%-zdZb2Z$C-$jn5b+z(0|%~?!Lb)y zVE!%X$C;8bEd(4v6URl!A{>128%%^DoiJPsT42C+G8irc7nm<4-8fS+rX30lLre^p zBa1NbMdy%27={vtD?kejxK0Mc)!+j2RiqndO5!mAU>Ig%xCU9QKCA`butYe*gyUM! z0|%~?!Epn)z128%cyAn=t$iw7`JtgTycuT&qgemC(Hk zi*D#$mZmQis#nL1rD;2hwx>*6l?H-i@o$aD8MCwKyA;J(mbSC7a{~UMrI%|<)9li( zQV4WviVu|AQ@}roHDJ}mv}1vN zwE$kLm8Ti22^%>s#U~Kf8ReA6ONR5rL}VyMh4}6(F7nm@L_I*@oCJuj^RT#r_s_)% zU|15Xb^uyyR^s`b;sT;D)^exTl2f~WBbYA4SzDVX3gI==gMOz6yM9ZART3d8A{XF= zkzIS4jw)__VQ1HyZz@XGv^u8jBBAVJlJR2iee_i=_6-1`7Tbs0Q%b1Yz62CYQgCrK zUGy4Nm$sxQ)m_&$ln#ulMg8SfromU02komCcz2D6qnP#({PSR%{(x{%x$!_6?R7s$ z$Ki5<*ADi*9|r$gXvFy-Ylk#em#S58bTuYJ(6~QMe?(}kF&<$W_tP<3PFNZr1Ai?v z;+%xWb){+pG_H$jPe9}2Lfv}faZ)sK=lp!Qko^UeY@V6IPnO;%p|=rwaZW;SYpL1- zy{$3ruh9EUn*MZ}{*=(Z0oF_R7M>v}bZ-IGAZ0&oW*bkLS0(I$5w;urEKs!p70yYZ z+E}V~0@cQt_B>EMC-7`?D0YCeJ@nPg03J+3P(0^AV-w)zFh;=di@X4Qn}HAKB=DV3 zsvZw~Ct&smdm(uhX1fyjQ8aK6oZ+uYC z75K(zxdPwLqI09U7C3FZXLgn#4~+06cV}k}8*_4MM8N}9k-Uijt^+vENdO;Ts^$Xt zc-;5`@X0}ak^ny8V&;!&L3n&0yX3z&p-p1IB_!HpcaCoi*{Lk0qo7x8g9N>lBh!~m zV9HGGxhyqHRL)e`I1x7DoP>>2OVuf`aVnk_gpGMY{Rm;>G_GZOoQ+4gEz&Aq}0`n}6xi}7Up&PSN#9DJet_e;g z8Q?+Wu%_5$&1_gR8`j{Qgf;U@)w!@{UQC+@Yvu;^Il`Lx+8hR3LZr=g=L7_i+^9H_ zlq0(O`M|dT_;5}F-_fON8Sot)(-s0>Nl;%P@GaIBxY1}OZbt_Mk%UGNNoEE7Y$#d; zd@9sGccc`(s5Sby0 zq-e8>_&l}}s5Sr<&Pkx^ELA&zsxzk509AERuM)sEa$ncQ`MSytQLAP-60(5CiKHw+ zB=*25C;V+z%@E5)S z#a1X?IKgi$8Pl5KyC&hdu9H#Z?1q};F3NDEc&xVo3tRL653ZBJL;Iv+9Yc618PhfZ zPpgS%7vYIX9fcEIs{@=PC9Qhf2qE2+1wvdWgYYbl@JvDmA(V`18-cJhsCNYQb`$4r z6!4(i8pQnH?EmT4-+1;G_po4evaXR0Q$~kuhok1Vm^Hstn#^x@3v(@RxoEld8SM!* zY<6mJXy0m9^O6;~bXR zo)|a{AFXf^t zf{u9R*6$2z+pGwp-}p1S945-ZcbdTE@Hiz-z=;V3oZ=LKx8wM;gqIS$Q-gTN!XBg@ z+ZDE>%{?9|=RUFPvm*#`Y~W`HQ~2c&9y3m*LUwax;;z#Re!B4=&o8Vjo0+0yPdh6Z zqt(1<~ltMs)?b#r5AAGJHU#E+`Dj?%tSsFq|J+)dyD^Y3t? zprK?;I~NUZPf$N6sGn^%xSLU+o$uA)eiPST&Pmu_eq$OUyZM4R0cR%^aDh{R)!=?l z@Gkss8{GNc4enM5=dt3jSEeFV-IU!_PmxCIr>wFmyEGY+zJ*myk>U47=e{TqonwyTJu!{GJeVDJ5gtHE`+GLH(+rex>Qvdr-hly}`SG zyFQ4TFhh%0zQ)xQP12H&vtJj)?x9IXGbH0mzHiLEVO%Ar9KN}(8^2xeEOW|qNV&nJ z6ybO+`R*^U4!*;6GQPVXTwume2QlAKGN#=G-~BGA-)K7S0pvQSEZhyhk8{KC98r3s zoN^fOd(!|BK5Vz>X0qZzsDc%^PR0uS;1F5y2%*QBk}>TMu;SLBev4_vqsYZt!Jc?= zEB+W~#jP@K;}$vPu;PziR@_EbJO)*;0@uk{@f5hg{3M~rnUXQ>&#>Z-p#GPXjT2P|CGnUYY`j0H-)CC)E^>JsJruWA zzu#J!-=C5Ti?#b$Mhb3!@Qi@QNoWP_An9vmI9AkxoL1!yayuiTL|cVJq9dLkGUHiv zD-V+I-h+Yg9j*`3cMpSW1n#B5XCq?TEAZFLLH$5be<`THD7-dOd(9CKFWMtDj|yIF zM#W3s#b#_A@GdqZT&$Hla_VB?!X z{f(ghx-c;JVkZBcAnf1AE|snuF-~Z&GrOf76XQ(=Pu@2XMAF`i@kSz|cuDe_IiVz( zsAK{IXd=#Ksae!~;F`DLn(=TA&Pljta;Z8Au9+Ou{sz~)7u4Ssewo6xydQ+mOux`i zQXB6v1DDcd#Bu$uqbrkkqk`P+0gaQpvvYz`_eNzD#+a)NI(w9 zaPe*r2zqxm9K-3|9!NkhJLVs7%se;-=Oi3c5{qfy!X@7X^{<6X7V_r)&$w<-e&9#@ zhWW>hb14m&UneYb+=uZH=XR?k&a22FPJT*BpmV!d66aO)YvSD9ge136sJVZm=KdAbzZW%k46nH#yRW%_vFh=1fcE|Wq2{92&`Pxky|)gPZ}N^4+^mr-TJl{w~$#P2DhfXgW?y3pv8V7(`&GYK#Hq zmAMnVO$&w`q0k-i30lb8)plJAi|h=`)hBA{rUUHKIC5`Scf;T}LT*>HCu+4JrZzi( zyVYj9yBh{CZS*9rHq_v$!yNdG_roSANq?fx*@)#*QiKHyi-8;zwu5% zR%nUemhcrS&}I?0jlrHoH{<Z^b_VlVyZKwj5Uorof8j&VgJ8JAa)Jh5`z)fM8rri!A7`tSsryozK^ zj(Nps*Sz9z@-=&B1z%@M&evCRUtd8!h7d~P>rC*q9@58{zNY)UT5bq0bnqCV$J4Yi z%tMm3B1f`>KXq^3+Z)a^ z#gXaoNuw9LTdGa;G)M{*0YC}@r$N^ffJrWcCb|rgxPMLF4J2=J$e8415X)-c808jQ&#E?&31@n=ksXrwBTX&eza#T9|$C<5vBFODk0mgFiJq*$!V8h4jLZUJ%mrL;B2+K129* zgjOtC-J`qcy_Fdh27Du&7tlsH70h%O&=xoqL#) zQH)_`=dH9+j$__zSTqVgz&QyYjK#Ys@WEI-Zw?=ng!Ba=eSS!v7t-g3^f|%@2IJSDy`&M-+&BD9iw zJfPSTJ=EE(5)|qU;3Cs!=nasfdm=dHEk*>~EDPyNMGzEnEi2+` zW~tSGifw~sEW@s@43>8i*1Iw_TM`xUDVFttjefMLZ_LX~%&> zl+7vZi8tBCnb>5TOU4-|+!ke;Z088!2~3U?WoIN5lks@t5BCQyahI0~; zhF7QOqpw+jFI^+jR)zGHBGO9u++>Y=ZlbMpN7^b^FBA|Ywj(r7BAX*~6 zLqdR^Vd{{)pHPQXwUQ3U+-Qw!Zgebsxe&g@ISF4bruU>u)x~(t0=`@u(#wS}W89Zj zalR~f`*LlZFFA?iOHLyDQnE_pbt}=~rz)49D&eOk@Dt8S_-RF{x*UF5 z5z}hnr<#ynE&Q}ns}FHkHH5H9Z9X)02ZkP_#<7N#9|~>=nU9dM6)+-tm9{RV)i75| zX7UW%HGJT+htzklLlBUM!PVM&Q;g()F2?r%uZmftHHNfmSH&9Z*ciwsZcS#njn-H% zl{cH^wpIs!i&<{Nl=}JKt7u%=_D2^Zq)t1^ONc&PlX|I()AIZJ{ovb)qeFh=x$lhxtu$!+eLU!&nLj z*z4%{N7Kz+EsZnU!S7@=$>K#hhMY~VA!j2@rmsHWoP^06=!*|{VJxO?g~?k&`etEu z8@GC!+iDw?iPP9Z75!^AnA9Hpn@xU)ecN329S8e1!akgnu+M%^>jc<$yfAK?)+PG3 zlR|j2&1bgH#w$r@~G0^_KHvs_hhCRKrWiwf7tQ~|wy1ZLU~ zrYfLhOgjfvaCS)FZPvnNRxO+#(vGnf=J%in;gxfqJKNYTk8H--a>`-Kd8R3R4CLa@ z4PpPmT>kH)e##-vA>dr607u#RW|>$L?;$_YJ5lHmaGi{wXg?avw7E@wqGU|F5Ptei zNWZ}J6MHj>jpY}+9l{N}$UA#)oV^z$bl6_gChjofHwh^(a#1Fhd9g_;{PbJ$)3w}B zxK74TH*!DG?lk#{k}>U4_~{bUNo@C-IqCAaCVdHO(stx)Ji~5+z7;7VuNxwN4{9;? z^jgVJQ4WGj+KpoT*3Bw&G#4`L<|;DmZo`Jx4UvEsC*BiqcXC{S9ie}@t4c4UDy6SD zBJ^>cOqKqTS1IkPQhu?iWw4a7=rzlv9o=$F=dp zBE5RVThDcI@p6UNuy~Evu*fs*Kw=#{XSb`5Wx6SOpX?>n;qdER4!@cleiyLA;kZu5 z;q;0OnCU$rayTVp+V9}-8$^o6Bub% zUV!V2H$FaxE%c0=NjR%=w`@tTP2~_Tsf}}gAWmUi2H!_?#Lq3R__>MV=V3St@q_Dw zjGtSHi-v2Q*jO%-xUrLt8$0RZ1FHPJ;G*=MMfXL`IpqFmF1|b)omQM4GdxR7!jC{W z>+vZ6BI4sTI&*S-5%In#`y%2M1UoRQI2|88oShB>W~V1*0F9#n&IVbWDH+q|!hkuZ z0W>%nbG+~qN{XP53FVVf{+o_Z5=u_aQL-NooR<#a;$2u=C*xuo#K6pkH=Nl!vD!i) zEJ@cFr0erdoOGAdn4btIb?%=K&gXS*h_StVGi2v2 zBKIyz4m|bb0R0D?sDEJ{yS5nMk51Ri()CgkJoWTOX(I460Dns0Uj%r3(XH!60)KQm zzOT6y|BN!p3@${tp1%ARBiGZI0ra>|#`V;vf|>4f5_(GFbF4tWEL~rkt}ijs(|eZ2 zl0@ifa{d{iKOkIxfY2|q&@YwHb0N0l>CMf&<>dI~$w8;r7Xg_%Sb|PT?0y6Ks&sv2 zy1v4Mem@F~6^WqJ>LnifDhv8b2|5>ILw^90^NuCx$0i5;5ikNWbw~uAk}<6u(ASut z>1{@1O(M`k06M21fn8iHPv9Q5bF2*}S8WSl7()7As}x^%rEU9V5q>(cdF z(}3quY}6()U^oo;oTB<|5!G)~RIig@H=sj#l{%DHqegwY^l+9@CsA<)ws9{&YhEK6 z*O;7fFM|WO`?EroRnFnEV!* zj58(ii!(5NbGp7MUEgS$`wj|>jfu>Sz}zp%+&6@|Z;-j0CBU1c8s%ba@b5x)-c|y? z^`OC@GZ-HRq&J7?`+(YGgNyY?2kZL>>yHfPlZScQ6NAN6VE=b1#v_Bx4=Rg%48D}V z-<^-aj`AP1@^Syqcw+F*{a-~3=#cj~6w_w{aX!fLpqzfm{eIYp6YESx65sX8z<0ee z^r{TKGDFOHsO!_}GWf=PeTI95Ql0UE^u4$$IptWP)MvQw`LLJ4wT29Qv{!oKP5u}i z*SYRjbXF$Rxh});hJsO-A;ofu<7IJI8CwZkPrN<^7jP_%8J-_cTA$(irk>G|L2Cwj z1%tnc;gT=k4O{O*>F}t-hm9tsc-5gc0~IIcy0}iJ_CJP6crU00_1&DIH?hj*CT@tc zr8$G_;BRj>C3N-%7r538#AIu7s6OGSI)JJ@LvNE%ZFD={XqS-~ZF0)tw2dxYorJ41 zIb5G|Tw8!^bB4Z2!gX9+aBh~77@Opj1J`jbTw4j(*5q(~#&MkhT*qhV+ZZl-~zDR4{CgIJ=lwYffEg~G*VC!Gk{^30Swa{hKcU$CFB|n!|-DQY{f=Xl^xkwvHcJ=)*<(Y zXqHq;^MLcSrHnBwgMG(jXVH1td5y!Mh(=|g#q~k9IEI#fR~*drbL51Uk}<7cX0hHk zQ$U@CETeDc&Z4ujX`omQ-Io&7v$CaJTKkv=*tAkEv9`vsW(~`*9~`R94OZYf z87oS_1?B~W9%oA87m8uU&`kZ%OnpeEJ~&fP&(uSideF3MA&9ihOy0eOGuP6V`Uj>KTK#(aeRG|^U>y1 ziJt>9U)$4&#u1s0S&O3$jEs-el|W|osVH?W$}e$hr}HBI;jJyiSHA{o=+dCn;_B zT$9c5k9Id6o_%rb8Izl<&|zI^I#Moz~Mn z%r)7DfX^#{oOG;{jNkL*wP}X`8j!GGE-9yrUZeC(@s`nAN(V-b$;1ZUuuSx>!;a1mo-e#P~~%0 zK|@0b&*;O1Wo3v0iIQuLr?iKb@ieqF0U?aXbuvRs(8r8V!-7Kv5uuQ!fF! zOTb_V$QvDoaihaY88?)y!B0lOobh2jH>{5f>tjv3G6>eBFmE7J!=6iwDPea@9Lum# z7#sy7__MfD!{pK?hw+*9eQbbLy4aj7H!Kaejy5wnoVeqe;w&?4TJ%rl!E9M>1HtI zQ0+LTCJXV4NQpj5a%UAaQNaD3G&HpZb?n;Yhx_5_NgMKT^9Zn3a?WmzT@IUF2w zIk-d$II=4@PGPAm%Wz0G7P`2{gFA0Ad1Y~OUYQI=XrF`=d4-a={Q|En3+qe6`V!M0 zQ&371dSgq)s2H|nu1Rc38WM=@$i ziq2zYJUlupzSBk(0ZxrH0 zUZEtO^@mq#!g_UBuQL5H3k6zz*x8-bI1pCLDQgRLHW-a6E3ECflrrsrFzUnTg#zNl ze^IQC#)4vqfpxe}W-OQwE-=r-iL9d}epUe1HHG!Yu)aR5uM6u9ri}|wthI(=KJPLo zQm51;TVua?dsuG^>l;kFm!M4B6gD<^)l!>BriJ<#;@liIHW6aBNYb{1?Zq@b2WBpv zmJ{h#uR`rOSpcxEBGPR#9y>rxajS{u_^{RviS)~G=2#q;5iqu~kTMyMCB_p>Mq1*C zxA3?mJHySmh8RyY8EuUzLSxdIxIoUFj zyt3U&!7KGd0>bRGjiQQloDN1T=bFC)4ORaT_<{M2()3G3_)o`dwlDRI|BnMy}mP*)Isp zkv|%-i)>@2ooZf{@ZbG9osew-JCNZz8D!6c3(U_EBAh9SZ*v0KhhhB#6WI&M)jkOu zAEM9UyY>{~SJ77ZzoL9IOZ!wVriUaP#Sr}>3Hi)w0N4`y1mY}yUP57sl24@)u)ajB zpN9p*80@Yn?0{{N?5=k=ls_5}99~8JSf=?)xd%wpy&3!Hp(Lg22t*DrVOQ>|Y>1>h z>`mZtrO(4q!k+&508q|kTN}%%Pa>P|%m&e&*=z&jWs-Mk2A_`%WBc zpG~YEBiHyD$l~^rj9-vTw}$LedhqE9^5xmtQZ5Ci$Q8KH&dyV_pz;$42X0&^gZm%g z0`pgd7iUVwv;c7XvvgmU*arI=xrQ&xY#j0}EkAMzw_Q3M2+y~6hMy!0zKcrbW4y|R zE#F1+dXO#OKp||w^+DPaff3PCH3A!=F|7|aFmtl>>?}Q+rALGn*+v9d`JFBrFTNdV zM3J#K8x4GKHWq5bC4v+X?8r8>wz2(FC4+U6z%eq7|7bM?7 zAvzb)S&WrROHg|4D05EZq#Nf+M_n1G>-q(MLT0WfEx9wEc7jAZ3lt9{YN(5Xzu6C~ zPm;=+w!=_^`6M_c{08 zxjQpE6IkE(_uq>$<=#_1=iGDq%&aAUj!XVwA|F52etxu|4+5_ML5Fi1L3b4WE^3K- zR9t%w58%W^tc{8rF-NeW8f=P=91wEPAjgxFu8-yI7`r0|Iu8jBLf$U#2%>&+g=luq zXU%RQZ3~33Ezmy%qxz?1)L8oM)Dm@UTzdgV>B6XSaYJWDjm!(tHr05T%=NFNeu3vn z{S)lJ#m;jry$1Cz6Y1C2Cjn?40Ubm@2c-pcN{LzwBvazrhX6WQ06oSS44gl+?RScs zjauH0F&i`}NARGq&x;leL1C9b9nNVKHdGyle^|`?2hZTb(r8+9ZwYgBYCKu{{ ziIBQqA_c>tZaUQAoQAsOOYomU-N=wWLTH>t`}q8siyNruN3deyt{-_g3P-EWqLL|0 zl+pm;h!C*c6{fELt}q3VIvoew#VktEjXF^U^*9k9ibNreBDP9gcFt zyYvEp8JlQ0M*`6=G<3oa34YGBpn%G@AT8@pf*GH~?orHWV-&NIRPd&ku9CxkHft>+ zB}Hi|DT9)KLdlqrK3X_;o;E&YjF#G{L~Z*u_@z_(p3it@E1b*sd@3!>PN>G15XQJ- zN;qF@-IIHiZ5=tpR27UPbH=4*PBqN=7tEQ!eKtW_;RHfIA7Qv<)2M?_Oj|LZP9hMK z(gLv%Aif2N$szq{h65hvcAiVYI+pI9sHBJQwhY>v_LEdh#vvsSPtS?7Z6Fqna|^-B%YR%S}6H9luYAF zrnxAgKsMJ?#iq^-QZyqiMGf>;eu>(EFMLDY@k|{)d}|yJjl9JTL(kqmd7rLry)#n8 zjs-K({53%p&S^A%%kT@RP_-~#EmD3qNZ*ZzRAlS2B5Lf;wo%6_8stfgU)bw81yhrg0EdT8%Y{IkK!hog-Gw+6`V|kcyf9^ z+y+MY@M@f>5a~9qwS^CxO$T0sB%@gtB2CY>Me;tO2iJ?(v0y0`A-y;U^|(%_2(Jeh znCXQ$Qct%S5JLU(kiN`Bz&<-_dp2cR%MPPgu*TOTX$!sOdJYbpq-YCS>|psIfviji!W`(^&eYFrPPIEWI+L;B<1_?H~mNT&Lr> zyTAqJU8EXkx{Yg@fRG63XP7ANMyhd!^cA6aENUc>urkA(nX(@iEI5n2a8`N{=#@06 zrgz>50^P>7ARw$X_0!wL#!BghiO|0tUKqUvUclVF2#11Ia+>4J#ukKd*xvBr?V0?kKf=1otky330pP(MM3dR3r@>N z=++<8x;R8z3)}hD0)F=EA}Rp!6g#fdDS$V*G4ys98AG>mK*skxLi#19J#Qh^xI_Y{ zA?W%(+`vsCO9qYhf9S`SV#p#I-QPkhE<0nU3w8z}=~Arf;j@XtNG>Et;h%~^men7G&nBqE zF6fI+V0~Y*w|(CoV{W4oyEVqAl($lOaY!hk)j7sy-eK{Fx`ZI){LG)nq_>a+ITvS6 z@7UOQ3zZ$c5`?nDbvkADFK}TF_6|zx`jEaOq;C)D*M;V^k3{mw4GwD3YJy)#IJTz(rZ4p zcT33inf#q0$K#d)GPN`2)LR6m&0gCBJ3B+(55?YsCdV-z`wb{riQN&32}k@+z&*>M zGpf)XRE2IARp@rALfmig_|__Two61MBM}3#A0RvLFEuZ#1ERY)3}M>i~m>d--4TU*j* zh#HS>Cj+X<5fpMi;1T+wrhNP(h7Lq|e@Ms|WYqA9EoT1v8|L~!$D~|}D}*Ek*MlMB zep+SV4~YGZjJY-{o&tU#)Kju*JjE9PY4?qQ9rnEh(Edo5Xf#c==tg}Hh9<{Y7 zk6G_*!S}4Q6+}x<1=I~Vrv(Zg3dQ#DW~Mt53?sC<_0V&2i`cQ?ZfZ_?5TP%I>vWov z5V*kH8z+h&x{YhSyNwqc;bGiU@Fc$Jt|)~xBczrhQGy19S_|#jw&KBy$(ckrx_KET z(*@SEMmOV&xL_$p-Q3uhc7`_gEqH;jMj#egah(p0lih+B+d0@9(C>`|CEpJN)^E-4IqJrl6EYaUdyrFQlDp z`NetT9lHckNd^(=`ynH#Jn2YtU^o~w#+yL5I>&4d@n90?K!9Q!9Y;B=saKjh{4OXgD(Y%-(Q2B{h7aZT&378RXa5zFqLq+Pi=L$59zdE-$)IY<=%PoIXe{ zin9j*)A7YW>?YaOi4OTwoA!@Gj^E+5{A4GoXP;QGq_Gbu(zh3EuKd_duc^qI0nZ;UT&cc05Do2)gADVdQPdj`+sH3!=GLl}u8fv4bW zGW+ZF%q{{W%(cI~{{zhaKBRva(!Vtg9?j{-kljCt!6qI?LR^1K#`0-B&!AttL56lX zo(>#`H*?Bpwdc^_Czh|Nd}lf+8Ko>FK%Y!ufrAwJsQuWaa{BR{@tCK6Z=1uyka0;G z`nep!ag@M8KeA`Epjqmf2pPst{D~{9w&01Yf*+}YpM-RH7}x1E@bua@n5W@HfyLee z*K)A3_eV(oJ*58@(tkCbOz(dizsj(no)I?w!J{U*G)^ykTgZ6y7{AMMfR>pc!Q*Kd zC7^*#lp{dValsH@SoDi z8$gTqQMG^5RC`lYAaq9R>?C+TGEu_7ORq4)wYW~lwe(gpnCWF@axLA)wZ3p|tFRsj z>;AA9PL&}8E{8WT9!lIxX15Bn#$T8n2*YGn_x$0cA-zqG`@lhCs*QbVOa+euIiBQd zL&)brHjv{w9pvttnh-zDo1rU!8n3m`yXgElyox_0Y8PHgsOB=N@6p z!n$pY(L0|8>VV|79jO_JP1a~@IWTB+^UrgEGw@E05!jtQ0PQ&jFx$OS2CTLO8ZP#HUvyKEzI z_pyP#n1?!dmucKZpyM-aE$sNAP9vB4Xrm7utv`TiL_N}TlIecy95CXZ&R$vC&R$vC z9?`<~`F$^H`7S1-d@)?7)AC&oE-+t)6V(s8#ZTm-<qO)B7XC1_Q(A)`!!;OD>}qgk4uT4s#l33?p-_ zp*`I0N{cmzg>9QX_CmA;M1kFIJ3uk{KSJPzm``X{XI+9f^BnW_Bg5`X&ezyoB-Top zZ@7JOtz^5M(y~@kD4glGR)W~D#1QW^?Tg`s9>{h;U%{X-YW$$|YWz)LL`}aDC#vyu z8`s98#*Yi@W5fEGus%Ah7n$|`W@KvK4FGqMa1Bt&AHJt%c5u>*$n9 zJK9QQ(Usa(*n;6`d)Ua@c?$uVYy)kpoyJ%SP5B!2ZA4xiW*bOT!^R}aOjb>rV2U-Z zV{8>+O4zZVWVh9Zbc$Qpn&L#*mY88XF*R(>JV)40^$3pJ$)aOLvlDOG-MmbWOR2t- zoz=J4T1YnQj&qiSrE16RmeT^{EdT}{IYfZ z8@a%kO)`x+baX(Ej$FW@?P7EJC>4spJgo*a6D^p<<+o z1CCzk5~Y<)h>l#yW9V7Xi<)oD3)`OfdJb9B+D<#DU{N?GsGqk`m)ogd5Y(|nVHVJT zr~5YO+FqoK*0Jg^#dWL-)60ShG)9|{-WY8!#6a3BIMEo5ZsS@##%Oh6y*8{b4(m1M z0PR&yx(_F%8|f%^T&FV`{|sDU{uC!FcDjvg zL$Ij4BCMYp)=vrR%ftFIv*bTVwy{i(%PV-pdU1%MpF?? z23aR}W>}jhH?ZkjmOMETc76Kq3}=^U2uNb_Q)uRQw$A5_7CNRx3wdXzmhxA2Ym!Z% zu|n1gc=&4v8NCj~{p0+EK;jz*>DAt(-+|O^cWY%Bb=ch9GHBU^fnmXB^NQVL$y(&P z*R_%sgDiVp%MlUgURM(}(b((aQQ~aUe@L2y9V4uupH89sBT^B%xK1Z@{{t>C|BMrb zF5SkpkqF&2VSRO2UlrERHskge0f538+Bi?Pafcecec-Q@op z_-XU&BKzjoIx^)~Xo4xYPREo#!3E|&$ON3}Hm)57Q_eLlP<%)-&IO#*&9A1gx%qVg zIvxAw*M&60+t20~$#&V=*3FC$xWL>BC-M;8#eJY{YxGq*?-MLmvRqfK!CuO^pJJ0M0n_8 z^3XvbhKF#Sj)yvc3(W0tA`j6mKK%+0U1oZyBPAJ^?Z-o#|B{DD_FwbRX6~U*5FoH6 zJw#oCBZfAShdP589>R4x9-_}ogE z$b2uAy@zWVaomtHhDg#{n=&z^xW?K|*oG80qz(3_2h3)Bu0)228Uh9VwRTjF9YX{*msGVW`W-|`x!@+UmX4g3QcPMn&u9P@9 zkcTlys!JRkz{423cpUVH0PVK00ERfg^B9POjVumyWE!^tGJhzSni$Mnc3Q`1gNXkQ zlb<>>T7p=wx$lP3SB5P<;H3PapgU6@E=nqP394i!M@3bd4N>ke2P?Kmj_yQpvvHXG z2v&l=SsXVQxqS?mJMyk@-2T~R`deyr(HD#3 z#sd_L&ggp38C^+juF*xGFGh4dNYQm4Mb~}lMVISWj5{N`9uDh!!umsIfYDcsJnfFFk*g|2iQ0W&>jm5V2++@0y2%q0GanxBEa@I18kz5jCu;p zvLAMmO|p|wP?)pqr^1e3jNtvzlkT(ZCsMj80Z9a&(9G{_UE&ih%%q=eA@8Zw{)~OG z`DxQ}$*SVsG#8WY$-=ib&CjIFjFTR>52{!ToXjLYJE~kV)1^^&s<$Iesdmq#R=X*% zB5pkGR_&g1R=cD&*J?*!n?|*Jj;h_GRP7#3ui704el+IC5+a=GHm+r%+Px6gpEv7V zoKlVFJ?q@7f2q!q)W25eUgdR;ef0XJumI+$b2A{_cuCf|WCR#5SVsozo7S(GGWHjK zGf8OD57zM8n-YF*%H;qcnduUK$xN5B z+ehK|B8A_JX829yElGNSq$uAZMpe60@?b|Yq<8oA>9DqSXC_VA+B+Fh)*%=DHTFA1;%IqSy>R04JS&5St$%N-57rD zVmk9bT`bNt?fp|`|L&F@$TYcqnRadpHM@z-`x%mN?7Nl(!- zz>Q&uWEjjD%!=Qns(Eeg);jnu1*?-?I;*^WD1k&D?-|M1(B_? z=B7yXjYi5OGX?b)tCvg~A~W_4hJ%%1O-y;x>1a%8LOLZr+j$MKe%H+W5wp~1nx)SV);m$_x1 zF0)s-Wv`amXCpgaT~%vQuc|ANcue!+d6f;8WTy69$+*r}tAUC6fjQ&sPDV|YL^7>r@HjCx*`?{i~%L^AD3(ejWR!&8#si4=y% z-56ew49_tJ+3BP1KkLTux@6ermi@NOe$y@cOPT#SS0}wt#OnTMDNL&GpGdRU{jZSX zsQbT3!M`xU$@o^)|D*^--OtQ2d!^1<)GH+!SmIta<)%o6Rfyw= zI<)T4rb7lqKPGYE3ncSwL!5`Rlrl>KD~zWk`4dj^$6d&umE=!nDf6AeUX-~nWGRcw zmRa&u^?4*!*V>YvbCL0il<|^F?&~slUzXBj6ZR^|F(kHhOnZ@n(XdQm2EQXEyp^R? zSaMbM%@hf5xJeioG{bv9P(d-7@)PSZvR2jpLB(P?OQdiZ6jYWdPpoaty4f?8gp$|* zaunDQDQ+-G@)-^FACd+m1!N3P&0zM7knF>}*oU^jeuQK%@M1r#1@=P8eiW!YAdZtn zV}eR!io-^Ga~>@@Cwifq&;q(+Bzv(J`{WkbkCp5tpz<(ox+IEw6U~xDCwKulz6BsB zNp`#*VyVI+xTryq6mz{%%$GzJUMTSLuxF$#lI+!9>OK7a_3TX3`ZL{tB)ou};RQtXogGvv z>R7|ZoA*N1wk^v$&T0WE2?_+n;{XwPN<~2MS zWgi9L{dP+ef;Ah}_h3+2%*sOzbVk2}MWX9?-}H!7vxu zs~!7-3WhO`&hu3pTH&L;h$06ip?(vz^X#y%C)nM6?*~_#t6h}hSKpIR-U%uT7C3~d z>f1oLSCaWlRK=zR7{#U#s_GZgQ?isuGL!JFl<>7j5&z4RySwivryqWl;=cE=<~uKI zy8C{0O8Z4h``H8BzdgbE)juTnZ!J&-vd!U~FWU^LR5xWvs@9-#b8@R}&r<3DX6iRW z*}du9I?T@0Z?sDavyJ%LCWYD35AuSj`Z{GRP0QGDSN0r1N)qF6nb)QhNAjz$Ja1Zd}R(*qEXq}^g zhGZ)a=MBr|QxDTWzWi)H?T`sWnH;;z^B~7s^k~Tr&vvwx1rq#75AY+rz{7FlB=;DK zi)5RM4tz8fxGkj!cx(xU*^cgO6m;1rj-t|(-3IHv#zQWvk!qkD@4oJ!e!#CDBf%7> zfSK%6eY8{4q!hRlo#-Z{f+=wa)7>`>j_!teA9`1U=U0!D=%$)Heyai0$Hh@?YL}E& zR9c6GD7BeRVJApoGa$^IMOxf}B@JYlvq(z@>jh4f?6b4odMZ_&<$)1yo+p{-dPGdA z7jt)Cqci@hq_j%+I8)UM4{@sRGTV4o}X( zeRbIiR(RwPTlFm#@gjvTBHcEUg`~!oQY)fPFrg%uI!khiw7&^vHk8#i)|53>iXO)T ziH$>6IJr-i+{?3-#`3b7%9)nhqN>Y8>Is%qCh07vq%)+X)3TL@vWjXTu`#K>1TrvL zp%I78TQF;#Q`~AP?rb-4SgYQTwU`Kbt2^JR?mVgP9FJfD$cyb<-F+816E@lt{OSfN z_X4V#wQ|5^sZpxBK3l14HUr5~siAkXU21pV70!fB_5{Crxzu}U3wkeUS?^Y-)Gbo# zmF{(og~kpi+qIHy8!G(Z)Yw$jtC5kHnn7*abyNr3V&+z-o|~nf8%5Y!0#H?NKvPw{ zLMz?BN&7Rs-shhVjMO8@)B2SPaXSj--?k;j#3nEXHB4@jboaHWZ zW(y+cN|7hEKvgNJ%3T%Db5~r}g2);va-l~#R;QHX8>}1`bakC&sA`oviuo;|XqG4% zJy0~Hp!krXIJv9RR9d;L+Oi^n5n4U4rB)eLt?Mf1HkKYpRcqZLFKz+yDH8HB56DYX zAalnpX+i4K2b+_)ClAKdp>dHd{GT{jDMue#Ro75mi9XCyF&;lyscNWeuD2vo6ZOo& z%KYjYYQR@h*VdkoD!+s0P=)9BFm+Y*aCcXE4|jLX>)|%GB862wu!vWK)*z)_RDIPw z_#&q{X7H=^51meE!k)^!I+`}g2KE;g`qe#^vIa~lWb%(lX1pDHnY`_L zDUA!t>M`PzR2}d>E2HYksQmr`z1S*nYaM4Fd$_B6FLV*}>nuzmFsbSxy_5zv9p(>x zp`vx`{?qxTDX!B>5~dZF8K3$vVF%E@f1C40pvQrKKe zrbGavvDv!RtolL_XfDH91Id?*4BNcLoZa{7WeaG&b*W}(y_DKiV5o3|Ww8t*x1mb< ztyNN02a?yE$*ipU_clv3)>|pBt8K)9y1EvPo-Ec*tXNgwfZim-FUAB37AiiyH|et_ z0?!aBbZ~DfSia(BwO!3ahD#+<)j>j{c>Iq?=WHZdMh0SapH~FvG*D=^ntQd0SN`g_e3SpX6oLiC$LCakFZ+hgDS)K&3~p zRCrih?qQYcTL6x7w)2zhw(6vw#U6TUybN9BW#~dTL#y2kReklSGG#T*)@eK@W2<}1 z1u)w6@T*HC%qA~5jb3mX+~Az-4rf_!Wzk^!s_Sw}vM-!2?X4_k)!aH?S=F1G)>14D zS!OM&?<~T*yzyjP;;E3CZvTz>;u>}y_L#_hPsB))n)d@3h;d{`91~Klo0^- zS$Zpt^=0MOPQShA9lj7n$b&iYGYuqsUy8!EB>H^+gb*4zl-8G3i{T?Z{G6BoNdeXO z6;nMCQ?yBAY0$}e>6xG(CA{x@W95{_9_GWMiAii2@tqewaH}D+qx%!6Qrk~e{R4Hb zuEJ^@@A|;pN;3OH?##ZBlUWX$`bg%S5DmQ>C(#gy_lZG1aNfw^M?GXmLdv2V@L4+L zLl{Fik+uy^rKKQX-O_MLHM9k) z0-^tKseh!0Lq?=Z;e$^;fI@*4NsXhtXhAhjQjOsyLp5FwK}UOWs=o0_U?R3@oC1lH zq{Inc+@P8wsV0Z$*@VVw$40=>Eig}&%*V7q6_-@Uwm>yQQcY`tYNn(*K9x!q@*GJu zs|BjLlIkQ-!SuQYTPBs;;v<-GO;cZK@Q9#-&nYb1JRWc&emY z4yxvc`Dm7BRMyln6J5sJ%Ti@Yzn(5-tw^Pk8qbnciICFVSlKYvZE^05R0&egDk))Q zDwWi;PExH2VMbC@Q{4zBPGjx8Wnp4jjsso2(c}dX6qnDRkuUC+mz_Kko&5@wcdu@W1lkb!ex-q&@+$IJ(UbBsEsqDk zEycfS`c1A~@GyVFBg|iKLESslF?*~xzK__n%?;iIu_XZ>`C5YdDg_h|@PE1n_?I35 z{)IR2{d=IkZ#;s$a<2zR*-=>U+s1$w@*6{Tf%jgva?+dSP9pwA>G@kXN zKR1Wme}t5}`SU48UAm^ZJe{IR)Hd14&a0?m(VYkM`A9mBo2C(gzT))3V z*c=)k6iyj>^CnUbK{EwUQ1W!%FVDdOKdVR@{Auf5dI^brnMA+8pE$?F`B15;N4Vu~ zq&tvQR#}>!i$pE!!#rb&W!0Ahx7ZRQVg9rsZ!-#2UoN!SD58*JNk}%8$t#5CAYrVk z>S6c(X+YS$f9mfAKR@hUYxBZNc}-m-wdy>2EzOAP8y;4wWO}mE^9{3`f;C5|u-FDW zCWvC0FN&dxpIa~B=T_DHoUu@x7qK(#gN{qFo3{;Pp_DC1$hpWEDg>9hGdk?v@fCS_ z=vbCfYN?I3_Eh!F-~_G<)+e;!-f5iAb>+M`tjw>erf#d$WdU3DO$@s&Y^%P>PUlau zJD-P>+G-Y(O_MCEK&@uOJJ!NdTg`zVttsZx`ib@sreO?ascp)65ur3JBLOx{Xfuyz zVMWG~)ghz9K^@xCKSamLGRo_OHL_4^JqmTPN1@h)+42EJpO8UKa)SsWw5FV7aibG78Ta=$#=1QGGj*#k&Ksn!&mQ{vuy@-<{4Nx>X?B#Sr=ZcS&SBQLcCp$}wuc*<14+ z$&i-a$!%z;R+xciqaua3UqmybUy&FOw7zKyDkDVQ@Is}GHHj;k&& zYpAH3Gq!GNZB1QSMdO??3##iEH`gxGM-0pxIC#$D#wF!*mXr@3GN)W*%sIZgc1Zr5 z<0@+^%Ni?X^1ym*&~{VWWaoYv{wn-U_`C20kqwb+BG*N>N3M_D7P%wxVC3=0p2(+> zZzA7Ceu%7${uH?~`k%vJxPuFtt5x-n-< zbX#eL0WjJeKo(&I>uO<-DHrZq9o-pX7X+^KH&Kxf^rO z&AlLZTkdtaf7f2o_G+(di7qht@yLy_^?k05-VnQ?-z(9pBY%&s)6R}Q7X2~z*}hjr z&+4}Ypf1zS>~~emyf0ny!mHAG;%RPPAxe?9ZISm67YB=SOahUJ}_E*^_ZW z#=!ANyPp{V}8Yb!~g> z^_-O%=fMXnVcU+F|N7X@=(&;Iu?^ZrZC%cTF(bM*cTMh|*j?ef@iEVHb03bK8+#D0xyFIoodUnohu}Av87ulA3Y4rEV#@rt=*5y7O z&D;|?C-;TOow2=<`(hjWKAXEf=Z)A~v3Fu0L?4aZ8#^!Oz1ZJk7xn!h_EGHPm=XIZ z`atZ{*ypkJ(KXS_qEAOCLiR=8%b_TF1f}|0BoX;Aau$n(N$`|`6%Cc;O-m|Kg|O60^Rr{=()Ks7yt*cLeicje;pkU;5~=Nv z(Nxv2G(V15cp7FSzzw6p%Lw!rz(4FskvQ8QqruaH^w$di{A&B(*^TAEXd0KZl-7)< z-B?RDyJR$|zx3Az|NQE3f@S+741L7iXRAt9`!)*Yy_cmbSSw+F zR)13hd3%7N;=_tqU#J1ohC_ZDLC_3#2R#ew0`usFHh{lHUIpy`o)isqhEHAEJT-|hZ z9iDv|Sgz<38i(c`HeAsw>KYY&R<)uZuMAQ2k}CY0myhh_iau^4vZjp1O=z!*;+o9BGbW5~ijYqfs>}~*0%V24lbK8~|%z-#oa#%c< zCASpM0M{*T3@@r~YMe7TZ%%b>c};UgB`&E?&dVQ)^PJ}LhNd}C*Ow%(Si$axp$-BY@)-J&C3&a5Nxv_aB12RlG)hyss@A&NN?5knNyJ7%&R zl9WPQ_cZ=+?j5IPJ@ewxA5>+=g8z+z`X%TFnBe<5?;iN?*`vGsYtXY-Y;p?YweYkh# zN&gq3OY0k|m*BZzrsBt+x2$Y<=8%U5?7Mc-H8aa@%EVOYfYI}o7VpBKrLCcscA;o# zJFC0bPA_ivxH{v?8~085;H>AD`jp9`KBGpJjwvk78#Ae}c=DuiCC3y`DI6moP8>C? zx^dL7+PbDu!^%bt<3dLbV`2-Hvs&XRl73fjr)`cc*yd323kStXfny4%Or1QYsCeAu z!cjx@oO^*Ge#5*QGN$XQ+*tiCpR?NNipSA z5;yh4ArC`Dll0LnrM!MVe}@gPguqv1|KEwW=O7#wVZ7FU&xOqXCpj&9F*Zs2BGIlV z+AA!y&oJ7ud9>%qX{iieB3dO6ho?K_ZFx=EVmulzsObleUMA{gMExnKvz`J9 zzwgm3^~o%?a^ZxZpTBXAhm0kVaW zQy49cB$Gu-)Nc`WkC8YmwNOuG)b*7O^>*BE6ZHc`eGjM)HgTWG$k8vA)mCB0QkrT& z!8^p#;cy&AbySp|VDWd#R3~RLgKHThKKoJCw17Q2$j!J4eD4z9zN2smbV9tdI8Z0S zNhe!)WaJRXd&Dt+6b>A;Pl5$M zwgz1pzjT2o{D03 zw?iz>q*DHvxV}0X2cwIkWRq)rzQcoREtvjBOjF95@|WcwQ@NDc*_kTLFi?I%d?yv- zP=eMpOtBPDI=)UEqet7QZ-kaliTd zMt<1^DPNM5bLZo*^bjB>OIs@)kF{}6s$GI{uZ3|p82?F(7gXU8=&mUBRDq^ss~wNG zaZWKC0H*H&uzf{r8>(?Q7Ho+N5IjD{ILF2~l|~ZDNWB-F|02#`7vZoCoJD5SacFO4 zl(l;W{_A}xRi>f&l^zivDE0d79RH=zXo3QgC`5TfP z*@VM){qUP0toZ$``l(Y8KgUbK^YB=3+S0!z>33|#;i;I5^!bp!sFYr{E^8>A$IPEu zG{xc!8*CQ05H$p_zazmVTX5KND0KlBB5E1nbr8v*me*CzCofEyG6g1^yfhrRF&AvT zuESx9t|%Re*QZX%R6Ayblu_6ti8oc&C;jIfrxg~GJm$hMq6lN9o3VtFxb_Ad-X4g< z8f79$^r0DB*IVs~_i%a9j43N$P+2j_Sw8!hzmw!&bu$jP55gi#AxT#{;$1B+_b*7i zg(U9Xi9^3U94_F9)xT%?I`)Ius>&vdP+lIXFio$9VLZHWE6M!)HXMG1%=Y91Rec6y zo6U!y5pl8?(Igp9863n0X;*>&HsYUmI}VY-80ahjzoI_dR_(aWjek-ty?!a!uLS$; z#QqDh4+MKZVsGW^*IPX_q;}llCV`r3Q@|k*a0dxE=uRB2gMfocK)|>85Ov!jYR63^ zprye(hE)f#VHLi5sN6}C?k7oVK0GlOl2nG{1~(iNDx0RTF(`M%>kzPu1QhMUVE_d5 zAt-9=rR~+)EOpZ%>g15GIOLlW@^!q~O3N_E0yC}+CByZ+jI8;L3Ad=^6 zBjp|18zR->5S~3&JKo|Zk|44#QYInZO(M76jl&(T5KVcvyU8PnkY|N>56Qdt9vr^d z55#s#_n@^fz%l?fwo|_8ik=Q_i21B5TXItpZIBswum`p8^y&a~ABS&*E@3U?RMD)9 zjKac6NTIl_u847_JWNO)%mkMs3_N%SWBag}UY0M(=hbWe9Cny1^B)>Kq4DQ!Z^ zVwTb|g^M%`rhSa$AMI--6MbGja211E)X-42d@MGjnkun+m~4$$I`tO>^Q<<6Qb~*k z%#{r0o~-iv@!0VKgu-@s(q>d6#%iVLV1`V>=&ZS&k_F!}8DJX^whZOVuA|0GEgfAl zc4q0cnN!D=#-|lcn=}R-#}DQHq~~i33yT!?CIub{4ETI7wy2k_!$gRPCWEX4_tfE{ zAx~Bt>N07JxD|TaDbb#+6zK^>q%|QeaB(LE9;~M&U_5!)mNg9t_+&k^t+m6M5Zr_p z5*vj(_cC{$-pv{tQ_+~$)hwwLp>QZue1si&5p|okwmE4*YNwC3pG>%tN!p!l4+`rj zOQ@tb#sgEk;EC_bW%c-)Z(BA|I}52BVN_smTgs_KNw#IR^;~3J#H{Vh3Tj?8y-2Mj z{7m124t-1 zu44=zz@@aOz=pd#T+l8AFm5a@Ur=RZS_`J_jOk2!MX76SO06l~9R3uIp4F{yLts1Q zYSd*`fM!IlhtmQ-w?_z7<2Ae1JnHK}dm~f6ue~&oHLi>=BU$n(Z%_798y|9% z2@30RhVDaa$g#HtDCjnzxS7YeIrQQcUrCEsg7!NY z+&dh0j2JD`<%-l=tXT?ubw2)u2{F~1@RSQM;njU7!?xF%R} z527H@4^4_{*B=8iarsSlMSIl!_Wyr!Z|nLnWSIR1#g8J)a4W#QFv@jL6#)mqC`=XM>N;gmMyNVV0*YaR*@>}t81%h5$t+KnN6)S0uKq9 zEa5PFJ3{?GCUeQaZm|goY$B(nw91b#r`<-q1NBkZi{^bYebOXw8EfV3LzdH#@hC<3 z29jsbqv6aGl=o~~d{;$Gf)ER9scK+JT)8evu~ZT$EnQMxTGrImP(2S{!)h!jzyf@8 zO=XdpQcytKfTfi%{Z?lBG5ci!>Aj3}jW0!dzW(NT~&X^7+*bL#=80@>zC zC&&jFY_il&S(??1CCDN9G$+KE;}Y3iS_X{P!HsAu`6T0PhI*^yakj!Hqgx|8n6KK{ zSS$_gc}(>DwuG*}sX@SN-Q6;@aLk=9VH`dy#pueaYO}BB*=?=a7!BCQl$S9H9jzqs z%K9?&a_0PuC@>FFltY7x+6rS>tN`&-8|BDsew`R)&tZ4Y#5T(AgRxD9Uy1Vt@VE+| z&=Ti1%EK~)5wyWzPw`>lFW|#MUBHJ`wSW(6V1YK+YgYXIlEaX2bz>MC%i*$c1KX<( zvt8vd->t^uWyK(m4jed#|L^(yP#f$GEB^l0kxA-aaKCc7qa9P)bef%5#@s><`QP9F zJn%mc{Lcgb^T7W+@IMdy&jbJS!2dk(|H}gI8rPKB$BGL6g*JBmIJ z55Oh;aCc^L5e@~}9Y9wJI{f-Gt}`c0Q>Q5hrhfsrz+6Roai-h2)(!f*n)<7eMEVnh z@VG|d+B36^t{rYT^Na8RTq@IXC@#XG;1I&F5VXL6>vS+I1{auXNH@-O8`pXPLyr!6 zcN0b}Qa7(&{be}RLHoJ=Zo0xFKA1onJ?t(qy4&xI^NCil=F#=oB03iICd73R3&gli z2XO;ViZ9?A5xWD8u>HO`pJ)YZ z9$k+uqGLfWA#Q?LAjb89BJKpPgTaMUS3)Xox+qgC!0LGaB`XWhN-)T4bJ3;$h#<441R5&F{YVU9Lfm<gzkZCv{UIDR*A zR3V9QoWU^s?uFq`!mt3ez<}#?Ff0NWm=}_6oar{M`7_7szD!-s6z-@&Ds#sw(;dD{ zt2+$Uc5CrYAQM6tgB{3loer{kaDlmw5aCR>ajgxIwKid$j3fqYr3tIG7mf_V(Exhj zz;!w}n!yF;Cen{H-Nv?sB$D<~Wwq7{e6ArvCLpX4q4vtg61?J_XA7{Fa zYn_0jqlx2GBoU4}7A+mUFmxsiD?kejxK0Pd8Q=o*>7*NHx{YgDz>sNTNFa&%Vx8%W zOfMWk!f__(fdkj+;5ZvxU|vc3ai-h2b}(>sHF2y$65%LgzUbvV8j2QDyQOZsu9+qjks966bK)P%AfsRX4Pb4QL1 zh7q;hT3V1kglY#^feP2@pt>1cV7`ga;7qr1Ee2HmGWEVDs+~yHrgqs)O?!eK|1$bz zt{(G421bWJWEg$DU>!=ZZUHY~;W`~yw}T7J^d30DqT9GO5U})2eSit;4y0<2ciBz- z40~0|&-e zc!(Z0GX`g(7%@d`GV;9qGlW3h3r>K-bvmG)0vDK{BrrJBZCo1;P{T|_Pa}yUshUO7 zFfR-v2*Wd=1qNKFgW-8_f%!SojWgZGwE|!`%*5~lk_ba3!*G}vhQkTN-$4ruxK0Pd z%isd@OQaiTy2Y#p7>>%+k2GPt!io0cq!ndq^`e+)_fs34$)-5Qk#=zT2=&Pj_$qje zqY&(SGK|rgNMwVWe1sI`?xWlynam=skc@c^888Od=@|1SxWN1dPGk(-#a3UOZ8`r9UW4?(afF#1fXDai(Ff1Sptw0M5xK0N{2DrdX zFLn_Ix{Yf!z_2J&UueQO2&v2+a;CD#2E|xtyDerjI_90lgsd&tfehE_AnOD!Fn1(G zIMZ!hYXq_e6IN#=F<2|jXld}m(L^}9fF3w-oeqw!-~w|tPK1MQeBnvms!9msH< z4zj-B0<%VlaHiY1b`FrOGhy{Z5-TY=k6P!2<6OcK13hryIvpGXzy;?1q#tLxjce0>dRHhG9q|416wki5G^; z2m^gb3K(#m4u&JZ1?Iy^H_mh$*R}w|RVIcbkwh5yT<$6_3|k4qQJ@6|T&II!47k8N znsnn#w{dMdFkEM17>gtp6LKzhofnQBgkv1&fdkj+;3x(cm?x8doar{M-31)GGW9!6 zC{vJ1Q21PKmkow-r|s5KW9}wY$AA^6aGegSW5EUHse}e+x{Yi11C^1f-)Eva4ypFJ zoMD;E-RA}C0fH3=FJR$19atxT3(Ut89GvMku00G`douNhOjt9Ks?D%AF?(!KjE8Ku z7Kc4T$Yy~Z$Z(wwvJ=4t<~f82XS$7RPXgH!nfl`cKXS$7R&jZ0me&Twp$hbmL67aqSCW_&ihp%!ILm6P<>W_D{#8^D8mw z{LBt6A0tqjR-O(X<8#!?hck??B#D`O2Ic-!CbNOrmt;%=888Od=@_#XTwq><6B$Fd zaqU+a^Gl}wAJdq1NM)_6oOJ#o0niBA_>b+@QU`t`Waoe#$Z(wwvWvk5=8Fgs&U72s zx@3*lJ7V3kNe1>LhT>4x4JS^9LLdQRM! zp0#?+%8Ze-vp{en{+%RJ2CN?QV}@eP$XY$RIUoN}(@VAKS;^dQG6-~Lh7Xi0Gn9Nf zf@tovRwZiLv_Ncj)-=DME~31G6M$qMu;ZKt_R12q0h25;x{@r_Lv*CN33Bm*K3<%@UdLn(0Bm-GhnCiLl&4h=RxicwuA$9}t0#a&G#y8W)zR z)zG*wt~~>dPYZR6jHgM_kkv;Q!iDTFphS6M20ux?&q8kv^x~X`-ue=?4tne3+TWq~ zg)IH~Ed4p5{bX2g*;{ylpwQj|ioufnyqRn~XI>Sv2S(Ux@QXmz08}`qfoe&K+6+`n z;@ZnV^^(A|)TY=5F6p6fMg{O-8iL{_8=52mUIStTd|%`h;9CZKIH!T{^b++n;5!|o zKj7P!rN5e`?-eM|F!qw>q(VYu?4vY)z<8C;{4U^Q9(o-J5($(oP~bWZ6!`2GYeQDz z1T^e6uDuOJZ)NFkX6bJTLa zLoio!n7BSbn6Y4qnp>jg0A6lf(}Uyn0YSZgkPlz_XoG^(*eZRWSi2hg3;lyT#;uPe zHyA{AKx7YaWS6L#F(?Su3nE4ASTGRU`ofJkr-843iFzpT^~a_b@C^>?c>>=6El=QE zJ!WGhPlD41yC#POd7!T=xidM`bHG`dVFeFVg$srNxDMbrrvZF$iJAxCgR$`i;KPFY zPysxDGxNvDAUwXCUGlFBYC{=t3leRZGsQQ6>{O=HQP3+%g9N=L#Y$hC&y<3 zQ8*)D;}F=0a~d{|C{c&Q#u0c{5H=PB^}~dXBe|9%Q*1oUX^~doOz~T7XtSO6Xq)JF@#yWDVRq)F&kr8Z4OvVf)iN`a3Qi; zGu~m%I9M|d*5I6mHIquziLho;T$==ICITv!i*p)yPb^XA z0Pl%$Z5r^#1>Tc5-We%)<4(Myy76=iU}lFcK4&=aP6ysn;Kex&yyckW0B?C*n+d!p z1oh(uTrcq?2IMBAA488Yb11sI@Su4s$%1G*_5ZkEbX(B>I$yHrE+yY%D}(h%8IA z$t*sOod;AW0~O9`plU8rn}Di0u2lk6MNlsnz?N`dSEcy6+zC;uU?~=40gV$`k_3^p z#j%bX1cN2pg~3y*MNh!9r>=68;(YjPDg1?V8vZ)9L_G!mIyJ5>gukkT`U2sv72IDn zDgIjE^o~~T^k6{aL{{@Tk(Xtj3>FclRErFu+L98mmVzznYaISs1b>|df8m^lzY_Go zftcRFZ|pX%)xvj+h2s)ufx_MlEw(mMhV72WdL6JNXwm~bxK0NTt&@s*4B?^MxOOt| z)SGzL5}vrFp|FFiw}G?WS!TTrgpf96fe_c}AUvNVJdcn;2;IiDB|z95)SH5Oqlt4p zGI-FP62$o5Z2#$7-#mG_vs*BlS<}e6DWl11hppt7nXEb_h zSZ3E?(|(GXCuR*x$&(krR(KNE>3Gt0g>3~qd8+9{T3X}II=yB45F)&prZ00Fr`jw_ zdZP2lfa0@tly*w%?C5ldou`qVw5|s`ah;Bxv@i!|>pERrI}3K68PpR&{S4DuTAtI+ z4%*_GTfaJ}t&kB!Uj#Q2HWRJDSDV1C;jt=3z!{zbR@nvM?Ku7{;Z+20O%U%`Bs*!_ zaz)b7<{FPB=G?BhL@U zskUtc8F$IrAS#_%spyO6#+jDdV{?z;ZR=XoRuRoBsg$pQl4-4`1q#*&V?r-2m}=|L zF_`OoWFej}OnQQ2XEwDmjiO~$j`lqFCg5CWRNF;zi@4+f6K$*`4_PN=Ekwe(rg7Ft zIHyIGb_0b={rf@S?cQ_j2y6|>d1ju~_1lH(W9x&{{3wbYbnlCySkkF*_?9zOxSMdI zprPBiwhLr}jks9#`KxShz*E_SPMm!{O03q9-0rKTZPH(!z>-~vwpm)Hf!3U>>^ zyX?QMa2LB*IDAQ3#OCEeG)C5%WLvm3E;IR!4XlDC$F)4m)}GqDWO$o=xoNT}{EMjG z-3~}7Y+R>P*mr>o%)4-+!lv7}wi$(eMNr>lmNdSk>=?vsvKEJ7yDK)XV3vwgAa^sH znr#hY(`H*lcx{Wb9trB{v@XXh{Z%P3U{_;pwXZTA!h^_GQ?>-h@>Q&ShJ&NITA(qZ z^E|fMz^DqYB$wig&*V~Er{mK5!3Ac6T!}N?#uw>D332!A-rvy?whr zh>|cvi)OyYwG>U3DIaIw5ya}DNk=0jV;f&L=H4)_vEJEyv!eySU2o5`%d|+vkn`}{fqxH^a zz%8Z$B7E3t(N41B5vYO{xK784C%^^f#|b^obQ{-hhZVO4^;=CVo9n|j%>bp!so<|0( z;Y2plEgrLjjeCOnL#A~fAeG0_qbYOsJ#uEg zCnFCQYY(x63~Yb!gn-6LXa;Q~X)hCOGipIjvvM1GGQm?~QiV;TEuJ4W<5@H-kC5*^ zgn{rKt`E?6kAbT%_R`?9zH#k!`0KTxzAvc18r1g+ul3X3w8g{TWKYebf@hmi@v3{a z85{fDv&{&3&5>QA#*8;9Mz*sU*&Zo)1BefWjX0-a!( zPJ5mpdINyfOG_q;+zK3!%NfxAU!;;eFmhT2K7$_(j&A_WbL)>)qX1L zur)cN@pMa}v4N+MLRH>I-cw{)%8%1?F;xE@^gJVlo})~qPqy-(!!bv~F*v8;n4%K3 z5RNH|YyX5}z6|PL2*-@pzHoQUm#)bXLGJW`#>t(@IXwk^ilLm|nH(|cogNVKoyj?t zP4chcm@#k+&S^MiLWw#aj+qeGzJX)D4(k6Bj+voGl^N$nf zbm}m_^USjC!?=iZy451iEz2g(`jnDD=X9?{oLkoZ#5tP@i#WF|t2kS8{ga~+{1GKb z8?HE~QF1d-a{oce{T$T)ElTcqUUI*-Tyj6N;&F3;_V2$?a$KC71BAHrN^ZaC+<;qM zZChB-_KVI9xK*63COs7}ov)S69H*IH%$21tn?~T)hAvs>#NOYO?twXVsc7 zn?2tv5sHK)WWPwE296sc5|S4C18f2u$i@Sk0ETlKz-mj>#Q;`|@6-TT>ukN1z*c8} zys@VgZn5U8!Yi%6~esdjtxz;ILJIIlnLLRcn z{}YSz`(^MO9kbCV258Mptk|ETbul$1Yh#O=&XAf~U~tiNs+N^)3k#zQfuW)?I+<7I zO7IFTm~9J%mWWT+vfW*sENfv=GC{if46Uo_fMjk8xx1@dVDKB+PFJ%hYPD{rwqyXe zs4eO478u;L(UZ7ZcZbWnnT|HPnpdXF6RU`!hr{hHF|e&_qdN&Qf^>|G3}qWx?7oM2 z&o;5vlIWfe(Ts6AF*6prl2~Y?TI=Ni&tx(Nrp?AcZ@0v03k_%Xhu1oKWkV#}TZ@bg zXB$1`ZIbRAY_(A)J;%=%!|17(WW6$<%;wBYBWq_npuI@YhWNBLv2eC{r-1gq@lHV~ zdzwEf;TsfSl0|GAgFTIA#{I>NTr@d3*?KfvkBBBGL9b_^DdL9EkMSBg*{t8>U78WK z-9@t51bsR?;yZ@2tpeh3a`M-QOr>pUG>^DW2RH5if|eFI(?xf~LJ< zKHBJ?GK8=`8m{$a?IG0y>%5lAL}XEQOv&oUxZJX=11sCEt`O%oR1{g%hI?po%d%>+ zjVt;)#ubN>uh}~*_&QU1zTU=teKq+QLg*G>XM(TwY<+;~Yue}4^0M(l2ageYJWU(G zJY=y}q*yHBPu-iFyliWDa5g@am8>#G9@Q>Z7&?<@;ohG-+BDYkvyH(dA{mEN_i}ln zI5HhROYg;YOSK`c23Z0{0I&ps-Jt6Uz)*)lLmUQKxc4XT29h@{+ZgI*5KH7)2Ge0P zh<0#!Z5ZyX4aP7Mm#W*k@Mq*(Xe>owrLjfea7P3Vq6nnzW7KwBr&HT+2N#%Wo0TGv zZsXcvh`^EA`Uo=u??5V_7#^POT-hAqtl-*6XXUlpp>cX^;BtBoy9K?q91ldkMVi24 zNwMOwP0kL_wy!M~kYDeG@$f6I574hifJ-Y;`@o+Xo@|FN$7JiHv-P5Ey)auJm8~Bo z{QCdc`|kKEs`T%fdoM*oav_jVLT+*s96%WeMZ{Q0fzSd$E+9=p$|VUTxgoisDS8n_ zupySUU_(*YUDvX%Wpr5!D~i3hpR238mesZ4>blt8?{m(~nQ~_$*L{DV_x-~tGjq;U z&i8rFbIP1MGiR7mp|`rnw$ghmCr}vhg>X)wg>WKFauR3>oCqaO0xf@;Efoq%I1UF@Byue zNA+21wCwA~+S#MFbp&2*5do2rw7aPeKGN z$WrI)K~Tm^S(H>W^F{xuFB>di8D>=l6wYFrpl}w8$9y`EndO^L1CfVv(^a0z&C&v0 zs-liok4G<@W*pd5nUcCa$tIgPy-hZytT>aDo2m?x%^Y31hsjB*%nVOePLpkswur_Z zOQbDCq*Wl&a84o8@apso^ffc_rE5gmk}P$x9%+?)ZnDfdH>lBW;PJ7YgVsrXv*2 zVl_wSu|%46(U6y6dPrAbW*B8yyzg0trD`o@*ycvd9CM?S;mcX@CC(}MaxT3mRVB~G zYZmb3@+`Gl_hp3pvM$M&)lOe7Px2*avG|g+Sbb@+O5yCLqZBWV7SDC5(dMT*ho5TU zr+M%b&MEk5QI)(9ep(b!R=`iuEVW+u(_*DDi@T~R3yajoLsNHS=+UCKdsyq^WldSe zBV_Cj7!kchS(&9onJX=3@(j~8eBd*O)W2edAYdH^mny3aH5UJKHKzZ6Qq3}@IZLT` zRIIj=je&gP)?(02wAv~Qz15(brP}0U2Hk{dm8VZ#wAq(rZ1;s)GnJ*a(2?IR&8J@9 zdh2LqVI3rY-$0))ELT={rM{J^k9DQq!ji1MhTleXWH}!MSWPM|(XX{RGI%hxXQ6X5 zg6UogrbgTHNIjpk&1c=IE#BLWc<0M1wt0VtW8U9@wm{zl!8wJt(17nXpe-~+luopT zxZV&N`7pmWX_${YI*j>nfO#LC{Ajwds-^lYat$}?w zr(mD?p4MrwZ=-J9sY*ic+cst4%|as_H44X#gvJubwiw)$)V*!wemdi){e&|4Hx7*1 z6}e2$H2V^FKPIuUFEqGnv^nt%hZ9eS6WP00a3ro%a3uTU1B7Y08Ue$S_&g?@dS;fo zS@&y#)~1!Sb>D7H^6i;j`F3lPZxghD&HcO0>0f2DOY1|?E-vPob{Fg7_BN=Co1EOs zZc1%l-sbS~7V`3WeANNhsd#w@q#%4DPUK}uMwD~m<#P-d(|3ZnPtH&B$vMn?bB?9( z4AY>1o@3grXP9%pfPWDSOfG6NS~5+2+(Dex950h~>N!cs%rVkltf|Xdg2_!_Y*lc+ zqYBQWD$w7e!gVTDK(8M`nAU@-3Md&-E<_b<&r&ZiYT+7D3zuXmCy5*L2hfA?%DLE? ztzBRp*|hD}l+Bcj4O93S$kknxh4lyH_J0rcQ#N%r1sB;B*l3p+H2s!%2ls0(i>(LOV#clEvB_qmZ@YAod)JqLNu{V?0SiaNg5N_C&?%7u)*?Xy{!>%xF;ttb( z<;i)agVS5*PJ>hT)8*u+8@Zowor<4s;eMjkY4Q^#Bg)nA(^ZC(*y=NL(zQuV`YP6> z&B#}HhS>yti+bvLT`>8(QHwFB*HTGO=@6tWt5Hl|{8(j-=DH5Ex#}5aw_(ETf=P#$ zq}~;9S9%cN|pYeS1GNkQZLKoxW^0On_0z7>QkFye zL(tBv^R}ew%!A zslcQRzK&>%pW7Vq^IM9aKf_swA6y?|{M=4bG+g7v#&SK0A9k|w!%nvT0agB9aC!EY z@(07l9CBZ{2w$EJPprs}Xs#54@k209-XG>)MBGoKGiS#a5g!b*FCtz?umdA1vhm@= zDcLY!N_I*H&^QX>s7k`ZMZ447&dK!cMu)eS$PqzL*4p?osT_jG)cP;z#Tl5HM1 zJsZmPcVTgzii>FwgD@N3aAxnsDzkvFGFzRQt?SLU-|Oa_{Waz*A2S(0AZO{R`{ZmAL?aVzxRbTdgv{ zQ%|o|d4Z<^_+tY962Rk&Zi$x&{E6B4zUF-V)8<&r;7WAY)0f{O^q!?Q&kH?G&i_g1U(sFv3ZY*h(9gG^=Sob+)0>;c z3(4^dQ-e;gF9I@kumqiwSp5d{CE4oYY;}1{@BnHT7R0G-@%aCQ^kW6)8&oZu}_4IaIW z2v|=LESxDBQR)G&E?ce5R%;B9Pl2G-c!3<^>e)Ks*;eUr>xX92v{Qlngr3H}}EF5W=kHykqf3kTrCfb`}NeIHPHd_aZz*Z_6k0QJ!U zeDW||d18P*71;MxPwmkG#s`)4d0>rJ&Esn<>0$sIci;wTAQQKd8q4C8glr;d}EID4y8WlearXa z>Z~c-9ZF-4^EV&%GPu%|gOB!Fo_MoHe-Xo>-}-CVDhEoNM{PcAHaPWH9aiL^ z;`F&Lu2ZS~f50TX7ZgK%x8|rVtg^X@tCMVL%^^GZ+nX((&R*>R*Or5rY)cK*M;uig zs5)}gb_=RCPRDB>0G zT&Fm2Z6I75Qp5F6j_Wkw+L)uB%5dSc#C%@)CG~h4t>tT{T2qzmTf(PPv8Sh2>?gd~ zGf-^8;)^qL@I_kVXA=HhC|h~fpg+@L{bqu(`H*2OqaN%fz`%(HSsE!Qi5b8U%m9X{ zO+)nV>t*C>O+&Dm0J~$OsmhrJxMMpQ)>b0-U^vf0rFp<51(uAFEQ5W=WJ~$Q1;x!n zP!NsEK#S``Y;g=N?JEvp+K!yiQZk~X=T@k_b9Jbbk)`#{-BNyj0Sy#OQTEjY_51=$ zF5UYW2AI5-ToP?d63rWuV?H*XkqZD*P#Ubjbt+a=LJGn&2|dn~#16%+or^iktT0yRTp(od>U9+Vu&+khmctgiJ#A$h5$OZge z@!BLS1-iL}uF!$b#_K?5FT;l1!Ra?V5TP=L=4yq^JM0+H3Mg^t%Cs;OX2*a(Aau`% z?ua&&i1wd>3nz}uWpAu3pwbW5OYdp>`XZO3#i>d^2V}gql{ks?+BIs2Qz_wzYA(Mr zsr0)%<+Jh@QhACVWy5nFAHU;aJuKJpHYV3-odI-J2iC4}Sgvi>Vrv7#lOuI8&}oCw zYh25E4O(HlzCi2Gx)FRL>YFfLC&Q6;+*o2~rRAR81swm8&c?&DkH~dSY*0~<_|IL%vrV;+j zz`}Mesiun_Bh*~|Eu-a>4vZL?iv_$Px#(Soq}IFELmm+7aH8Iok`bi{z3b>)b(GPa zu0XCbDp$Xkz$Q7gH4EEhCO;`#8SUW98=~`2<#SP;hlUWIk;ate<>&+pCoeUb(;QmH z(9qHXgfJf0sSGXsea!fNIFa#`j3`HhD%24neSpkDmNGJ=jRwL%{$jC_XX--%!9M=QGtdrALR7M(rVF?nK?(W8KXyPBM4& zp_qG2lDT6%%{|6$k_~mSou-+E|Ae{6CYu|Axx6xt3pwXLh_;P7SFQA$5vj;BZj1 zDI%JvLXA;yrh72XND4+%oH~%Cwx?BC?YG%E!)~VoNEZ!hW^!bWuv@~r0gFcSc^&Kp zu?JHfDZ#!cXG5n=wP6he!AIlZ5l~({ow~Z|sd;`B1R<~DMEy7=@m>t-VNOV`3aPV0 z>a37jY1GDOkdim#8&+x|t5VUzBI+t6bbFq7LE=r0{ zQ`|i|=UWZ7Id74}d8Q@;(nWMGPL9r_?UppMhGH?zD>`lHv;{V-B048RdGSK3hlQ!t z!*LLV|BuCq>Vc9GWjX4hI;1WOsV9fjr6F~RQ5(mDj9Rip=gC$)JUVNWqO;n{WOHz> z!@)}&@pVE{fy=DAG@E8^sY7}aq>F3FD>bQkr5u9rMj1}z6-we+e|RMtQtLx%o#Btk zASjI?dv_AGA*{Ei#1iTh2x@gAtj)NzWSRk?HHOd&1@sf&QLKT+f(odCb+}GtESLc) z2v5g}tfM5h6@YauA+1>>|Hu3=*24iG;74l#@u2V5R!WGWNiA<*?9$bg%@sQdPQrko7YQye% zpebuZ+G@92YIn&Ls81rvbs=pnA!av8%KDIbGfmHd8MjUgiFJb;Q8~q`09cn0>#0^e zW`G##mJ-j#kkSE-v@@JB7AIu{v{P9~8GQsPdpI5PrT z!seAI37%mHnx^QQ%nYaC3KHCG2wJ_ui}aRkAW3-T3}GaBWwS`ZD~-egub7$Sl}%Qb zRm5^;NLxpl+9`AlXzN*G151eIrDkwKXDbPuWr;&t@zKsCUa?{n0}md#>VAEAO9)@T zr7v1ukN0YiqW*vvbQaT1%S{?9rl)4fVa3~W7%mG7J;(%=Mj7;0`t|HRRGf;}P^0ev z1T=bFr_$)xavRs+M2()35oH@1{nn6rw$a?zA=hl9YzKj<){jPPCEJ*3XB$_QeBZBg z2-$jw0~xMULG}WqApATb!kLozHYbpM5K`YakiCdp<)e`H0s0)iYEL14JuQWQ6XuIq z%EwkRJtScxL-k9fLSYHY#}*1iUnbE{Lb||6tgcAxfMt<_#5=32 z9}DObZlrXUY3!8y3aR>2&K`OwNlF}p$N?s-%3WUom6V6I2|TX!NeG3or+?lDl=Ilq z#zN|o$mV+sz;tf`Tflgg^j)39=Obklh}=n5Wu}TbP_dU(JU}WQ;3{5&isFCJ9N{0S z)!myAgm?Z2C#pM2;**f5yDvlP0i*8zf?Vy((3aBu1tY0Prf%7nryUSxjW;n_a*NDd z{l}IE3W~p?IC~2Uffd)O#My_Cg761~5obz96e+Jl{V}BeU|{_Ra+!ynzVba!Bc& zr=>9mklu;l;A6Vh%O%qo5b~6C%Ll|PQmsf$s0jZNouJ{aHItj`!cnKcC{vhUG30$J!l8p?j!oq^0l@MznpqNy{LAvLS_C@h8N$>Chtc1x-pXne=?T>~#GvUtS z!}1XMhouzxdX(B@2-x1B(H+E&RY zM3f1tK+XR8Mz&_tG^ zV4PDZ*nG`>=b#Ec@o1!BHSzgiNh+aPEB#8CxU9c~Ic!;{@?d|@Xggo`AJaxS8 zoK|JHzF_xKKMW}oSR+O8c;e?M^IAC~4|z8iXycjl0Bm~!&BnL0S#q16O%{)54OTmv zB3h5-)fO_J6lfDI3VGL?~G^JwaR@Z#qRg&b(H38j@E-lIrjB5mbM0698kH zTMEFZ0x-@g08S+E^i-96IzY3_h;jvhm+N@hYv)=yQ0yOOOb$O8R&-POKZl{hM$%cz zGkToRA}ExMD8B}j3IhtgrcUVi({!&>ELAXIaK-*%mB-9L zSE;o2qkFNEL^a*o&CG*;{*X^$^oM+ckI*lT+b$BMm2#CzE3-1onyQ?stnJP3@dja5 zR5_D%Ycp84#$I>Vf$-L3#wd*ktjSL!zidNE@C&X}@yq#;f-t?9PJW>zc8r2ws`Av? zhHL0+st(u8hHJLto)4}e`^iC(pXDIZ{qr0Y;SQqjxZ=41?!QN=+Bi0#;*FcVIIm|q zU8q%A+A({xzW7AywNFgVi}X!ac<&PO6V8;3D8GXj=NT@f*UlX-oM(-$g+I%Ar1j@H zZy|TyWl*4TAf{`~`yLiu3n;oS2P6D~>r|qP-j|0keOH$J!d{uIKhHtSxP#~=L3?y@Y-V&_3l2>HM%POXR39Z4TchhbFcvSR=vr!c zah6}sO3#yIIbD|J%yg-Gp|nNDi>3idmJ&_q3(|ev{qi8elFeAQ5=&2FS!u9@1WOKB zO2<0X$ns#y9^=S{_QAfx)3kRFgKymLP$+2Wu%+HI3X~G3m6SQF3Ux3 z0!Ishquj{H3i2^-i8rf*;k6Z3JH-dv+kx;_LU)Lx{-r+i{5FP zP+Y+kTUySPB&86j6aq8c$a4gFwi|h#AkTFpFBIejZsetcyx5IgE6B?k*=*FT4Kxb! z3O90#Ag^+eWqBoX7Lnt4&&@l$xDaS}2(aQd2=Y2N@@ay6svCKWAfE|xq^Y6RQoJm0 zM&|6!mfC2$C7Ts{t`OYjrgys_pYKM#Opq^iBVQ}XSG$pK66D=(Xc+n3pru)+U>4EfaFmjnFXen4DO&g*X`E;M`t2PwZ8$_8+`8pw7 ztHW5qVEDT?2sq10D%uijU!PR8?5i_WGOW5fjwro*dXMy;Q2l3t>yds^t!;|)a6hTW zlEEtDalyXN$&TBsB=#o-`~H5?3a7H?1ofGIQcKM`3tg64BS`}m2$D67>TiVi$o>+l z$;O9|Y@ARx1}tM44~-v!2Qvi_ z#v~J%Jx2@iqrAk&cOib95HI!;Kc)-u5+Qy9xI7?E5lrR%rH&+rm3d3f5R%ip&`s?E z-E1LV=_Nk13-J?$con!jjGHf*BHm1k1=B(=ASZPJWSJ0O+TYqH_28loMQ|+lMzKOL z)qA0+>jK3pA>QOA-q?kBOo+FD%fp-Pf~n1$X{})D>~HM^^adFBLf6p+x{X5TDc%Kd z29r?%D%F{)Eu?+ z`FagqfkHe2;6@>P1Bx^IiV|7A-V5_CFU-JltI+owFY#Nt5WiE1-|i)TTNmQ@3h}#P zO;d+u#L`{y2QRgEb)j~TQ2T(>N%!}c>TF)q`a5O;_u1kBYc{g)PyMA9Rv&Vp55^rV z67A+=(<7pwhX5zJ%4GRLL)32-Wh2w;Likm;*6~Vz3DX$I;Q6u*t?r|j5Je77Lj4AK zYwfUaCfI|0f9=1;SnZ-5zx=j<@|XTnW1~ZvEWe4|wMn`EL%yUT+cq4-w!yyloF)8S zl<=;bUGMal+FVun<$nmt56F04o?Z=vUY6gd8cWJ&KK?`qe~hLWZ^SG%iBXn65}p#Z zM4Fj~FNB8AJgWFpPwBzFubqDQN~rtN!(q8oX#2(k+`m1+`Q;yk^mkow z1+t9koG;4=sAMusWS)R3&4q+NM^0Gp7?w-%iG;XAs%4{>fUZyfz{$XAa zWnVB$imzkST`_X>r!0LQE;2K+q^5c{Lls%s;9GAO&7mx(=wOz~C-FjfAZ4+3iKx144&8Brtb$!%2B}A<)aw=OWlr4ZV<1W(T4lHSa zVBAGo2y7HMS%@#mavP~+d9epZxVcscFZYO;YA@lzz7A*nH3)4{_c)W~dJlE7Z*>-i z_iAUq)vQ;OXd7){Tbsnzi0X~D#`Q6jmcz|^a9=D-!U~U=V#~f3Jzj*;RaCZ(WhE73 z%W2i4P8UK=u65Sr8exANX13R~b~M+-qxy(rfyCw^r#hui5z_0kq>j3p=IA0zYmw!3 zdhS9?F4J^|Q`6}})5a{Ry{5hiNNhr~F98B>R%pgy^A^n7=2W*us5{e59oDLU!dl!2 zc^7xSv$*p_ap!mh3qW3Cmm2K5*qL#WJ;N{W5PG*$(`*$JE=!A&$4jz*1g zciOcM_Fd`BxWb;{moFFP{;G>|FYUVAYn@uJ5n8WuZ)+?xZgPsO$p0p>lz%%K7dp=XIg-WTA42tIEahDi?L3a=B2stP8HF;Hq;ixYoVknl4l} z3zaK9>ai)Q9$#nm*qH5lmm$jy?kHAtfud8O=2xC5NmIWVhpo1j7JAZ4ehbcHcKXTQBMqzRx~wJ2fl@dw%&YJc>tb66JC*HlvSVO z?ykBVcX!q1xXrDoz=j+w;x(f;Na`15UsDcWUkqc@UE2LAg>pyB+2aeW9TZ%yo~P0lDsxlMM~lpR!~*E7v+%b&P)f zz2M8f+*}MhZedoKE3Ia?T4GczK#q0QS@wkiqodQh)GYh*pwL)`vj&oHC#!mCe%%> z==4Oj23fVrzL6o);n(K`2^K0oHALmvGJ$8DP&y_=70XxLthUQVAh)Z=tXe1lEby>uz6Y>*-d5EJ zrPUt7%e<^Q*~_Y>ZdNVvu&O}-h0pNF*kkrvuQ)eCYd+VdaM|u_VU`~8P6A9nPdSzQO zeZGG}3C$d;+iIHh=_5V-oR|tt0onHnD|#Ak(WXzPNhg=3XM(;G@V*RT<&@?g#>1kC z>1-NtzzZLw^Tb zybnKj>#L_T*_rN(d*nH*t9zcbGG-r-FUN~XH2C$(a~Y4*0M9WV%f8-FtN*mB_cgK) zPq()vWoG2juL?$J=)C4n>1-at@8z?FL+}$)eZ0CZ7PUU?B+Gb+$O|~`M3N^G1KofR zf)Yz3L`CGHT>7DCsP4PN^|K;;h$*lmyVO~IC_!ymw4fDl9WFo6E0xM?DMZMm_!_NLUc7XEN3^|T>D;Een)dqG(#f&4 zty{3;6LGu3cd~hs^GiuzY2Z`Ur~5&!Gi@C6x>>HVZqIXmla%4cxAywh1V49D!8#= zSK<8y`wGq~ys+@r!g~wvE8JW7=fbB8pDBE`@U_CX3g0e#zwm>?FA6UkapefM71fpD zYevL(hxZm5H!SEdgHxyhx;_4Bv6>jc%O~F~=mxgs-HR9%i*N5#N_Q|kq;n#-! zA^(c}orM<^oEyHi;OqjeV1JmL^-B2dLUPz6FmQjtwT0x2MEIrfRfX?{&tR@1w|$rY ze3;DpI{Ymh_jdT}{9Og_6dug~pzxdgt>HJrDcexNPDY=2Bo$9k669Y?=BVVsQt3C4qfr@tQf=a(A@y6ulJ^cp?x=%Ref-m=Mx|1BGOYCbY=btKD`2nl9(w;fA!+iD}nf)#yoEMV!AT_gg(6@h%yK^ zs60*tBk{qdD#dG4bF{s<0R7*b_EWUP))QI<;eb(J>PwwLaD%sf(K=^(1MWq*gWHU+q|s*GuY@X&}v-j6_6IE1Kd} zwJR&=mk#}UGW{B&R>b~qcIyT}`t?JtsPCfFSJ{0-d$cXq9xrZdhm+${-!1+FM~;&} z45HbOMT6}pC0#8V@lvQ`wS+Zg zQA=y_V^VBwNB*j&c*oK)MN6An>zX_3qqw9It7znx~C!U+}PD5t(e^o%+8uXe>@qK;vjQaPIvc8{=9`*6E6L$>H%$E)wIghk< zBhvcF15Q>;Y7d_MUH9XEKW=x<_HQ$8PnT-yVjVO^?-t0%N7=4KNAh?++U0OmU4r&1 zNqgw>eDvKJ_klHD(>m7VrEe7NC*JY6NSq7aAo2R7j6bJis^-x81aZEFW}G-^(JEy~ z9a#CbmH#wxP8fv4;pjt+@_T}Fb$i^-`V6s_;Ts%@It%M(8PcS>wiUQ#DJfZ0I&0Rf zlEo;1ek7C<1o~N$ntB8df9xqqy&t-ef&NmLYHD?tdXA(tlKR*p^(~jGYp!W&)8(wi zosZ&PAi*1s#9`uLXbO*`IKS_+4Ef6pIioB{P}h*;q|*6yZ3|HGB_#|omM;A$NJ?A^ z9WRlN?xS!BVO;31L!QZ{YwGJA3g(X~DT2{L#ZIVrg;Z3J#^F||D15w+Pc93}8FRRf zj?UUc(D5qiC@;d{W2=ruTt`c1Gr-#{0T6PB0CE|CyiQ798-qhtnk3~KK$dYOc!-;H z%o5HZLyX$H0^)Cw_)TMR*aq=|x+^wwX*@LD5O3^QZC7E@a5Xf%MH=K{9OkDZz^FoG zc^Q1M#j2!B6>pP@9i(CdR0Np{U(XDt_n2=D_Y)a?M$N4YLqgmBiQGZfw1=gH;1tj#K2_V5fcT%8Ry0oG_x~>gx@%8FSlruoN zh$y8@tb^V;HKa}j?GmE(Ntc@Otb{3b7ARMMk|q@e>)K}3#K+I}iFCP`M2JAaYQ8}a83fTbKwM3i40NCW#fp$I7e4y3E+SW5k1Nt^lcM~;0)W!xI zaVv;7f|w@t4#Gucu~;)aG^JFM@&jlc)s5@hVyxfh4x%1dW9*qQh&nu&L$7oNCP8_< z4Kcapekyl1k&*yELZnKNRyZo*G|25GVg<=1SI|CIepR5ldQDw*O+4P-REwvMI*N<& z0BL7)wA9EcE~YWQ8uu@W+Yk|H((IoU0qebt^=w~~_UIZsC0C7GqG;2aXuDe}_cPHg zhb)TH_A-$xl7ZDUG_>RGmv~LByG8q$;N^!Xh>~a$o`x7mvMb(*wpHKM+F&)w$Yb7n zj*0pYMHB_S%D8iqz0eqKZi}|tYOJ%PromcaEX~S%gJ~K3GqeB#%~TN3ha`;O8f%*4 z6e(8wjlg+_X-fOKntNq*Lniq0Aq&RZ;!Q0WXqfvxV#3cI zqA*~70f9i8(cne5M}5cZ)D{m1;1>`4;(=d0@W17Os=P!%x=yOfPy8TNjZ0sVIi%+W4Zd=K z06c63@D%}|Uw;4q*Qo#qLkhzAR4~qzj40m#z}E(V0%R$3tN^}F0`MOKPzXiLHL^0YnV?*uJ>Xb02uZ~kH*YGmeP+xMd4?+C+i@B#y_ zQ^9Z~q#%3*m5nncBg&7!@V$Y7etuIX=@@81L;F5$>sh7q@z07u>J4!fyug6#R4^1l z3c{nQY@8_>QT)9tRJpevier$alv**!y!UfH48NN~I2i)@Zcuz4hwQx*1oMtYP#dC`W@IP;i|JlwwFh_!xqKGbJNRZ$RnQ zTRqHxax8L{3LOfq*=fBDk7$P(R~$+@K{*cmfP(8(piF`kgijy{I8!pB^aYe)Z#Bb! zQi5D%x)n;$0H9?UR~$+vK`8}4px`Y7~i0 z=;}%k9@=f`sGX6xl328kL<-&3l#=2*(xIXb{J??hRB)_-6ohGWEy6*`h;kQj{NBJp zKcy3n(;0@}dtvwkVW8cxfC1O3V4w}MAiR>w#+i~4F?XD0xZ_?M z6zv{c5}mr?9gUE+Kpe<$oeHuxNI{r3+ahF?j3|EuvIh)UtC7WEZ8l&%;Duuk;b;dx zaNs%>9G#GYaGc7=nUWFZA>eq>z_A8d498vr$Aext9wr>L?-p?2Iu#rnAO&ICUyE>1 zGNSw$IQAMiPC*voh_Ptd>xJP_!f+~hfdSX4U^pF85I&8{#+i~4<#Awm%)pR97V`yt zWt`!7%nQeU!m$bbz=7*jaGVJ#2ydqHai(NMc?vk5G;o}SEW%O4Fg)pn;c3EvM`#HH zu2aFV15yyakjloHk`d)OV0hNRa1pWyLtlpBSuYIF6NZby3kgO1Jbq z)U~tUrL@1KZz=y5_7lNDd(#Wn+XU-(kOeGUrvmE^NJ02^f`c<9Bg)?Z>)mwq9Rt># z$W=C^^PNW7??mqs6t+dfJH{18LX1FvCn&!MKcL_`6)1N@3c`ON2sl$RqI>`-@29Kp z8Bp#)uF^;M5d8+Hy`PS1q_3rG?|J#>LjrX#BmoN7sepPMQV@QOz~D^Di1IN&ePkfo zk1UF$CKgE_d13e`VR!<(z<}#iFgy(@2tP$-<4nnj@)zd*QsE50a6ftp326VlDMk@hA-3A0|pG*6A?tVtKrw_%Heu7(GLpBzth<*j&{Hf zZY)B5CS+cQsP-j-{h^-PztfS)hHZThlEf=S{aR$RNc)P6p{)jC46ai#<_(VXb)3i; zN=B6LV9dAa>OsR8+Cq?ZR<{|Q)wee2+Cf{=(o1|#$Y|$5Aj5Sk$lit&glRuPLPkk! z37CN`0S#DxMHazY#j5&8FAQ=9#NPogFyJ~B41b3dg#Sim<4j3x?*|P241GrW98)r&J zls>=^G%)-NS*$+JHR>big`+Rw_zL{Mf$LOodbc?OKbkjva5?o{$^P_#T-vXc3Ud8dGo^@2E% z;W`y$K}bP3gAn0NNo>mnWWx+teUQaqZ8oB1m=}%_grhI`fdkj6;K+s)gtKrW9F&YG zqkuy-a11~e!?D-Ep?cvMO*jUEA2@KG3XU8|L3l7ugoBb1Wh`)vF>nk)mJ&$glP-E_ zMjPXWV;teg1wU}$Iu#rRkb-cS%Ey_K5v3S7j>%9b8c+(6tN3&%^aH(ij17u5(U!DC z%&~-QD8zvb*Qp>I1}O+Dga~I!MwCfFc7g$GII>txiTkJ%yl|8djuGGo4qT^#V9F>rQ@JuQnXG%tt zCg5nyP#X*=vye+r_`O`C4TjcWOIljYNg0=1by)k6}X zaGeUMRgi-4N&0t2p7!O#XN2*;>woGBSm zE(C_{28PwhA`JY-ce@vc9fYAByug6#R4|+ZDF|<%vT>$lM7b6iuE|iZHej5}nKt62 z?8>m;bY7pqZ#u8GgEMYAPlJqh4O->HJ+KnlVa z6C#``8Bz8D*`o%mOOeH3i5tF0y>L86IDQ3w;J|e%IIe&cgfFM^ai(NMc>*~08#t~+ z7UAGGzx%x~JV_XKf)^NYoeG9)AO+#8scf7n8Bv}AhNle-*CLBB@SD!3y)ZmW7_I{^ zFyJ~B3^zau!q-#TI8!pByZ{W(8yI#Yi`9p?;d|Z-$BTsHM(_g%u2aGBYe+%(W-1?N zN=B4dfa7HY$1TVr9Q@|@WiJe`5{BP^7Z`ATh!~dls*;yg$tR=iWmxY*xu0gJpXfzb zYoE|9uJ$P%hguWmWfK1}>~oa593|qMLW%WNave&nk0@WF!~+@X7kY_N?F&}o0Xh~~ z6Qaa_p~Mv^5$6<2T!|fqQR2#o@-<5QN-u7e_7xRm-;=k1XZGYLQSQG{ZZpcoIfZiD zs^l2TZNqQ#DEDB7`kxH-8@=?^u->xVdyt^eaxbdElKmeeTl>bi!WO(!O88RncRNe+ItuRiR>_5cH#DM@0a|HLEzxluu1pS6#~}^dw{;7a zd`p5iO}QX!uKDWZfKD!TkgH@xn;eAb_HZdX7MBC#FyO;E1$;+V$wvU+kr8Do@KprW zDLTH9$`l>nmhy|jMFN~s;hLSNvj?yXw+p*7J8y`&JM=UFR{kR zr1M*Hto$|`=LYRIo(LO{fsHt)VB_&s@^P^7_=qwOHb!&`O>icQ z0WM57YnC{ySqy8Yz#5!Wux5IdJPp=Nk0{Gv&B;M^scy{-WhsMgL8P4Q%n9gB)<(sd zEIE2tUk!XSfe+^t@SRvC&jG#@BT6ms)dbb$I=;Eeawi(4#_8yQ&SXKOGg-_E_}NfY z2YeCW!#M?fCsoM{fbXP;5(U0`9o#}53Jpo2Q18UdqnBq}P`X5KgQLDz0PiB;#W@AM zCs)Z!f%jyrApvirj&~WyyDAB9qZ6;*+<3kPFtfuJpQ{{rR|0P}@Zy{T-nuHe7I^C- zN-OZT1l498ay^IK7DO{Nx_Nqo7jeu7d3qyTYYD!;b<4%!`Ru4QTT_)?aoXf6yIC5l zU8T+9HiyMASR94LIHzE7QnK|wwY6DrPCQ|Y%WA*=p;+D z2@;>jt_7;qK!tM(s5-0UI8b#)lnp?&KB%tKfvw@bJ~heL>zojk^(@DNETC{EOP0=L z?QyL023^2Hb`kK@YAGk+IZ~hMsKry@ueImVsw0;pu7VQS9K(vVpUuEO)(U6GHl(3X~vRy%Ape}Pf+^DUG4^PS2Zx3^ri zwe@LRJxe&>UV^Rk?FLQ1YdDWQxgEB`lekXBlNUn@!WWSTai(NM*#S>pX!!6_WN~L* z+_ilO5#CMH7fQ4XZI+py=rb`O`D_EFozr@Ebg{$Ei^$Gj0T1lNbt-o5gcO9YB>Qlt zWJI|PcK#};UK&&{F|54`1m%jLEuOjcJA?3x5kd5+675o(iB{k{4dB-BxH3t>C7ued zv@57I9`CxE;9V8OWAEl5ZCkD|9c`@fSaKfJSADK9mNa;4G?ZUUPSLI+B74AM+}3kS zzq{p&7iQJYnbcD%n0S3KLcZGtHtv$EgJ^VyOXy25+OI6F$L1c*+t#ZMTlHwZoND=c z6f&>dyg=~{!4Z17H<0buU|^V0f-C%yg?Qx4^aRJwW;ERlqjrOlquu4+1zhKhYP(8q z5!W1Gsn`hNm}w|lR(Bd~QOy9}Du^*6#}vbH4K!mW0zA+O!! zn7MP3tv|JSN%J=OcZSJ&<^P)6-5r30%EomnmHh`uLHI75sIn=EU+hrXw+GeRjGDe1 zxwd{)yUki1_Ee>IJF`?j1%~cqw`P9`j@(kdE3A9%E@wN^x!LH=9sB#F7_b#;YYo3Q z9KwUhM!PFGnXh7vWjHvRyLB`MbWUSGHZZQ@JIST@z;3t{*QvPlen>%BBUj=~$%vxC zrS}EZdxPpdhF2c|ft$L=y?^^-5H(?h7Tx)3_pu({T*2hx4+OD#Xz&2q>@hg?aJ-*<_eWR<-{CqH-#r8=2tSAu`Hqr!_XoavFsS~? zaNNVlwM|*L8y-n=!-KXc{gX9iGvE=!06l!zYSF`F#Um&RR^U1nEA~MO!jBSqoGBSm z9)%Tu4yt<%D;`5G?iI|57q{ZEBrE=G#jWkNrfgO`=4Qn{vf^M0wt75Yboe&tt z3C}nQJ$1sfPC{>;@SGq3#{Zxw?ZqH;T^}xG$Kn^r#y61<8*!bAjems{gx|)AY@{T9 zsfLX&2i2Dh>)t^wkE7R;?$uuwcjgcEEP}<#ODv-&e*WMY0fn>B9kh+5x5%*FQS0n< zS8iiBGdwk#Mc6dj;`ucrp7n0!Rr1}tFc7}O^&$E$A5QCDC3l0*x<`~Z;jg!Y>RUne zFS^TmDDMWj$NrYo^8R9tTEX%sW6**?QPG(-Z$K0 zoiM$Zq|T1rTitthbvC;`NV4lNc#Hq0DSiZmrIce`cG0se%Qd=~m1(Hi^4~$t_Cl@V z%xiU)U;YByM#yY~uFvotJ+bp?SSn%P=Ko5N4>0mp+HHXL>?mdA{|NHeZshL-`Jh#~ ztSgtWI|VQMd#kjpD-Q^=+?$~3WgFz4g4`Ws`%bRin1H!80t1^a1bQ(6Q=cp!=2k+c z5C|p-WVi|3fvq*TLAT)>X~LO?y?+qo-@B1DLB7{PmgRepV>OW(v_}X$;1FQshXwgT zH}a!`yw{DqUyvVjBR?(3Pr8wx7vyK%$S(`>i*DpM1o<_Pt#-@ut8M~s3xU6I0kMTy zJb=&5$#1#|{apyXn^ej>ZUP?)f%mz9u?J0Dmfv#|_@@x~$c_BDAb;vc{z{PXrC0KT zFsg(Zbs$Md_I-`K3Ti2|=P+7|?E5!zrW-kEx7ZBhd!hJSu9zBi0PH2Qd@xBV1Z3cI@!Im<$q<^LcHJ7t(6viyyUjvs}N?_H>Ypwa32f_zU<(MiieX$9N0PUJ|)vF?G& zFdil}^ax^GaVwneNgBGjX($&ON`umRQ$ykcEPu#yNl>yF&N69xvdKYx2U`2a_kMYr zP*(vK*UdqvfZ(z@D6^+hh|lm6pWcP|i9)=}OMG@0;`4=g1YF6xb25mF1=GTy%kIM` zc}rFc$&E@FYViWn+y#&hA-+0jZNhqR zp+j0LI6A#ioFbUkd!bm@1&V|aKg~;gV;ACQ3h^_*<>Ae<1=CsHOy>!vb8MY}-T=3G zq1)O8x{HL)3%v`z989#^-t|GgbKwo_Ogk0+$_>b+UO+DK0wVjaK&KRATU3gj^{xs^ zu@-#LoO&ATrg`0H!#ug$HIRt5#;kiRBOrb)?71m9WMuh9FKD~Hq1}=U?bc*yDEm%P z_U%ClJ5wZek+-1`j{vw|$lmAdp6~U-e2*7qV0l>Rd(cb#PhE)b6XJjN65rc}_)|js z30R}=ImyQ-Jy`d9seQZ)wJ!*@&pDm+Y*4B*{f&E0?Kdod^(TSoVh zHc4CgHVg3HtD>Nn0Vlc2WcejS)E}^jvTpw!A^bLh!d@tBnPiic;QJoP@>_(>CI2r3 zF)5#rz6%&djAR=|W#8Y0yKIE+|8F-1Jj~b(u&d4cj=3`YP|v-EyTkFsu+oyv;oAx? z4ZmM_eweoD`>1e7cqcaL`>>F9=es(5aripy)pvj4F6^C`pTIVG-{rqmcouf(`#Rs) z6mMJj-omZe+V0k*P3_JOzlII%vJQ>6Ak!Z3Q=F-PZH{(fo~ zyQ9YzO&H7gyWYia8HzJ@u`9;sQZa92e?NB@JNgReq3mLJWT7P8?9&U=PhvMY-S?F3 zhrSmM_u#YaV)r3_Uwm2d;Ir&vmpxvR_Ppc4r`H2f8-VS_EPGY_|GA4@O}wr#8lOR1 z5s&)+crQCE%>QafyXHLH+L$}q4MQLu@{V?F)4Bg{N4t)AeRESS+Zpc9m8Tu^>9NJL zzrHIRdZ=%&UuP~4{x5ErcXYr13(A|DV|5JsMQ266xqr}k7Z%-9y(?|i@h@b?Nd5oj zetaYP|2GA6u^-=`|2xICyfVk^z3Q=|H$GT&>t&y<9=z|vrp)8A{wuuk_L|m?71%e7 zxqH?HCr^53^R~sChTMGATQ}~zFZ1^QPCNE`k2hgQvQ}(V#R|CL{jWot&Ye4N%Aal= zv3v5nd6^du_^;rzec+kq`u$qph3BbCZ#H8t@lE8?qfuG!rF#GnU9zH-C#>lfAhCi7?P-pIQy zwr4te*go;%gU#h z&Y50P*JdJ}-eFTVw0wFUS)r>N#?|?lx{QN;y|%8r5c8bGU<{$g){*{9&#f!3!W1yE z5WL3LmBCDptt%@~Ec-m8p*1g4TG1SfwcB^3ybRNY#Nuom$}z(;c!z?Q?R{kIvq>Mf zd@>(g?-DD04a5L2HB)Mftu>Vr=TpQP$id-ZOven)nVBAYXI?{`2f%3*9|5QP-kHA{ z0@k8#ChOjQ65l!#H&56x6H!3`o+SW7Xz$2X*pkWEG4nCb%N8?D-sgz-0^+^W!utf{ zt*Px0dg%?B=ZRM;!ePI`iya1^WxQ-NLBTCH(p*Q}AAnomNONyL`LTX-#tWuQ5v_G{ zJXFSuR7S=a9F9zrq`rKsMqNtn4{O=|9JbnotzxUq{}~JZr@?P*wK;2b|5%uB$`HsDnI%NfTqZtTBl z=YEw`4?GHoE3Mp<7N$X`e#{a73(Wk}Kxi1>q<^2|(TK`Rq9 zb^#S}Aa?zHCu9yUg5s=U~`HW;Tp*6aY)gXF?`>%wq zX9*5iF6O&=PUtUB?(fSul}U)rJWZp>5ATrJ+)^B_hZx(qb8>%qHPD^G#Mr)_rU;ev zE{PPE;qVwl@Mb>k(0Q;gJmG(~pUew|d29O1r=s+oObu^SA}T2q{zhsppNhk$NU^;* zQ8ENiMd5caDZUk_a1GV+dnEPA3>-A{w))PS$M%<7A@oNQ;u}@Yj;>{(`%r^93Y_ng z+_Fj>s?hW1Q-cXe8LyEu)(PsI+il;1+` zLz1hl!Xeg=+2ogB1F-M8U^xWvGpX>x-H`YPNxXj&4r{U`X(DZ$s`mH6cNx927`8~X zp#^d$c1GLjrw-maZiD1UBw4TohaVw{=gKIs{Jy>Y0+03cXUrn$dB$uE2D0n6SO*X4 zf#jFFpygxIa_$No)(!$Rw2GN|N8M!eJLAOO3AMh!AaL zY!2n6b#XQiDvQ-OMLTHU)rE6tgJYAUq=a@~?SY{Wx*kP6{jCreFJ6Mf`eE3So;T3$ z1AG}{p}RfWj7jI3X!V*X?joAv>m8fnGUX@?`9;`fcZ_vs+#&?tX9W9>OL2Gx${QZ< z69`P`??c3*Y0g3Wn1(WH+S;1eS2wk^bvAcIO~_oU*fo|^8?eVh^XH^Fd<6~%hD%a0 ztA0Oge)25D&q+dYZBtE0%G$pm?RW0P;qehJ+E+mPs_Krqn&z7J>RM(#_D;4q!v@>f zMtK}yA0Wk5*Whr?5i|r`h^S?Nw?QR?S{IA1ATK0upnc0wh~@6aVU~(raY)uDPtBAw zdge)!+S;R$c(l#*pLI@$y{!%Rgihj6{P~p=o}n{EZC8@E@xQ~Ny$FYG9IWq& zegrn-2xx7H#w|K|P1q5_epV0pQsP&zeh96BL-0*Q9> z4G+m9^W=<&oYK@W8^VJid<_Y2`#la{KzINN2Yh!Ak{=i(XWT`?W-GT(=`ndaj7^?i zM|;1Pw3OY2!#vEkdM}3-nU(*Dv;3*icqy9*Z0W|0e+}Z-k@(XjemcYtClGS?wY}xm ze)3&|P3i~VF&z-2ZOVH}A7@W0pHp2{HF;6>yhU@SR7d8O&YNBiiIc{2 zf6l{R#3d!z>R~$g@o-YW=Yz4Oxwa7-VWRh3WF4gEOwdOXvo+J0O_S7Xp(jl$7{Y2X zUcv-1ArD6hP^2KP_6p`}93W6n$30G;-QPm_EO-%Y`2sQc}C=C`*HIMfOj z)HHWS5h;NseLc65e-FI#np&`Nd=0j)r>OcHa;CP&I(h1Cq{?H>%}pImvDWF68AmqE zi8R)`-b%02he00E!dd;!7T`I^s%ELaV0Y(LysdY=8<2l3 zkOp?L>PXsj{(5G`tLQ20t$spZsk$!Kww@{5+N~E`P}l}#yP3c{aOq@h#?GeHJR;zk z0OqFEb&U-+A^JA>jZA2hy)DE#;>nF+pu?Yfzh-son@|YXp}DdOG=lB|I4$r^Z$wGc z8fi;+jyMM1TUg<*^cDv4zHpLDvx75fwoE?dUB*u|xCb3|g35Z7p?lXFa@1k5pxc4! zW*+0_@XEdrxMgW%-q1;_sQIAW`PMFjnO9O$29vN^eILAWoxs3Ew)V`E2js4lvoyvq4&>ElQtU8nFWn{P+i1=>PxVRJ2=3-lfk{yVMke+-d*fvx?G96hEe?C(->>Ss4u_xL{l*CAbn` zjox|_E42WStkX#pvK@1|H0evgp*A}w*3lG4d)E!=MIQSW(ZRxFYxiF4CO!`H?m>72 zhT}HD>UEl7nuDBm$e2?GP-cc+J(hcvvFw%rtpSi;>W4)F+z6&gWw}XGpi@1jNxd8% zoZi|IZMVB_ILyUxUq{{5Br>IyRtRTBJ349_sJ9MCCFqu_LHRPDRBBm_pMKb2(*qW8 zx+`9X(Sb+NQXAK|#p1L!+e<8sYOJmN!67{zoqkO`)~+jfh6P0yVyv{C4G8lZ+oLu0 zfR@edc^@&h0F{r79aI*c=c=x^^-8pHO?=i+J zM0i=+n589C#hGzM0QF$Au%k&Dakh=ylEcHPxcIov*4CPqXuTRob5^m06>V#3ZJ-sn zn;B;ob=L?yWMs08W9%Iajs3WjG$X#tz9oQ1#;WU+y6Z=n({86>g9fjPre;1KA0R(p z#=8Hux)?^mEi$jv(?Hlu5x#@;*=Y&T_7UyLUJ~xP`TZEgw$c!X^>}G_0mV{Ppt^cZ zU3E=7-riK(2}s4oSpDy8j+PoZ#l_^4Y6{NVnCY{BQUt8`GS;(wN!p`pur^iQ9<7UF ziKN}Fl>3?JmO~arX?vN-70JMA8XDU19A3Pp*4?6gOz`qU6huk%WJ((P>Lk13teGHa ztR@+G%zMu=nt9T%ZDr&Yl}Cv(0vRA z{6|dqxkD6&z!yy5?=)OD#an7Ru=v;+SYUL=c;CgGYrRg5b8T;_rZ(0dXLIrdTIL`$ z+bhvB18sdJ_A{IzLOX`N#X5)&^+9kRn|ZJsr8H@6zfP=wjvGt&gP0>q-G1hZ(FDn_d0o!ErGNvKJ$`XmT)nJq}?#+k;_dt?#M1M){#)fnK)I&Nxi)UdA zTpNX@oS8kOJp&}!hnLQLfy9saGtNDvhXsK#^uR1o@?q66;KMRuz=w6cfDg-Xfgbo( zT=Ey1vyS|xj(q$Co?nv>#PrNkKL1Hw>VcoTC4XqtsHOaW{HndwK2gHY?mh71wd5aW zosifUwuaYzF6V8^8Sh;(=d0@QVk2@xU)0_{9Uic;FWg{NjQCEe}-X zB?8iQQdNH92dQdY`ijgUJ%_W8(n%T3nNqOIM|<5Q>SXp6qgtHkD@K%zDE+Z5ai+2P zZ#}Z;gEGOAEv1=SX8KK~|HvPSOYCY=nu#yumSz@b(dNTZ@Zp;=xIV-$0kQHMAqC+E zDi>!;MwEdlKieq330YKrVzeJWgKgc^Ps>jK^`?*VN8%DYyl(1OS&BpPAi}T`yug6# zR4}wa3c}4)HqMlcD7nCpldcXnV6-B4=awxW=jWv>-}K%?S9qid_l#PO-6h&!dm0}= z1g|byMAwr`=~x^h#4)G^VqB+!xE)duUQI}Gres7Z1mbYInr|TPK<>_M-9OJiJYD&= z_a3^E60~Nkh3yX1^6lx$vBay37SZ+OQaTn7CB$*41!7zuDq{Lh)Bs4~lubzWWJEc( zPla0CN8jLiAV|v9!98b&`{Kzfz*LI+U?;VQdSaJrY}$fAix(f)2eR~D5&+;j6#zpx zfE*nFC9&fu032@s$VC=DSjz#dBLK$}fQPLBN(cbG%mo0rP6a?1QV`Ckf^nuKwi*S1 zQUgE%vXq@x0HsL)CKG@{FaiLsQvskr3c`m|!8lVgqErCD6a&C8WGNTm%W?2`f`0qb zru4yw$=J7A*;l6WOV7wGDxOLhhJzOvaGeThLOlp&e1W@ zO1Czx4>qA=TRB@W%p?pdc!2@esbDCA6of}p**H`3|FHMw@l{mk|M<+k7f9Jj?hQ!D zO>Tk%2m@h<2xMW0KmtRMB@#k50@=vICTb8w+`zR~t@~D6Yiq4-r+%$g>uzne?pm$3 zb+@(pu^+2efA8m1C#@Ip`?bTxB(fSz*O!1nw#{ z2+B;*0}A3npcH}&%(DpsLP{FiNq|y0R9|C3IT5)UUfRr{(8;%1X<5WvW5qa>bp&M& z=m7=sAW(|H1?G7K0U;#~tqM>!4As|LP>PYOT_Qu-U;!}KTQLshWP(xxdO$%u2$Y%- zgR&U`L7}9feKu^7{;y$TyxM{+HZSeR49-5p{;y%^EYgR^k>X#4`+OKg)Pf#35D$W* z0bF3Nr}`065??6;j(=M?8j(df_=m^;oeINOgkdXafdTO#7`B58%-g7Lgp|aW$kOp8 zvUFWd7v^Y2E;GlOmN`P{vN=rEmBgTKStpVXp)FtsGQ@)*YX=vY+XxXtN*Y=}AnR+v z+JP(v>wpETZz>#VgrfuWz=3!W9Npjoa~IW*kdlTr066+vICdh7;dsEp(LWWAfrMih z=z#OMO?4xrq@m>iL)^k}EwWg9{KjgJcq$yZgyTBU0|(+kaNGzkFyBD+Bc!CEjRubV zbUn|4auae13jeHjz6*w#=SoT=$nk{gX0QSk;z3aT09;`HKA}NKNkbb4RAbZiF&3)Z zkgHV;y9etKrRNNq{l=y{pVc0d3f2h(>xbY4EX0Gr`Z2h`{3C*ckdlTr5wP@heS!t+ z4&-VN4&yKSrAM<&ouJTi&75GxFcU5;E}TSAegb+xK|BbQyTAqJpArOwlr*#{fHFB< zFR-Be47u7yVWBe#%H(u3Bl}u)K`Q%9B~U*HCqN+{1k@wo0`tQJ1|cO4Z3aM1w-7yw zEb=7&rReFYFw7(jkAW5#5D$Xkx8MTv6I3@sN*Y=rFwC|vJc%sAz`vM1I~9f#3B&I| z3k-+{!SFP=!2A@|jgXSq)d0i1bbYP`;}4wZ83bBMy4Eh5i7t3*rRn@@)pOn8tnX1j z3m$VGoE@)aE=`C3JDj=Y#pallRgJAd=Twwl)>PAROL)!=p8!Qa}gDln_=UVNt zAr+1)!tn{{fdla%IKBWEm_Mib5mM67YJg+2h2!7IVmR!b%4XJQX*y&3YPM%#-koDyLp%twA>ab@U_ykDl7`j^ zWE~c)p~zye4p`pOkqSo_;TQ&b;6OYGj!bZYIfj66P}0!$0LN|%$8cmZ91mDHcBjIz zmvD>#J#Zi%1VG}Z+N0~eU5Qr!qCX=vXDhD$9B(~(6O_+IYPR2VKJ3^PCr42TE8 zFb7;hYt5RXOhA_+nEifP+1OvTC0?egUH$qAp+D*W4 zqlIAsvY1cUd$}7^;kcP_ECfApARYuq8Mwf_oa#qNNkjW7aNL=$|HOi_0=Wc*@8#}v z!7zW~N=iNEE<&{utU!f$5LBzc1?CDugOHMj_Di5L)Ae6is8%D_y_Ykkz1%NS!MdAZ z8Q=vh#Dl9+-pqTf%l9IvhCuAGI4rGW2 zL3T2@z+6R$5K_|69tN_9()9-|WSfxdM)r^kius@`DIt4=kX3^n$Pf>LYzw%+TtkQu zQqs_V3uI5E>yKN=YLV;SbUtBkIv-C3>PZ4s2Tp)OJP4@m-~#hD0)vo}hW0!_J!c_m zMi#j|-|#(`3d0M8p#`+SfOrrL?cf4)8`X`Fl7{v&FuY`8*nupkcv+4XmY&zd|gPVc{DZbUxa~gQe zchD<;oo0SulUSvvQ|bG5He0s7N6Pe|0Lma9M47|j0`pl2NEu2R+UHQ_vvmDmmNI7} zmyN3Srt>o!0Ii_Sf4P!UANYchodb3tLp%twOTY!@iwO}zN*da*j79p;3~}auDY6(W zd&4(0gZAh?3;Xm8i1;?>fdla%I4%bln7>2yBc!CE#egGf;kW`>goAH>qp2`t5{4^5 z3k-+{!EiOWz<<0jAp2jW3+d=Fe;zJ=;XNJ&FW07tHc<5px54!-%# zO@$$kFnk}hz<~HMVwef8jpgbF)V&d#Zq&OrL$4H7R~cqy#-aHK(q?VU0Kv)lze(ia zbAz9xDdyUYL#5qQ@E<+BTC2=(NJ9B=V6PIu8?@>Svx=~h;nG3^VWU}1dAwvaPfSIIGQSir zJVB&z6F_VQ2!sJZu+Ia-`WIo31u)`k!8HK1*=oc~P=pe^rUajo-OP>JKt^TX?WOQC z6lt3?L?NtZSupIjV9$4muvQ{OLlgkKP_hRvEI}Q$T>H}QobO{p&IMT z)mrFWhs6+Td?-VIP}Ep&KFDf(h<@|rgk9q!;BP>U2m{o(tz2zFjoS?EG1T~|sBXLY zC{^Tq#uksQD0w_HjR$tUkE7mZ)Qd1cz3t^{8|rO0wBMoLCo}ZlX6R3d+IK*E>Dt1R z1ck0Gpc$m>-&)z`6IM+6GWqX;sspGH20*p5T~dA?0_RxB`c|{~ zlnaeRKqh22w6N3aKLFou;6oSy-)ZzD!x{Y7vX2vFJ+-A)^j6J8_tQB$$UdOvI1TSmUDQ>gaMcAMi#SnjT%G zPl)Q{qkQ>tyf!IHgRL?KUw+5+h4E4Pkg9WmK@>+s@dQtCxvH6yqF_Cm5FaF*h}y=$ zj0gkZ8(*%T0DR+dQ49DcNA&`MZ-Q1J@Y&ziW8k#OzS%i~T>7S-OzzFj8RdL$Zz_Q6 z0FE#K@X6(B0f0}&g)ab~9@VD_;8Xbb6K6$XaqBa*^fp6n8UrpN(WZNILKB>?*$R63 zvw@sm%8}_^-zuCHTbeswu5eCq4X1O{8I?lwsg3z%rs?QcW&f+@GP113; zS0k;^n-i9G0LU`_2@VUI?jfU2m|Oiw_KeA9p~c09dw*06r9HuEJ;#u zo>!eT_K{|d=S#48z6)@P2XHX}7XdKB0D$M0tEB)u-_RBS@cgJ=DljkLm=`5sF7;wI z=d<1{fBIeHM3MqNL@sR>d9+ywZ5BcsgaNc!TCOgEHcJg{DYRJ<)fWqGmT8L_YzdLJ z#G4ZlL~^I%L{g3z>X!lEa^OQ40N<)|wF3B78QKcqD~syO1-{kVaxWUK%xma~Ad=7s zB1x@Cm`z11fzJRwgaPoKRIaWCzLN~C0{F@WxOLnWRwubaxfe6{UY;$X^zq)+p7ve^ zyz7A%VF0`*m#bC4d$OUe0bWDk-Nf;(O~Pw<@rv%o^CiGc50`(g_28`p-fG}Q7yxfA zHaWmsYiR3%cU@FJNkFdSkT*ur4Xt6G-r@;A=94_VoYPzvWgk$lWWVM~a;mI1N*7;Q zA8E*Ri*#wc(WCJOXj~7C5eCq>2|Fri+=Lw(G_DfrZsY1!C$-S>bgnMF;Mc5jRtc3@ z-IPhVaUsl{Ft&ZhL$RZji zlClJmJmSdf2EiZ|`!J-GD%BH7Ia4=!TCoB4+68+d3}CNQ%GJHF*C~d!4fbk^>RW}q z_HlbPC)sPO*E(90*Mbp^6UpjxqEwotWROHyQY9IpYAGl6x4xS__Sz16oeFy)3}CMw zy5T@1`0R0b{9BTO4{{y5JI{r3xtRVL3ln#cpf2x5K0=_P9W@#>RnO2)53WK z1>EWOMzQ|4#(#RZIM3eWofgb)HZ-zn%IuQ$aE*6+td_52TPrSXw^x{Fd&@=3z0d4S zS;KC34X)bvT4iF_u!}5t6uQEahzGIc#oz+7`-E*DEP0A$LpoaH`kmIhesB>!Ow+r= z%~M>OIhGhYE24y46Q!GSie%8!JbIo=dVZVhiFgn_>0l1b@;RNModG@fNA;ele!8VC z9nWb8qb`5u+8>H)`)m)QH;|h>E)`|qhb-W-dz_gh;PjLN&U6dF({T%n>Gbd_f_GLF z&saE8YBjw!74|U9gQHWy`Kl`zSUjyNWc@`D2iz8DHpHuS1t^as>#g>Yq zG$n7=`B8&<+jSu0COI5Mr?Wa0y9be$?u4x1m70#IM7BJE^~1kg~sg+fqa}^QB1w zj;0iFsat^E;qc~aJYDvmcDPIYI~?9&EqwDkQ4B_MPjVgHnwMGp=7p?-IqOX6HZOyKU;-bxU31PLXz5Pf~SJLSm@AOwC`GBiZS8uq=G6;7fSJ~Ck z1^lFL3d6zCTr1F6(0LiV*uba?ze^^?8?DKthzBw0FTn+7yd9dEl#+&aBTRZjRKGr| zUuRkMZWM4;zvn-`-4aDhSgu7oU-Jg?CTYvZ*>8^G^w6TC6_R-!KR4#qFt3+WF5BGP zi`{NAJJ=5KAhx>?TwuNz0l6b34ebZ8-S?yVt(M__ja=7~ zg`44rNoM%I%S&&SQ!WL5Xel7vhn*JPMq1pDs-OkpL9}=XTws2X&?BUzq5T+I{3xp5 zZfWr_aNK@gQ0}0WL5xVDq}S7lv8EqU3_%lK_t()O7L@n`Xqz_D&j$)z6dTb zzd#TXQqs`=AE4eH)qfe)&8Yqh3++oN(|#p3sSh9SiwiTqpkBpR9ikvIh8LLLf;3U^ zOK-tIQE<0i02nW$D)U!S$htmJ!hQ?yAst^qK6FGph>m{(7nol|Ksr(qx7k6*`=a{2 zmUgcrm;2EJNqhDC?49|2X$8<&yO(98jiIMsC?leA652t#NCw&&t{t@?r(L;=+{s8O z(W$~E(dEw%SpF=AmHWwdZ$LrV4)J5O-EY7(2G`PHvoVJD0_^pCRDUk2KO5Db5mp7qHX<>OL^dYcS1ZmA867{~mf? zkVMbrC(}El{5vqrTo?vn0K=4&tHm%(iJ`p@!@L*O-xY=_)!y|t%zM7s2|@0)fX2za z+4-XceUhS_-kY7U=)D#Y^1a#l(nazQV3_$Z48j10SzN9zf?*aL+J`XA-=q59gkhFw zfAh6~_IKaxgdq1?AO$%L!^L|oAn3i>Fbt>nS|A0zY?yz*FiT+=gaHgwW*FN4z$70> z^^b%}R`Blr&!k~czTrpvnAyjRvyvvvk5U%7uEY3<^O{u>=U3zsC*P$c(0R=(iSsM^ zI&t1%LK5d!B#Uzm*Z=ekf}fz}=z=T404=u`E%z_9+^13fe?`lk#9Qw3-dpZd);xX& z(Ej%uv>X@bX8<8CSj&AaIzQmDsa*#P+Sj7<11^hmwcO{Pmir7XcQRTIVStv~f*V;e z7;Q1Mf1~}r5RF&M7o=*;bL2Sn=4D3`SkB?^PdE=`vn?l8V%|G@zOdVmuQa7Su*S=% zF_Ow$>q#Xh?%1i64ywOOS|)RG)EG(PL{((jq%v1kUs+36UX`m%wP1*4?Uyih9ZZcd zfT_2ZtBo-AR=lVth8NYu_$_BmS}4Zu@3j$%3{7Kkk_4Gi`c2HriJ2KJon@ujMXbXldXz^rW2_`*#zHY03tgzzvOVCLOvb=!b1~4< zEe2geL&*N{SVwjYBH6XI#H`$yIm%8tbRXhU8x_)h{QNMC?s{?hm33z}XJ$3Badr^K ziypclzNX)}+?aT#fUbYzLQYO>P1up}AsWzO5tog@9$=X9e=uV-hMfGEo)^;-V#w*C z$1^Y#aYg9kzh-`n&6|8mGxJ=jM2v0FE7@0>O=bgh^#A;u>yA>>=bwJ~fwq+THJYpG2{5p~C;qOpw2uSi~4xvuI8 zaehlhQAA^Sikke2%3Y)3=ed0AEDdRvt0N@MUhHbAHq}=l$x#FV$qC#F-9iASc@&!JQApzcI(gqC zdDCO&G(Uw{CNDBs9WI6F3NG&rGrYaQoKE7B>y{7x%qbF$)C4k(%L8Y4Ja7_uAYDF2 zZ$~^xZ~rm4z)Y7}$pa~AXtUvgvts&8%LDH~F5eiQ81tTN&h&P0ZI-w5%6e#=UUpng zpF(dzFSp~d$d{xEJW`H~$F(^-G3Gv7EF`<)`?zFR#E;RgbHJsQtH;Bh8t!a|E$7Gd z(wJTn(~DzzQB0pF>^eqUBzoP$hv~VMdE^HCAe

    wM?Zweu`s*wJgJFs))u(92GQ9B3UdXXq>E2B~3&rggd56Dcq?o z(yJ&MXoWwf!s+;dOO(SY^hs9P!I@fRhfBtpB-{~YsqEwk;VD#366Iv16y;UfP!wMn+D_S$lDk}WxjWJ^vW+fvd>3Uju-|v%b9*o z&a~BaJW|KkY?W*{b@_XTSvbu-)X-n2gGKGbzuV$>>9^0L-zm^ zt<#|2sY1DZT8|jp_Q&vKq2-Pyx#OvXM)G5q5AIJI-cIFqI^*l@ggW^<4y@G`nM`Cl zV~M{VlgQW`8hjxt0Bdx~zP* z$I6Gu%IEP@2gHL|`9g4k`2qxFWl9>_xv=s%mWk;pCT^4SlWcMhQ{P!*X*|PGC?awk zy+wwz_KSqqGsont4xyCk$m0g$q|SVqEK}qpA#>(PceRczxdw-tz_^;=d`}acM@=A} zqCz}K6VT&FV5ak6Y640c+68EWqcQ!6)e2YJt#C<9JIUUd-;EK3H_pZ0Z1adbvzbTb zluMP1Emim&$i-b0!})`?{lACCDVI2xfQ#G$TxFM7WnxQwA=!zZiNb(@cn~|$c{G^m zaGUHzNkh8~cKUWqztpl5doqd5DH*q^59>h+!ay!xKG}(!ghISR~^j*tH?DUx#>6)Z2{ax0j9naTzhSLQ@ z>(fMDFGS%!)MK3GwNjj>90Qkh8pZhS3+vWwE@U{}Rb)8Bh6Aq`A^|T+yf5J1lzRlU_|tN^fz5>mwedNq@qdlup&DNhxV)*P}_Vi|N-|tx69HX*Y_w@TQpe!INuU z%iinclxxXxQ}VP(j~?;fb90ivTeo`pp`h>2+u z12dc65VB`twG}{EmZ>k#)R$Q}=_;qWEEP@~+}|afPYG*2ML5eqegLBme$3^WhZa1U zsH7hu#wUzLgXYgXdFSs|&xg$UDwxX>We)0_eHhzBt}jj3R!>zst1l6V~}(67zZ zD>L;q7J7Ql(p-}YJuS}PC-lz=(?3V(*V^bSCG=c~V|aRUvv3_5eqAu=^!Oqm(*R4* zDT&i>K;M|DZ^+cwThQ-Afw?{vblSZnL*Hma-ylKfLLBJ7hUCJN3Hr&wpg#ykK&AnS zpi|P&ssVkI1)82_G&iLJJp!PU2M$i|zMN(Q*X@F8!QE$MzPtDN`cW(-~;mN*MwKUMqa&5g587x{FOv*I}Q|@^%LaFCSDTI_Xv@R&unW=YV>N_&^_DsDkQ*X`GTPzjnX-%^w zm5O7b;@?QczX}!qN-B0r;5(q=8>HeJ33ErLnB&d%O!+RgHdm@u;^q}Qs?#&0h25lj zcQDmo10z&^l~hJZNqlhzs_)L!cV+53Ep`8d0&{07b#tNa-$~t9gu1Vgy1OO7yQCK7 zVjS?VLw4a_0>Af|!Cx>OF9xJ1hv@x)+9Sgk=?@Rr9~!PdIGisYmTHd;7fXSMK1nkl z9B#c(S>$8#rTmAy`Izh||6w~H*Z<7Nh97$9!$b-F6h4ZI={11}k8wVzrZ2hQ2OSZx z!BiyiUau^?*DFh}&C<7Ii8T)meOhA{KbYT|<=vswWxaX$(8USyzPMUB<=UZa&GKIJ zVGo0AO<8zpuXM+o{4zRT=eDn@b4$uPw`IAWP%s;_BwsFbJuL1iV>@B{j@JiZ0*<9Q z%lG9;+p|3H)H9p1XwTrh8`UFUz8bdOgVJSDmkpaOO7W;eLlzoNtaT9&()#Z}B|I0@ zhW2jF(py+#a}{?a>C&1-dhn+=TT&W(hX-7H7JRZj7^-(UsxF}F%+fm~R6D(fH#=n{ zW`~?|8EvNrS2yA64u>0p7K$9%Z6qLjYU=&sWqx7axV)%L%xn|QSd`y7t z*l4M8Fb_Mn&l2V~kevCbip{4JN zgPA@@PG~7xL`)CI^g2WB6de|{cK6jiAEDuQ}`o|H>_A4>s;R>~#T_9WJv zQCZGyn0b^qc420MF|*%DIAY7LglxkcO@;2u!1=Q#WV0t$ z)>7@qi`vs%Z(rnmbU0NO=76lnwt7w?xo(N(@l;D0gPh)b4@(Q50HjszLG1;zFi>nWeP4?6cKxdA`sBsM&HRy!x`aCnrh7r6X z>eB=sC&MqjGjF4tl#Y9D%;WgSdpi%$J|Ww?uwh+6R!fr|*ah|kw<28PxUV;qtE2WZ zAdGX%chx;U*-%w(?dcrm#ynHN=M6wcI@wLeuX*y;wA_CaNZ6N4swvWMoSrS7GTKb( z$hZmFIKUf~jnQ>fu+g;+{D4r4fJRqJ8d?EH*Gbv>L~A&0K(011TkIw9ksSIo3;W1S zZc?^3$wQYjO3+Z_b5=n^QwYx(z=Y*wi2{j|*P2Y}Of8dXYH0yND35rMsU;d>%4Z-T zCI0O`qk3+ff@j%LrByI4?2&gkTt{24hNpXFmrB@cgnil6B zWMDJX}rpHqcJTu&7 zrc?P?RDMGq=d5I+T|#HZlVpm=q@vz z%D+b46O+}ALtWk&bK>5$&omjGIZIBt@XWFBh@IcmIC@A91j7>%57N!@zy(h%g(sH8 z_2Rf*6xZj)^|_Wa=2PpqmMA4MEUw9dI9%Css{-n3#WImu96)-1T(-x-%BIitf)14vTe zGZ)GFyYyV<*3$!|myWbN*|WyEHQ~d6B+nr2>inv~8wZuW4~%s_#;#`ez5l6P+K_s;c6-s!OWduOGru*-PsJ;rk+5s+TIb3?Ls z&U9kAKZes&JDm%XCRLt32FA;4Z8o ztJDOu%6u@w8l?!xDwM>%{;*1YT(67kwU#{=pg`LicMm7^E`)V*%05C}2u8Ekc5BBk zrA)^m%&l>ZLJ<-0FN!tNT(AgYpdI2t=7MG50`pP?q#Y&kSpjI*64#sK`u4cKEv`3N zIxa`C)*grYe8`+igHnsEmAT!OYLZ%^H?C$E*EWgE-n^G_q$?4a?PLQs4YrZ$<;a8T zhzC*K-~v}8Ak`^}8`q(FS6uIm>m6}@ho$!#lxe%-<_^DB>hQ_5QJ+MdyW{3ALd-Tv z+Mc+xnWp=|tgX{JBHim(sGTAU0M?B}x=+UAIEW>#ifB%aYn_ltUxu^h;-rj-xsSP& z#dtC?o@O!97DqgV$0a!#UdBztc)G>t)R-o!OwCzMoUqbq1cc49u#$PYor21niDa*w zNme;kCaEQop1A2WNU~Mxh-QCW>+)K~n-MX4Tvn+k#xpENM-?H-$?!5Z5aR)hQML-N zGBsx-al$HR*h-RB4%jJJWh;@uDo!R@Wxq_aok$MG&E1q~o5Z1xDZ&SbLbxXEPIq?u9< ztKOBva7iR|BNIegbGZp}jyn-hr>CT$osCX^IIf>% zb@$!Kb^0j#g1}<=r4ffoH>TQIR;-MF_v;)&wg>D$hIkNUPlF50PZ1)7l*GF^f$Xig z{-%ZO56IQtjhk;_%;Bf@ zA~%vO%n?xm5f6}vyGg{|T*M0yQTPt65#9;bcCUaD)_EBLwH+n#N=UTb$8r55tL^@X zT=V1jp^``QCeVmX!*VFc{K!^onuAHoEpT$h#g@DC3O^w~dldqK74aZ`_BOb{{1#zE zNJ&Feau(@d#q}>OtnVP#{1V8L&XUZpkV}__oKm{+=`ph9(L5=a98=^9+(+{Y)f`m$ zE`$R&;z4l#16*MKknkd;q@hKCJDj73a>Oy%N60lpIacS8FKLC5OSqlV(Li{KeKPzw zY4AxxDxct2E_C@MQP_uc`4|;K7sQWIms}_@vRpk5I*c^5G~n--qxTi~v$Xy>W?uk3 zf1EXGKjwd!SFVoI2Kdv`0@8JESFXmjfif*Q8lTg}oS&l&lFMg#%X78Ca=CM;CiwHT zAvxv%W?;hY@SFX8GOYQaC6Z>CLmByC`i(e4G|`Nn zm61c&B*uW7lL>HR*(YM6IpcWwILW}=5L%A>c^C%89K-;btRjBL1CK{|iM75vfqerd znnT|}(Ivsf%z_R;HibI2puWKyK(d;X8M5Zt0xey(J1ri#Kjhj1gp!k`$``Og*Sn$2 zbkc`SSuDoyKtEe7x-4Zg*NPFoOvu2m8v)}`>4Q&K^*6$OW98IM~0#V=P^ZQmOqn|EisA1sp7)p z$ZW?2GTQ?B1Z}yxz|eAFws?-7EzGviFtcr=alc}XIX1^A%*FV(7;QBcZKYvgbqF0l zO+zz##-b%!o62+X<(pG<4~DAPvEH6)EzE4Ab0atAFfmPEIV%dNLc z(_{w64rV@);Sn84`C?m0L^S?tZH&zB_=qT%ZOjYZefM~(#Qg;OXv$(ekv+=b?nkVf zk0AsoBIl<&KsKg}PcRkz+ z?hD@vFrPZ#p*;caJ5KoSCb!AP*?#P3$t=ju5yr!r>4UNe15~_?KCOyZ*BaVg$1UPZ zknJ=9_Ix-}QHp8(O4kc}&WkEo&6aj+kM|eL-R0@D!zk^>n+Ny>N|ho=fu#&9*7L{V z?Th#=oC;j@R64={xZ3IasPtsIcK31k)_0CRJ4c_DqtDFIX9(l$(8h|RyJs>m_|Ib9 z3Dx7?pP5cvn~;ONTk^~q%y_KhN7;J0Q)H9I(^8M;T@o2z8JM%lErs`YOT}Vn zER>3OOU1kr0agU=^@h76&{|EXBZ9A^wj6%1sFgRu95liyXas}-8sYSE^)xiX>4tV6 z8lfadFV4}6a`btk1$ugLuN2w`9)Z^Gxez{LmXPAC`xe`=BBwdbc}^T2Cpa$xCwb2K zthWwXn$D%4stXkS>|Q%&2<6*;iePjktUf0|41(fLZcToLy4Ipu0AWn!&dPL(a! zb`9kF&Ev3wDqGGLgJorj`c-_%JeXZB;&!=E*oBgY z_8{!CDo3xdOmlIvX)0ivqu77KG^9TnsPY>bh-7~=166VZT>=5Phk@JgL25RR4XF6= z!rtC0GQB1=S4l$zdrrO3pn1axW<}pOy*>;puC+`^uX*)&*IL=THhd%Fk<@QyybauV z^l-h&fjFjdwq4A-){%G76ML`=;z4@db>IT?wFqbcproNa2D?<{=o>B5T+eb{9dBc@ zcWwSg1|r$t%s`vDf#^X$w|8-Dj(6P%3eyIRA(%R-n4hX-@45+ug`3E`HU+aHJ+Th! z-GYFu$R1$Vo`4l=EEDo)*kY}?wf!3zh-7~=18wI9x&s2- z-o>#w-t`kum^NVHU1E9DD0|nPAS`Sm?`pEFxFW2^2IVNKI!IO3^g&AXI^~dxN2()= zs`NBrrWq9K8&;3ANirG9VIoN*l5G}A+$PBaNy!wC7*!of*^@olkUlbW{Gh{qhbleF zVWp=7;=<}^TULV0a@VJ-xm=bzn<1Su)KaE!C{v~nQzoGlv*KdAcrGhGOvQM=xl+Q4 z7udxme#MLJ;)SwsRR~{h7cY^yRUy3GE-v#cHtgb6C|<7|;>aOfRV)0eTW2#=G6taw zs#Dc9el?tIGi*p=SntR1`7q0v{~9J4)6(}VyZGOJ#gTN2JCyF`CRcN-$gH1cGxYT^ zu;PJsaeu$!p?2|Lzv8G}obFdV!YfCNZg@667sX;Mpo0Zc5ZpDRP!tIq0_-otD^w7jeN-&smrx6bxlH!!p0( z3cGlvU-25dc(q^gI=gtSUvZUPyuq({i(R~#6+4}p^?|K+af4rRi(S0kQ>?1nkh7i) z$472H;C0yy9UcZ&-CnzRw_ovTcJV&H;zM@vK@=NJjjdAks(JvKE4y2^)OSePtlD#J z#=#soY5t*ZY@5{kZ`o?*>OLo;Yrau}HF zW!lA2zv7X0@d&@-xLrKTuQ<;x&h;x^$BM(@jTv#VAX^Kv6*V2((M1l0#1zo2s+GvD z=t7=t#W1WmC^RTMC^D!Il-y)jR0UF_X>Yy6KPaSzsx85FR-ww4eBEH)B49Ky7~#H+ zHk{4GRo~Lqu_vi&HB@VfWLSkbj%ZNdLH!1$LG*8IT=!=vTU<+=UuP&aQU+^`M{M$k zyyV!#Cy_sHlRuiFGdJb;N5&s)8Bh6?zF?O=m!WjI zggpy#EQzIw2}hv~SPk1bOyNJ;5?;ZDRteJM!-j-QexOpIFYJt3-~nJoD|N3gP1 z)$vh9Qk-RyJ4}iyJC%nH_hr-Uex(OTgdj(QO|`{M2FVmgL-U7CgOvgbCMOp#eP-J1 z(^Iie>xF%e&0d&_eRePG#WwpqP^Eyl&?cH6RXURlR+^e~na#N*6}rW}pj&CPm!)D~ z-V6IGo4p)VDU_?UiHy`l8*HL=seqi+3y@7VdsS5Klft=ZK(Q${r$*6W6V;_cQQHfO z?KXQ;D)z0tu(#RlEucza%?_KWJvGrTo2WY~4+5eCcBMks*$cW;ZJDQ}uJ{0mLTWgC zew1d9aQFxdXzNQ)j4BDv8rC53iEZTFayhNw!H7BV!yQ)_B(9$AEjcyy%+YM+w6Bio2E`_ z#uBFZX)3XI_9FHkTkPFlBmFX})Vi!@Mm?*5U%31MXEti+S5c*fwTBuRig^czL^txe z>3+MS`v51o$yD`Ti#05>vYF{coB4Ua-tk;i!7|1(c|PkxD{S-(yvRdIs9yr@7B}o$ z2=>U(pQ4AX(=N&htFPHm{uouZZuJOL)mM-DJ8?kg&+zGHK~MauK~L^BY2Reh6MEGeJa_ye2yJ#@vctysk-5vuCDwx#S=BFRj` zKWqtqPtnAGOUXSl^iQuHKC#7poI;zAQfV_X^to5sXSTFYQ-J&5l;FbZmp1noy--DB z)^aWsvm7efOldY%Ur_lOxlb%*D-8lO%^NwfIE8(4SxEE707sZ>#n;~v=F0z8Du`-m zNKEP4&6d0N%n_w5u@1L02gj7AI<`W!vob-q$IY5WSzgwWER!$dZRQb_$rj#r)-Yu4 zc4x(?R<>BSsWOO4YzagrpV!nr*)ePTU{UuOg)CRiwBx}5f4to=`6+Cfm%^5bRJMfF z6KtttWBvo*m|nOi+1z>x?g^>5)zD-p+U9AXsWHW4yy-E%^|0&{niAvN4m)ESljAmd z0p!R{kCE)em}jgkw876x0e)sG@G#s$n|nU_g)^pN0xzWocjc4-k1L}%=9#{VP?w8h z9<`=DZLsNU5#+KSsYXWd>FW-f2g2$~8%$XenC0H8mw9Vingn-=7v17yFy;PWMuyhF z&?B(#!|Y1%!s==pU4_LHmKC5m&Oo$-8)JSmm8xz?fe~ijVl!_};W5>zm`8>>z5dr|ORM+yGgYliAx;hLh+%rK z_KsW4qM7Wz(GId*Nn~5my!EYJVh*L_aAyx5YKtj2;jx$4YN$o{i!F3J)$JnLM%B1- zT7}mMCbZ-(Z%gj9_3wh39W||;%{5*1V#bjmv31BkFZU@n_nw&2SzFUwzh3Gss=8a` zu9I?^q%*vdPPZkU8dExI>Y9MW#iWLMP=L(}tvFoPf?8*L#T~N69rP22v+A$W78{|| z)t&FH?mWA?b5b}9KwjeJ8X3CSn{kmlBdlI%%RNe6v(;X3Nj*wckHnO=Zp)E8of`FC z>6SV&bcHwLa(6~p{f=Glw|lAg(%$R6#w+z|Tk3cH`x1DAPJ9o}Y>KuB*ocW*-UP%NEhJXaUDk#zBj^#i=N1O0ucS zGL^cTF3e@NxG+1XU!JKnbhly?7qKo#K8b2nby+V`4O{A}Ol50L=hh}ntI}z9MW)iW zWm{5J<-LepXNz3xE3(pG+8+|&zIy-ii?Tk#hEifeii z*=&p4mZBY-lG^b_){a{p%)b0Hj2&^C_0i*yuncH$W*$j>vuOvClXkp zwF6snmr>QWOnYx5%|NQ!>JPc47sz{U$h%WO-jxKI8*XPWQXd^|ZQ>ptj;%xIc9;7< zG+e309NO5{(NvE)OzId94p$mG+Pd4NOd6sd8?H1oHPZloh^DrId{y}oEQc=KkY&|X zm*sD++AM!_ZOQUmTTz9LSvbUN#%PcHFGo&;2y*B&qRP4KYVL#nwKQ$HmzFyc5*z7%^O7>F*v3Zo$I@?Am zTiR&bWDl^PG1qSzrPOp_Q(`DN9vj+45r5 zGy6qT!B<1s*_d|x+$=v^*}=A2_NLhWN)8QVHOIf_!k1=d>dj(Tv*lPBE_ko7o~ze&ky=sKj;9k z)CRB^^88G+D6VYt%U_6UlDjQy&DFNhiWJP{skB;|N~;xqT9u{HYMl*WZ3?X_Qvh3& zTB{mcXmtwaO{ugxIh9sbep+ozp;e;|pgx7O)TPk2HicGdXe&5s*_9t>+G?}wX-QE} zb1Fr*r&4sApQ25EimIV@beWpwZh0Gz&Df#1eE>#RJ;Lfv8)jE3IGw5Bbojy9;SXnb zT-iR^ed@Z0vfKx!yW&a<>*n%)<;*w@t<^Xhl6Ea>=nTTUr*nrZ^AyOO;+A=kvAd`a z5Nqph_i^EV%G~Xd*8>%+o096@2PJ*7Pa{itA)QK@Ub%Y-r`sH-6P+6rhL&^e_Bjka z+zZ&V;!1r-M_Wf}Q;qwu0(|e-d~X43(h30AS>j4(drhr8=?@gM!@Hshxij~CN(+h5 zd!n(W%uwik2%(ijb$d;dSU%Ft&pnGFDWZlxU{x={7H#PQT6A(=x+mxp8{WrpoSf3y z!@60tXDM4oe3S|wxYZnMqWcP{lE+U~{Stkytxi^sPkmtSV>5?y{Fy^JUS@mI^ex65 z4rk=>i{eoc##l)E;eI*ZX6l=xY-@AR!{_6%H=6YN=lIOSgL7~K)m6LIwVY5xxQD$R zyIr|MtDyl7htpNA(bQUbDQdOPst2#eN*#(!jt5HLv{o7>>1eZ6nlYQG(d49MxH*Pg_JTg}B z8^$rV@q2nq;0UJtxdtmk=u-$1mk9#vC7YU8&gR0z^E0{>TPK?DHuI4ngru^ zo3YWqaT`*|a{(Es_GbrtiZY-z7Q6Z1k-I*-`q|R&efHP4tMfzK67Hh#K~1HojYr*cGgawT2(6ws!nQZ zojRpzb$xR^21q-5VmtO~Bb0uz-1l-n$o(+)quis33lrBTZcN;ixFzwU#2txWB_2%N zmv}4jVdA62|0E9N{WJ01yniJw%KJR=?Yu7%|C9G+;`01+^X|<%l6PC)1$npRUzT?y z|BAee@~_UjF7Kwi>+*k@_fX!M`4{BhmjCnoU*tcK|C{{Z=0BPLeEtjhujap&|7QMM z`Txj2Z`{#w?4xpBHzs<kG(2!#@MS9S0o6LsYZJfByAGP%$~5^w z;;zKyV=o$aJ9N4yad+b9i97Qi9CI-5_59Crzdi1=#EGp75YybH&@IOfqYAB;IW@xqv&=3btAW&V-8a}&4aot0+=KCV|sl-1MpTl^sCH|RvUEbluD+w~y-*d^pWFRsY z8Sa4unRI{t(Q*HiONMbz&W!p?X4Z$8VSmp|`w~q1 zX8zmx@4~caB@X7Fmw##gW%-#sx1=k|kmB05miCEFbx&{Xqki=j*0)M=Lw!xx#Dang zRi%gLOswmuukG4d51+#WXS4=hMN!w^#M-9j(G86(4=+gq%?U*6`eQVW%`7jBUkuy% zE&?PN4KC!l8r%>5*C8~l|Bm0x>O&MhE30^DoAIk9y zn-kq=(46X_D^`XU%XTNa;<1WyokvrfPS~F4G{}1W1d2I-Hl46PmArya%k-Pz&``{# z6Kz0w3+F1zpH(+Nn@+R?(cKPgV~djMU{amjwW+zjqc9J{Uqwe-V@FL(?jq!L=8oMx zYsR>$6-~7rZJlimUAb$UI=gF{bB(Ul6y5{CQJOZF7 zI<2Manwk~8A;5^**-=|n+g{PuyvLx`{KQ&CU)(vZVD=0}uWRd6^bJjlev&d((aRh0 zf6EjU?@{!HOHj080TPCyFKX&4-?D8HUCR;i1$4bfU)1)0Ij~C@=@O5=sIHfhUuT=6 zj{5etj;_M?4w$-28FncA(fFzAj9m2nDd@EsO3%|9l{s*s5o-rwfEaNC4HF}J`mo_* z#CVpP!1K~rUi#+#wS`p>$Jz=9=XP7|!WFZ&U7fkxo4PuyCKpsSwbnLw*VQ9R(^kQh zX$Y&jYdgBCI=kwco3>2csti?sQ+C?yznxgP@}GAm;`a^f|Go6hL;hp&Ej3+RnehB4 z4&Re~$*TLGtUhCY-`87Lq|eOwKM>yB+*ZrPUv#GN=`W8v?}CD#RbMw?``o9~+emyj zo5efCEDno^S=^ee#Vl@F$I7;6?P_x2PFBGek6!SLpLPDvxp$nJ@!0Q|z22BUF8ZHT z(7qD`KNI|mq4!Mu-;Jfi{x)gidz)5WI5zz^|C!(|yfG&~@ZEJ_!fDt1I-b7i|3Y+idq>kwTt#D5eDdkl2Ra@*?%oN{-LUlf z^)=s5&sB~cJs(@!F}8AZ)S}bpw?2Q_d7u4$LE5zbTb2!a^~WJ4lzV(pQT6=d>Vnd; z;>C*>t*ls9R#MDHN%C|SybOI})E7^a<<}W71^I1Vkw1XYN3yW7SFD)%uv7oGYDcyijG#&Sr;HRNz zI_?f?tam9LD~`HR{A=`68eMbY%yw(iz0 zNpF|j!JiFNYHHg$=_I31Bo{`$0!y1mFoX15fRm~o`UK2?`@WM42!q4v3TD05DGn{Y zp72qk{VqWE&}*`X5N${qJR}_(S&!7mh;k7Qhk72Cq>fHk8gQ4STj=9N`bH*xwqPE! zgf323+S_)yDW4$9NEUv6jrE^JiMM!l;`*ISsoxUi)kOIbC@rN7Q10mHa+5wuq~9Nf zp8_meEz$=vl-l+Nen%Q^@PMsI|KAbqs7d(Qjuqs<`z~PmKg?;_ZLSXO?}_#Z(Ox0Z zKE`Nkw$L#rr=>P{ifEMr{5)#Wq78n>Xlt8mT5zFTP@fO#r-^zuQNIQ1j7NYX9C{!_ zeK+|{mWDE^IOnI zg|1T=W&Mt3<%|$^0HCF>I6h0Xr%c7qsDX--Eof&j+L}6c+YlFgC5WFR;%Qj*_iO}l z{v$&}svcDbpU9{?yV*rahx&P<9x)w1SIE>wjJmbHk*-B?YWjH43q<_|QNIZ45swU2 znd}9Ox~03B-Sx)FF9Z3DME=7W`1z7>TTqrVa{fRMH{j(Ueu;=rnTelSgCJWdxq{Ks z+SX}OqJEjEvu5FEmqcB`sN3s1*kc6_?pKKVZleAfsE1p)*D&&qWcvHDLF?H*8$U10 z^d~cV%(MKk$2N@#K!2nv2AznXqQQzX3RQ%Mq^rx*nSojvBOdx`?AppM9B{R-0^h5| z_uM@EM24V$FuzfkqQQ1ZJhrD1$7{sVP=udx;26R^%}8fVI|Y+$fNR0?C*nyf#?MOd zjDKWkI5Z=wE{KK(?_(UTSUX^b$K$%TQq3Z2OD{@7-b>`#vLS7Q2rm`oQ_ zE9&`w#I&NOYs&5^E9-YL(+s6PNpFCEllV53;int}b}qSVL>c@7ag>(2sBc9rZxQur zEAjIQs7DLxS8eJ=Z5<1Dci}c$c5hyo)$#-Iy-j>u%JI{N2^(ezt1kf9zd7T4`@UT6 z>UV+T9pZTNB>e1*DatHrGCdlCxd#u#jl95S)Hk+(Z&i0aJxwh}u-n1;E^+2<#LrjY z?0H2Y1JcMBc{n3Hcm;8Z2=S>fn=HoGYv`hShgB*ghb(3!Ct>3T!<` z;cp?vSmk1@U>8XzK0$2%n+J}?E%bhyg|WB0Tul9Y(oA2 zruuguq56-<&ugra`}M`}ablGBu)aH^A?jpP;!06RJ?^q@+F4({vmSf7rmj5%p@f`;@!CH<|ByldN$IU!# z3=nq}Tc+a*xfmND@+%TqbSr+|fyn3*h*Z^QAacB0B1agipswAhtB0KJ1FDNH@BW}H85-*IKt|}{j1b1Ns+d}XuD;Y=FY88Zm~y;Af3-HrlC2hm~PKeSp$huw#UGE1`wLVK7+~UUJ-v#}U zd~GKL8qBxK8HDD;JMmLO3&3RzO&_2E6m$)Y0^t?WF#2IuwmSG?pfT#Z*4B4)b^01& zNkysMO{8AZh>8wSMICqJ=lp5-xj|-%JE#ga+sK_9>mXh zEH;M|bA*_IesDc8m$vO@_H^mp2F|mIGw~39E&=B>UM;%DHgIn9a^k)fp>Z=<&tZrk z2J2$1SoiWu^=O1DZIfALRk40k&Lzg>kKyO{V06&dgR#@Y=v0Yk@s;z4bMWK%nNf(L zgQ^UZo`klWIPKoCxV~#XZJKf01|Q6@tX0k@_D6{QT(FNJcD3)Wfof|8HBcxw6wVDr zazlf6dqq(vpc&>{Y#Vh5qK=TLH=n@Iy%4o_>(J1*b`1=*W`w#&a9Jvor4G&w4S~eH zUWu#m2v0X{EjYTfAo3`Q{NzdeOu}+L86705kz94~2wcx}6t%i2W~px}v>3u02$Ty* zRL1Y|Qwve6S<{d=!<9$D6LEurj|6fmO9)=hpj=2o20e|RS#uPnnHjr3w^rX#s+Qxp zb|}}vhHJ8J$wE&{?zxbA5y`#z8T|Yia&?j$l3PK@8lW5(m1Kb&@96tK$vOmluFR$CPR;(DUwr4xwNId8FY_gbv8hGbYOLJUDM9$F66YZoWV(4 zRI^}uj*RtK5guCaOK`9@}>QQo`o>t)6v(dRMI_hrZV zX}W5#s#bcskRQ2Zh=K-drz>1w=+78>&;&;qLtjtZ!Q;AcuX3koy=SPc24J-;Ohe-; zHIuwbMtpKHnxzu2oaR^m)@lJnI@73E^|lmW_VBV>oK=%_c^ns?R<|2~0P z`kt8EKjo$rg!G_Eq+*!T&{4m;9WMdv&xW!ykb4mnjy%(!O6uWM{n;pTE($JYmKeht zX-gA5f1&h*S$)6q)W>u~>04CEdCah#^!7W;uKSRG36mD`*mWTmdBUbofoOp8Dx8Ko zuR*&UDXM^EJ#_&3>E$O`JY zEAT>{)-D`H(Cm#Vk$2vD*y7V%GQfU!2Wac;O6~z8Jk23SXt`BhL8SwfYsngP5!v$D zBd8~`ig1*4)Yo`XG@|rhKoR+LAl$GCclh?@J*N%QZe@BuH_$c{ANTL|G#JeNAglWg z*&k^nV;*@Se8Ihq0K)~$6aEB-(zZ5CGP!BW(NQ!uR+N{muQryHR4f#uB2&g57Ec48 z7#0U8r&_vNBMbyz!~}l~!S=QZxpy#pcX)u8mWsjS0akoG{L=1DOKMu{a0&&0#j#?lzV?oGx< zma1x{0pzYnF{REm64BuQOF)gRVbe6adPiGRo!!y;;>mtks|nIRW7hi8qYzui3lDl6vIZ!c zr-@u6DPNQQl@VTUyPDL&Y+qaFOwQ7omN;O*{m^{y5T{w>b7ymnv$)R{7S8EzZLMjk zuVXj0=s1+FZ^sZzXX>{w$`}pg@J?i;vy9of0Uf=SL?F0Z!Psw|^Jx zk;}=nNu%}s%nN=*6ABG$xH*T<)bxC0nWN zTl_V8h%tWW7#UI1Zy7@*nW2kyCOD0(l9k7-_j|?~J{DF~^gN@^O18q*`es~ia+Y!at@>@o`0Oz=wzYRPwb1T{9R6L#{QF~M2E#uX!(V8!Z|Z8H=cTdkU26^c_F|ou zS}#)P>^q7!9yGF))Yf+6`X`pCG{rB%J!EVUkPhtlRzun@(h~MCt^q`L4OD8j;MOy? z=I=rOJ`VD)K>v=k52KeJHP{uOg@RYvFms-@qM!u_kkfKwfbzDOg+(SkA2UGNmC=nc zbm|n^5M$k4;vV{NK7(P8j^3TokDp}AqaPpqu3_@#xCNBZ@jY8W)Flb(br>C>H1sEA z?Oh!LTHle z#4W&KqL?_bivLT#$FrXjAqqyX&tv!Qe&*z|`)HJYLpJv8X2v2j{rB&`7Wl6P{%e8%THwDH_^$>2Yk~h- z;J+65|H}g9IXw~OTBSU<=S!u0>Y#@7QE6j)eoVCuZcbN*l!rF=$2a?GRrU$LEePln zev~w{=%7V<`XK%pd+B8*_$iDH0&6|!@bNpu zkMR?Ntp2Uw0&^qPi;$A|Kq&r zAr(nOJ8>w!X+2c<*$5PAR}H!6U}6}*dZiT(#b+4rqt9rUbm3dbC0&JchJyDv4gm2W z07h{DSponh4Xp?O=2`%TO0MNB5Z7u=$wG5z`0K`EE3m_f@KmuG~&ZUYGQqs`o z13-xdAP-sEl`?>mBmfHtKt2co0P!FI=$TJ2A5Rq{q@cNGKuJSe1`JCq4D>Xtc83Bz*2po10|5D$W(09;_6M0F#iq@k?@hB6DoWMpaQ$r#G~Fq9L9 zDWC-g#Did%4lXcHqq-4N($H1|!>XZrg#}{13>f7QlbL{o%oS)7p&^_?JV>~YK#&3C4j~B;2uaAnCF&@Mc;SWX zec$KqdaSnoRlIL^brmnvRoDBzc3s!i|Myi@cUSjxM`!mJK6G_ez4z+-UcEZIx z>T0eqM06lQvJ{ug{!3E}RR6atArnKI`k#FKS2}y*bhS?(D z4?`cqfDd*N2HaXn_Iu**B}N-F`X;#_^8iRu=l zYO@czpSt!m9b+?!b9YSmE(f#2?{bWRey|Q9Shs=~uyCIZEW8CxuzpW)5K=Uy4FN1Y zS08M``Xf@c#}2xm#u@f*si6}Tnywjx%{z>Q7=eZol-ofMD7eoC%3a_B^PL0%Aw^T# za6lQBtCyNk{)AL*v9J&wnlpywq8jP9*^N>^`-~t^cY_n4aGwpRC&2~gCkPBeil(&D z05!@)^c0fFlNy*Ojq<~AC}DUSw7`J-Y%n|rE-*h!Wh10$N-G0~u_lJ+kwh5k8HTZb z7!D&0e+Dfu;657+FMC#~A}T(-n9 zj&On-4p*N6fiHu{I1fS`$%G@ zIoUMLEI%Bx3C9PZ2M*k4gX3dxf%zjUA0b6kS_(Mkm^eN`65&|NY%#|V!(77fDQJNK z_t{|h0$gDJoXSQ>QLI^jVZMpsOC%A7HiluoABF{l;VaMr1MaiI@GZE&{0)_jkfJGV zF)%DLF?@$4Rv)LC^|8ng#}dNvJ?Mc0_u1h130z?QHj+jC$JARrtRO=+uuW2K2Bge1bjS1K$0FsvpF zT|f&AxX%Vd4!FQf?}8Eril($iU|5^0uQ6flk5pz3Yo)T*0mWG3h*q){9kb3lLUsVy zfeiQAAUhCTVD3qX5K=UywE97_4okx3v1!42!?A^M^Z`9^;65811>gd6Uj&4MqABfI;Mi*7=!Yb&RE$-0 zh}+oehvPWHQ3!hAz;9pBcy0byA~L(F)>U;67vabEq9F{j_U}=B+vr~?z6#B2`(_tpz;w? zG^O1M9CzgEx0_IAB9)-huWG^ITRSbK8y2TfQDk*dv? zyO=!=D8_@1sARB*3E3jB0~zkKLADfJU|vFq5K=UyJpp8o=jxA{$d)11iR^I)6yq^R zR6_P7A*%*Ekl{WXWGlc0<{CnTkfJH=IUsvBSAWJtR*O{UqVrj6(fN!YsOJe(9XJ6B z_t}723obCPAutFjn$lhYsJ$klMkJBT^9A2tKMb!DhIOC?2HawXya5r$UK0t4=|!Eg+?z`TXZMo7_=_6ab2oU4Ci!r01*jzyq- z=2~=qE*701Il&Fb43w6Y$AQQA7_IW59OH9~#LPXOazC?@*~IKqQYMWID1-ZKl-UU` zFrSQol%Z%!`!|&NF<1YWsmv)zWxcAk=={+FKr?9LUyi8M27V%Br-B{GaGwpb-QWWA zxr7KIMN`^Ad6V^Cd1BA~JR~t#)`G8B9?(dSAQ0md``kQ;_#Nnh1NYhBxDZ@mzJSU{ zNYRuQ0gkYV<02#x4!-ye`(el@3>SkI7;v8rhReVO=1Zw;gcMC_2LnSN6T{_5A`E=d z*~bq#2N%6isOf;E01Ufe- z0LpDS%5b`ZX!+bORcg)LP|4!Fxj{i)L3w2hfMf-*Bg_JOeU(}VSoJAwDX=dQz*lP3 zdBzgLMuy7?2!yMQYD(id{dr^r5|jz!@i`^jlq~~@)c}Do3lQmZvABZu&p`k%EQ(b- z04+BwaW|*HhlP}sv78%qB^fpSJHd25LT!1T$b{8Q3kIDQOkY5RwGtsJq7>kTlIaUs z8MR#d@g3i$q};lZ=-RxSu{yl%_YfMX}gE+?G>G-S#D*n45!}tLbLH zl2v(gyHeeyuc3ITWF_jaY(*YywcxYCPOIk@jU%8QDVLE7%TB{x+dj_RpOK2Ux^YC zW>MmrDzyP6u1RT6qr|5~achmIsGt!$rkBHn>@TDwd14L^ta6`0xs50nVHV}KRH@A< zwlZ|K1yGnLogzX0Z1*lqq3Skzg zHdLt{K(!&Iy$Dn<2s|4d1v|jm7W!&j2nW;P6fZc?*aUdxh!ODTB7X(GO~8jR3w*~_ zsmB7}ahUx9-`+g^W>UZ#-8LIGx>SAig%M%@Ah?z2FF z?+&s)WE%pYVbPSf4~X8#(_hciUlWMZw9jR{MkS+`dDYQ3K#eyji5ZLC;c*tQz0MFa z>L9B}4)aZdxr4*R{cnU>60TDFSE)sS*FUA{;mP{ous$fvr!NDvp<(K5m4T1%+=1r{ zgTmKM+Lf>$Fo^7s$R6y2bpS`01@K{2YAJvZ z!-FpX9~IU|3gE*pX7(5phQ;q^xBPRg+DHamLZXdwrvwI*p2|GB3VOv>NYG0uGJWN6 zR+w3ODT_@Mm2)U`9045>W})MuRqANycqq;aLdUYOK33>BhL>_ghK^(18fj(jl%T95 zrO!6V)3U$^LRIAV*+cZb$W4B$hU1-_%I)Y-syR7#r(e3fB+hQK#Ro8d;IRk{rw5=0UjK_saa3bLVS z7VxEj4`CMgj;>PY1K-gpZ8q>#32+OzE6mAog(^2@?!7!&Lh0eXb6oX(6!0ztUW8fT zU0S6s0p6u4Z7%Sp1m0yF@B9qBDK}ox+<3YKnCap0&-pIA^MJP+coAlSw-$>W;H^z* z3xRh*SU*}ouH%pwhtUkpZk|3X3_s?BJbn7tSP=eT=ZqAM(N>@Q( zr$~p!i(MKog2wgG7-1F~H(*5tjT^8+gT_mQx@)+))fqK3BbTd7UqLsP*t3Lrn9fv6 zxN#8fw-Gv2s&=Wg3@WXKN(i%1skusRf=bO;<3Xk6LZud*qU4b16D!(sx2v(a5UC-u zByY2__&jz6P^||lgjt~Ks8ZX3sw1V<165sEuNA;Ha9gj+uyw5)qE^RJBxE6t6G=&e zNbYgud4ph(vOO4lrAp<5d`Ie4u3B6Pdu@ch5N2VoW2)3Gu-7puZ4Kc**z>69jt3)!<5l3>*1*R&1TKdlP2?<+`?STTP|8|eMXya z37ecHI7;7Q=809qMzZ9Y&=r=%eKwZ#++o`aOCDp|kha#iv5xCpKe!0*rs<~%jAI;{ z*_P-vCZq%$1ErHvUL76h((_o-llJwXC+@S+lQ!nSEbr5$v=gD{31K}Q){i%}rR_Ow zd)VR6T>BkiZL8%$^pgli+M%Khe1{2Kc8`-X1RU=x;3TI2ydB5S5?)I1P7dQ83ww}u zY**NZHurd>ln2GG&-O6Hv4NjmOyQS9c*;1LGTFnC5j#(<`02*4U!1vO_P87+Ip&OT zidx&1Amb+48AhWs8x{TJgK>h?dK~64{B_-F>MFc>8`bhvC}eJzxuLRM;Sy0UZJ27O zU|=x!`A9>YFSISeu``{zm`c&MDo1;|cNcJ)+pC=-xkg-ah>12%Aq&ZivQ9kVG*da* z6He{4NT-6rq`_Z7;BVejod_Hq$?0aEZ2D`3=}UHn=LS&~*HJuBf@;a8!QBilFyDlL zoQ9$)?Hn|?v%~sXVf{?A!QFxkZMRp0`&~wRIm@@b{LWNFHuHHI0?zamaGq0u)!=R= zc<2AG4Q{u0gZn*%bKkrmjLt}INsf(M<9w6fIGZ&vdtS@49Q~=oN`}A67nmxG%0HLd z-5&r6m5uvsD*H}wf%y&uRM`|wX&0liFAD1ynl*hFQXT!OaiLrt&RC^!5z|xzq5c=M zrP<|SJhZtoA*^$^Sw1!JfgK#Hu9?o9jBU+x5;or%Z>G8%#>! zj@Ody{vWi1?Qoxs?e>5R%nu?U+fg*7-3;5^6xMGv4fhaI9a9!=hFdetaFfGJZaNsA{@6tuv7Hd;IjE-*hs=n+yhrTqz7+!faE4C{B8iadu5 zXvY;{dop**7>zsRSfz0n?;Us$O4?5e?k1?uLl~gqJ{zd7feXy95=4X)O=UyP8Qn$3eO3lwyn&*O z2f~nbRic7j%kC!~_aPlR;yxQ4{{}8Fzm0%&q$rNrLB~B|{XtW^caX~c=#h-I`W|a# zz9**?8fy=-gd9Bn;0Ym(lh6vz!?S$SbbwDz(IToqXh4<|Ef8%3cHFL!cwVEOZ=Nr4E6PLsQyY(DBW%zAvo5 zArvgVn92WJ82aDOZk6whnBLNkiSZ_bC-0jGB5Ci%*yl%-DM?;4`%03DDu*+G zCgM^Sn@G(ErgJm17^b31 zEr($$Qrc%Q%%@@f6JeO~+9%$I`P4HxA;{ep&^Wm}xu~C@&rp=pyOR?pz1sppzB{={ zdPx2`3^M_SL70VMrc|kuVVEf??JF4O%dq~1Fw9i#3r`DZUwS4d1i9M+KIAYA7w@)! zpm!(3Fr40P0UvtVFkizk(_k2cSs11=mD0Y0Nxlv1-w2b;m#W}j`f4Dlq?@@E~ zz!hN@H8&qM_b=4k4`KbEqUMg~HTUn%YwibDJzfUT{`p_j92e(h03j~Bn)_9BUchBj zJ2n=yUq$ByTo&i3xqrKA?nl(zQq&y6ENX5A4zi*%T9MNJgZlePR9-Egkg5^amg9)) zrsE_I`}-T6YO|OAO2mD#=O?TF_)Jq;18Y2wDkCG$F`rZ-;xx-VY3Ki!jA=3#N0pHw zP83C!&B${U^@}-mf1y&4~?iQq#u5q{*XK?_9K z`Cbd5NU$LXMGAFrTnUk2Ya9%*1#l>W1DgPbFbiN!Rq8qbYr=PG0IX|7?;@}@JC8SZ zbpd64P8W~FN~hm*K3gA&&zV>m^eWI+TVix3dKPF~N8)oPRtmf2z-}$D8^SE?)?THy z!EWs-tvl@2EutR~(f1do>(F|_FpkahZp>1)#@Yd{grK>PzF9jkqV4a>%^;6S@_)hR z{I4w1do&?AF+6Nyl3yb;96L(lJ_I#NigkK?H`X#yHTtGk1cw zYT<~(6*?n6PK$V(+OBJ%k)2?f`gkqhG=QC(LGEqpP8fnl#BFMJqE_o;mS#I}r={8E z?u5asG&+f^^>vxNk7;Nl-@G$To<4~f3S4IIjDbC>Hu{nvBTU!Cm{`QfWAOqr&K_dz zB+>m`q8Z~nVrDFKXJMfS)motoJd?>7SZNLhdb=e>kI)dZKfKma7=cLkY%MV+9x?h^ zQJd~7JZhs%I>*m9!|2qD-LA}&*_@e`$oknH=r7XrKz#0gCGm)Or+}V+5)8a-^gpHegNHda-SR%p} z==0bW-!ZiMDj<&Ai@yP+Dm|7)_lWy!aMSZ&Ftb-V5KMHcnpJ|%f&$t5}F6@y&! zibKfO?41>Sohdt8U&(EK1=$!vD2lH$!Pa_2A8gv1p7Uy@5xmgBeT0suX@i-CByB~C zqzONDZ$9K@kA{au@S!Zb$rz>7x>#lCOrFI3Yx3x!u{Jzn3?mV?A5z=v&lAO!l@X9e zFZQ%l8{w&tPqhC?BGg3DXO zXm@KcMv=J8vgM6GW4J^kRe?<7@W9b74;)G!NRN-v+Hs#vYyShdz)X)>$pa~x(#FCA z$3*l)O%MDdQu)I0u!wtS^H6sK*T%RTudIj0>1D^|^genEdbu8di+o9%z$2x|cpQtf z!y?YT#WJ$%-B2EO#r*3(is?-6nr-qa5u;qk^K0cyXMD+5AJ}#mkDeO8>n=D%0 z6Fcd>l_SXw_(nL-pp9_K80XHQEpW;xcW2P%H)T|~GkS@P@$QVU$e3VdRH?lm5YF7oVipOKG(SvXizgH`Qe-lA=qH0bGtU;DlbM;Jm{g7*TFE>fP;7}F z#o4S96zUCNBGYE*4G^PeA_&Unzyl742O!MC1MCg;qu~MbBl|ik%iMDlZIRp47Q1?(kRY)Qp>Yyf9YG^`n!IVq%djmZ1lS2? z8ItvV%aE#8D#I~1TIQM?Erl&-!j=fLu;mQtQw*7xq%rdPpqSd)7)>y;FKt6F>XXe{zjkQvKlbLUq z>fmoS^KFu=w{cWy!|0=Wv`W^_vEZV{x^X;wu@eHMmfUwi;FZCAr#SQMYfgi*Ig^liefY1*6CP8PP^nPJ=Qo!NG0hHcZd zfz9oEirc>0HjmbaqCHH^6P+d&?9MhQ*lkK~WiO!)E1%-B@(!}{>3r7#_t{waY;b}3 zECgg_il(&FVC7Ry6VrEsxJ}N;u*s=ReS40j@dR6;kVvuh776y;FBDwJ9Fw!!gi@j{ zj~j@S+T&%WOp%g-%pN11#oDsu5^QP$W8# z|L>=M$|24n;2fs_N8WBTPb`VgCOgqPQRonGpN*YpKN`%mxlMMWXi7UDcKTgJKhLxi zdoziRZyv$4~S z+)lJRO?IMaO1l(xy2LaR+kIw6x;&#vU&5NS?fDu{u$y3DVU9@agecgBT8urtR?2gf z-@qm9MlpWtVU;?O1tV*r4&tRSD{L;jObUGwMs7vY1fFc@Y;y`#gi)>)7~rPm}AOuZRW5@uO9K% zb6tkNT;Vk=UgI?^@B4)Id48RidV6qu2~_YocbbDPV5ZYKYE6vl%8;QlxI&+mzg zhHC_DEEiEc*vZF(oqX{DRsLS^g!~;79!!{X$j1|<`0{LG%;fx(;hAF+egwjaPbK&l z5uc*bnUmv-hz};%7ZI-@*rAfi`S|eRqq?w=6O7lbumAe@yT--ccX7h^{Lj)~7F=Fvrnv8{XyWS7k%^Ulf+ zJoV%N{Rafpzp##7n*;Di1oUWdfaDYdg@cbOwTz9Jw@?3R-m7sug}ZZ=bGs0JxgP*A9|Xc ze@5u{3e)c;^z$wB^Ca|Kh;4X!bF*v#8Gb=_(CPI>K&B3spi>mP-+;b2Utg53FEpX= zL58u=4?3-0GNCWFpf8f3b0IeLhakCZDM4SF9rVY*2*}hS5p;^Cv}!&#|^fDq~Jx#C>QZ%L20bXssz9L_*F+o0y45P*mWIs>K z)>@WbAz79Sv7yu3j%D=(y*@kWFMtt{|3Z)vQZ%Kl1@txfdPBaxI$vLvudg%}coEsg zNtj?DXXBn#`DqeuC++R^@StBXen4NO3 zfDuaVC8ZEjG^Mpexwd@0HD6z!ueapu&G~v$zP`>>k>1uc*7>Pe3>Cj172g*szE3K) zN#I+d;=82cy9r}`z8K?;mVEh?TC*e8BysbCZPn?W(XtLwy(2r--v%R8ev4E_NKyRa z3{>BguW!uPH<;@F4H?D;KXv0!_e)ZDpHO!nsk=!6yiuxAF2)A`4rG^YA@Ey%Gx)Q5 zm_8GT@HdVJ)$~j5d!Qo%)|rYZzUx(h?|K#JwFUZ$ z0x{>Iu1{N4z&GYs7r0j_bp;H_yOANDf1)=+?t_DUz-8Ao+5o<7IJI9$N`pCte?c2{@L<0?&^ptu1hUQ_pB9pfv-%g27+J zaLJdShOKp>bXe43!$y-*yy~#B02L?Zy137#_CJP7crU0K_1#pUuVaq z!Qb9o=WFcsE^sXc@X40!P<_HtwF6aKf!->i+Tb?4(Iz7?TIHC-Xd7I(ItW)scDO#} zxHbdVrUHGVgzK0L=iDSCF*eFE2d-mWxV8|kE!pAvjN>{ExQ;E*w=!J#EHR%~eoH;x zv2yvwRykJ5z9oD-6?=Sk#eU9%9sr{C_^dKsxkLqGhO09&!qRAqY-E4CjK#u}vln21Ta zG!NLFloAHB1oj=19TUz?mNoW6K{P4@E$)9~i(_c%cg4X>KSxezDVoxH6i(K=7Ye8o zkz{l)+%e&dBn=cxQ1+z+^^ByHN^2ie0h?AzCDxV<)>yv+``CETLI9YA(x3(Iv(cgw zTwtC-=n+yBzfcS<`WEU37wUZq_1=YgexV*I)WfD;GeM*k7V_>TTIe1@B85_~Z1k36 zjs_Dg%osstk>r?=9RC%`eS9UyGbLA%ZjR*eev7;z2S?Jv8DU_uf zj+k_QUn$2MI`R-_#5&;%1v{g4a8_FA<`B9f7di*63!SqJ2XYr>(6m5`%IIHc6fx_t zYsg4aosVH?W&{^X59!r5%og?uan_Qzqqm3NlM#2*CaXq zLGH%GlMg9$Pi$CIkk!&;2X=rx#Hk3ESn}(Jax~OVI)oCZd`H=XG7YuFsXgt(T$3~e zd|m-$q@_+W{>+otrs@96K*D~xq?&H_E71$ZTSm(%9x54Jhz-1ch3H-TW!JmbfgccR z5m4_+(Uew--gRi9KE&)!S0Ys#QYh9E_>mm?X%_Y)Gx3aMZK#Vb)=$t-<#Sd+LqiBp z=*EP_3PgrP$xF?ow1<{qG_Y=)L_fGMAcfRv|bN;@PvSucr-0WyLlZE(~m ziSC$iCi8Y_+=G|@n3$n;?aen>ha7}vF&KnDVo8e&+hENn0lF-Jyg&@6UIKKNfZh;L zHYf_^21T<{t}khWpNxPy!=id=R394EhnRX55Ui0=-arnGdM+_WN8K%P2*XBha5$9U zXK|&5$)$~o;xp^_vjJ8~vpHF5R2ps_ZDv%|zvCJ0%ror5i&6O1NzOTsiFOD*G@3DL z_ak-32z3whR<|re-J!ol-LVN01ZVHf@@>K>M`t+UIrfTM+kSs-vXY_v9Stj42MRp#wojUN()ox@p;2eh3)BuOpy- zoT7Ly2K6vIs#itzSy6pvRIfB^V<@t_|dFLW;?_8MSoi@9-cg~X)b{KD=%XqdV0@8_hF3R-IL!FweW(`GB&Cfd>=#2Re ztd@6Ty~fa-ywDQ!9Gp*pHBi|R|G`jV)=*sP5skd0cBymP6H zhkNIW4DYO#i5v!A;WF@Imwz3ZQQ$IJmf?_WEOBv<19w>sS*0dBt4shRtT7$|S%soF z>kq5cNAUTfN8A~LkqQD=8j??6~5$E+>XNnkW;Ew{G)QcAQP!dM+eFBB31|3$G? zG!{&T7-)z4Y{r7=-~#hB1f(5B@v{QZZe3JwjOuHn`kJWTVCpyn*;-2!>hmsh1a(U5 zWUY*~j#z_K3!QN_I=I$IT-M^fk|Ujkz-S>Guwk&7RIfrBRL6Zbs;9WXIS5E~isIlp zRBw;!ZBe~7s;@Woo{KzfW7JshRZFcNi5BXkiE~rb*hq-kB1zjEwHMQL4$NFSEg;e@ zUYXi4vH)OROr%?7Jhp?F;+7E2u~DrJ66u%W%&|BlA!KZ2E@d(_CS5Y>>SOE-=49h!9c~-{u6e52N}ACbGXGRr@4re26}W z@7j}#UqxHtKP32OmiDQfO@|~L*%18_3Hi)w0N4`y1mY}yo0LL{YOZvw}a zK98ahcKYW7KslXlZ7iTZiFCd@38K4`Yy;yJl6PqVpO1_uN90D5h1nuzL&PH_;yw~_ z9~bc|M3j9@bA*qxtGj(*gmvCPKy^n^d=e6M_ia@F#;m(Hk!pM!-BIyWaxnGC)GY^M z#y6H)BW+AlYN?$n9=6<4P>@5fcR@`UfXCHwJ%pVd)gcMC_N^G+JOH}{a#QHH( zjh}%mV=u}01*!CC$j+sMPfwFA&rC|G!m2lg+{ef_|wKMz-Y4CkQ${*~NFLe1nQPzcY z`4$C27u^3wUE)vz&!+oAhk}$grO#xJydQZ(`m4T*QciA9+l=Xjc?ufA_zvxv14JvC zkxLyDvP!XyNLdt7=?1Sbf~^wHzIz}(+=Odc68LDN6=4?G5>;v(*b*sCgKY;0!zNS4 z0N8K$K!QojmG7{%TG39iuKmXp$LL`|k@GjLZTd#gpEnTJ-KR;7ks57(`cdlv*cL91 zVOw}$3}^>tg|-Br>Oj#YDQytY9um__1mHt7J!X`6KpqarD0z@JM9!BWq8Ht#fnu;W zG-eEegngQ!$GEb&y+WAT@%$lLsr-30e0_>f??%X}zgW||q1tFU!y+Fmr`qKBDcW(! zK{vqwmmL`^IXotk)KR2E$&oQ*9O2^Vl4FjD!4ku@@)%!wRm9vciVo$^$wH%?17iCU};canq?~A>h>RVf^IU%FWQD)V6 zYlEj3WG$v*P=8A5tHX`QuFq=2u z2sd9DT*Rw9dxpr$8|~&hOdIQ2o{Mj+o9}S^a?;_kk|WUes?;O3iE@LegGsoKVp%Xw zYE3kWy_9vFaop`1K(n-K6O&@DFC!VOL}MbAD}QmwV48cRGtGFq{GE1#SvWJD%@MC< zb3`hABL8#||5SPfgH$#cePB6y6@*#zffKL^JPrNH)R;acrcV}K%0z8O%$V%orA*Q) z<$RAWWwJI?rpU1IRBcwwsN}75hUjwIReY7t)mBgGU-|)^EVF!jnpP!uBWCA<<8azh zG2@W1lX`|WCo{29OT|Xeq3hwep!=JJEjYOYnjb5f8xu*Q1DYQ*j%FPY!ilJP`<~r}j7RKBU1{UyU$~VJ}DRRuwQ7w!)p4pg&%>dC&s#3E_I)7J}0`JJf}9_rupI=5{Sv z6`R|IJXa`h$y|c|Wp1ow9_wG0X-h>Vb9nrkL(?gNt6Ezo?7BSWdZ6cAj2TNwKl$gZ zxT{oWxXMwT8I5UUaynea;YQ0dDyPPniZ;5V$Q%o>Oyb=FW;bWB)r)kpV1-0X9kTg6 zr8egIEOUihbz>$eD?Pk4mdQ#vpssLvyhD8lWo?F1wGz(mtn=q)=H;7v1S=&fn)X8* z8pc<~cy(HDf_=UEy`6Xc@b@Egl>Vqy_!h5ckP3Rt2Cq)KClag5rqdK~dRCqFT6{Vh z{m$Bywhmo(V@zKg)7QlGhM2xubliaQ|}fHrMY%+Y-s8)ZK+8swNcQ)$;W$Ba#cxHDE?AT$qf&f##hsFlQ-{?d^$HdEYg zz_jC;9CKpvd(kb{gUf?%r$HcgFu7a_Jm2B=&ZB7}-coaSMba|v4 zhn+1(l^kKLFpjZkeB9n!I=H0!7U`wdIRB)3WjM7Oo2uIAW`mbX zV;o1<#F#T;{LV<5adx`w1UjJFh-Tn8zr|a!S6|D10$E~^``hjA!GZVu+cNrF)_~=j zb!j2h&YgA5ecUqP2k@Hp{M&k5I zAfeHneWe7A;S4ke4CZaIl6E$jvtMLR@uu!<+Wp7uVzZ9)sZ`6_PPz9xIaYE~OeBfk z@8p=VQ||qCQ16#M4ZPYZoOR&IJFdb~!#=DhGD66Jc57lENHbxP*PZ7%=e;5?jJ!SA zUzuKxLhwhsyQbRo$q}5`Z_A>&PM=7B^o2s?bjNfJu>li z6-qpV??;{iJlLIPhTzpiKc*&Cv7MM4b7m|ha*R`AC-1l{Ih-z-7N*$;zV|OVGd4G8 z?tWz_#Y%R>=5|Fo`>HoKVA$7EunDt^Hes4*1a8V|1ZE%bhM02+F2dam_PH31&xz@0 z$MmzrILtoBZJcEd#C(`F&L#&C11!RqbO)`^d)d=c@#})*Q4cK7t^ne>DR>ctIfuD zGxD?>MP=TETC-NJ4fL?&TINycd*D{rkmC)$uHuR~-q6C;Q9n0j+L>M(N9ngx2{(&w z`-z>C@fGH)X*_4$tH_{_86!iRi3dM)=&GK|zK*D<-{ih?3pP3(E@j;4>n*o9Jt9+$ zc~HgK+fzZ-WQ4w7BB0UdlqaLQZgdPO(2G6|E@37ETJ7W6n zrXTDfZSG~Y#D2w;J#R4Xq$;PU2|4&S1|BD%BfUCF9qH9<2%*>fQraH5&w4Oca(_%D zi9YMWn6ZcTSxj1T%mXpwUbxlONuEsYjP*0Tnjgy8puUUuYD|Vj%zLnTY?wFx?4IaUyYiK*@ZquZO* z15w!SftCDOjzJDWud>5IaG#BX(2MI}ei{LF5fn`UCf>n~>5s?s$71@UG5rzKJLqk8 zty>|Kz)nWG7D`}q7cTlt4BZMI^WzqcmUMf<((Q3pZQM4GQT;pHoM~X%t_8a(54*L9 zO~exh1jeJb`r55D>AEm!Ji^StC;CVclcMJd;khwBNn1roJj)l{+=$fd{tP~mNFyd+ z!*ean`QHmR2{-#wWOjN#9%jdVHfE+0GfnEfv?{m(J|`I!D(On=ri zJH5rO%`$zbfwcOIW#2!`PH#LfS^GKD+Qzez{ic|5)<6zD7=#;fD?+O?l4UQFR`g0d zw8DKhTJ7Un(a#N&RusiI8=%!IF@0}Le>tYVWUBNg@?6c~6-%YPk`galO1zYX60eaG z^d>x%z(YzNk-s*(r1EN`DR!t*S@!O_7_yd%`XFNc8j|k+o=)3L&Mv;?2BBwYWll(o# zpOR3!!!sLWpKWsE4ct4sop;E{9|AaxjQebi{3*D={0RawGDTBRf3p5jO#d*Ze-P8( zH!V!B>Vkw`oz*@S(+7K_^s|`z7y3SAG_<(SI9;ysJeqiAdcYKA*Vp zVd`_A@@aXUQO0jB|MSf9zqHF2TdQoV;fw#Gd|F6mU~}mIMP~V5+2zxzA#8;u{B2DCCZ>NK)4wvE_+Q9FCn84wW@_Hwn&^#hth=wRyRU4}I0hp4 ze0uEfNrfL#0#v|#HY)rKE-?Rxpd+McN^64(|BC59#Polf_Fdv?XSJ!glsL5PNggf9q8+XVD7nmam$Q>w(Pm;qO zdYQh^o05!Pzv2tw3^V?g#zL|^%=jA`OPHIn4+IEowi)>powhvLQU6@B&cPsrb#R}J zbzpI`(Vm2`m3#K!9XRl6Xm|6RM#dEMv`pq0c0Fy1tU+fQ#yEhLw zP!eP}a`xb)GkkXKc;VpNdeRodV7NSs@_h%g$4FpI8H3`^l^mV$88alF(z^EJgE@Oa z-Y$(+1L8$^c%*n=eiTGuPk#vNsjQeBvp74)91DIR8bgQ>QZ%K-;FzUxeW>Y`Wt3_R z_4Ue8|CLvg)c?*aM{%z_3<9(faRJQbm4_qK7{MITu3w{+Y;L;B1dx;sC!-BFjW#o= zMtZ~)RqdgwYHkmudV#V-#b<;=m^-E$FuCdx=o(ZHwn*|B$xb54A(AyFNz@`K07=Dg zml##;OUc7r$&lVRFrdfIuDz7BvQtU7LR?VoZ^=qWo1`-Wv8s{ zqmaE&*};)RxT?OY-Q(qW%seN^S!eBS=oKP zvg1~E)GK>{m0g5vXVoUX7!I)*iaA5jY?AFE1&wu}7t>ISNzW){uouG!i(wdNFdKfm zs+M{&9BMI)^2$EU${y>LU2bI`$&0g;!j>MCIwFHf4OAd)vI5UmS$9*R2F4?0nwf%j zi{5FfC3rFyEVZ0T8A8EOX)#Rq%ARdy&+^KiYh};z%3fe)&-cn+Vr4J#%3fh*FK5|y zqh@VjwUxcnD|?-lz1Eejs%wz4kPOFrZrXo@Ozg;wAS?EBg$u?DMVc^SrVzx3Vww%D&FZzQ!y2 zE-U*EWXtwc)!V%o?z0#S#<0Wkdft@p@nU+|V%n2Y%7b1EPg)F*XD~eG#qhkv@GN7n z27R>sXS^6*wHWq#W$&}HU-!!X)XM&t7iU?ag0=mRGMLoBXGn9l{m+r&YWqJ~f`4R! zZU0u)e`N?o+t1B2N2OkQG%DE)%=PlE?66mMUn{$hS9a9O?&p=Aw6fz~*$Y^9Ft|7` zDkfy}K{m6dbuF66j(`{fI#hKYl4rLg&9Y(;R_qbz5$qA_(FIB_vkF=Q(p1BidWpYB zKn+xzg6qsol}-6Nz`R1hSjk`nyRNd}EGMq|bMCaGtWlF~xZ(PpOd-SYJY}U@*k7#N=kt_xHJhY-RecUg z4NZ=uXFX*6)spdoNA9au?%q75-68B{kYh?L4NNZ~1+!r*g(>`|CE<-crB2FK)z>p5 zyyhigNZ54m!C?i}WXezP!pvG#2Za?$ah6E#Ff^=eP#)jel?}5eC}|~qHpo$7BP?;l zKr)=s(D-4|V5WeKVVN0BpF=J7QGVN=Qh&4VWrk#H6!er1>EEC z2khCXfd|6MI#wTQs29c^Y!Y3=$EJs^g7yGTW|gVxgC=WGW@RJOYZmh>UaezqSiv;L zHF&=4Kr3wY61>PoNvK~3?FuLC>j`$>z~90<%-t?Z394^fP~HqHt5>^(sp>wYZp=u1 zgKSAdwqrPkZhZsqyG!`HRl>Vodc6}?T0BJs)sHRC4@r4mo~Q;wuc{wVjb)@W8-H#w ze~PBqz8bUG3_?}?#IlrCOC*^|_}Y^2rB4-q;mh4O@DH~gzPH4E>!Zy#e%ka6{M#+< zM@!ldKH&c83ofYsY;ph82~{X!PUiv<)1flWlw(nK1(lbPyF`3zsRx*8+=xY@6n2fX zkj9N}wlK$x?*LnvBYl5Ah-%=#h|<1^O?R!4BTPwR9&RP}j3^CtY=&wj<%4dsleK`7 z+^l_BBA>)t%zY@4O}wq7gOIeznG~T?*<{(G$|EYVBoK*wTvNLgM$F}dN!_I%k{l(| ziU%G10IOn(d~BKYv1P)~mXLagCAB!>-SG|VgnOvPt^05f_TyFq!=PxhtAa*E6qoTv zMflRgv`=7ogfBa+gpo{+)8wU)BUe3ovcn>-zOu{$KgI|Ap?=_DxJefG1o8{JPsIQ} zo+{jtQUN@Ugz|`M_!@_@927@VZCb+y8@?t(E^Co$s1F~${z&6MP@QFgsmuT~!(H@r zcS+MS;7)a;o018p${S4Iz+4!*57vDcT?t-LonxV!ZSn+V1!#;*q1iNTsIIG*r-Z1r zg>GRBEMfB@%v?oE=D?N)GR#$^l)*-Ur55|*h}TG^s*8Lu!ptiy=H)&fQ|-sxH_+zx zzg3pBdT&2d)jA(>YG8c?!+W*6-)a=qWVMYJkZsH$TaD_iZ)z7~C~b$^Yw$pGM8OV^ zHN{o~>x92pLf2B+4w5xgj3cET78jw+hb3;impJTI|BAL)2>BOxhP$}at>RAgaTb8w?d0kkIM4Q<{CZjC78Ns`rcZ;2=sQUZ-*`7|pG1}Ep68^sgyQQvj-7{IJ8;Ro3y znkFsan8rA0Qa8nql7=LUsxn`xt7*qrW{C^3efk;s%F2!=EaF1u1Ig!6jH*uWL~6>C zdQ`r$x~6S)1BO*;H+y!z(!63#Mp0Frh+JTaobM@ep0~)korqj&iCpX{a*?;lg`J38 zZi!sh301vCRqI*s3h#nzIuY4uiCp7Tj}001_!_In)%l*Q3{_p_jbdddC^{?@Z9XVk zGf=$CP^`~a+NTNFKp6HFGL)%)1`#;`Wsl^z&s=2kH9%Go)FdplztZHrUXps`Bi+Z}Zva+F( zI`ADdv~}mR%5PvfG~ty6W?6Lw-sY+;@HW?q05P4g#lFdpePbu=$6M^j`mt~A zgngUEo(5H>pE8Jz{mj}~(@$B^Ov@&#gZ+`YenUT{rWK0{EBSjQGv1zsCU5sbrEPUh z3ub&4RSz7mXH@+dRWLZXknI9@)e#2R;jX@g7$R0SOH45^sp`RnN-J9q^Fv=~XnhL3 zJ*Rh}x98+Tg8V2;RU?J+WYsnLh5g{Gfx*9RH&?HOD$_uOd>_zbyfojz-a4` zx0=;J3SyZRCTD3D31Sej~pV(mJ+E`7#T%NtR{PV^a^8;IovxF5GPm=E26@x zE*B~HgFem=`jKAHkMM#H0Mjf0Qy|aFM3bY+8n5(8C?>Pnvf7+u37zf3T;-?LEI+Mg zdTCYZqtyZnz#tRfCA8Xyd6}P9OZ~K3;-%GMAFWnd0P205rOrp&S|6>{ zz-n;RvL`?Gu+?mpv(BfSMn6T@`YF1`OVI`|Mb$tHnoLb&hrEo(Vr)m$+5n@c9zk`3 z1+(1`PMaT`Rxdc~z2R(%Dr<*1cU?DAl5^v9V^mqknz_7QIVnnAYc;lpq*aR=IFayf zZd>n2JO(m{J7sQX><+4J#M-pUxm|byC2n%bOGCx#hK#beLP?M0==al9i=3&wFG&YU+#t$F3)tEWZ{Q^{({imw_j5gO?Co9K?J}`H& zn1eBI=0MENY)zVyf|>Qu16d>(ERLDW<^eIKrMXd_h3&@YhpdBCeFKwXR{P@*>jn!M zhsV0Z$id(dv2K_{1%pS%a2%e^vkr;zjj@%@t$b{BY_X_niBFkoU}B7IWpyy;5IvI` z7!p(J=-I3_(BnuKiXIJPI2y^&n9|mYmAQ*fk6~)jL9+@~)MvXID2?%lmR2ES0ooyL z1h7a6J%Va*Tuf<@r1S`>q4JoR>N})kJYl~1%zVKvtE{S- ziqf3Z)g8>wroen&BlBcmv(5rYzT4wO88`~2X>4w*Z)>03O!F>}iA*X+du446aLp5` zJ-~)aTn)^zIA@`jYZ@)qE6uZ0YM?4c&x9t5=jxWFXL!}eQq-}Vuo4P2)-=(Y&{d_& zV#+G75@%-C+0mJGw#dS6$*^~lLrXG|gciVne7@)~V2>{1DOZ!I)HYOV5N)DeRB8vW z)UGG-%I>;@r*}PBRQ9Q?vV&bt6XEF;27+DAKuAv{ck%R`Gg(NRSB)7?!PhWrp*b5x ztToIUY91bQ--ej?8fLYx`?Nx~ds)%qRf)~M6}CRJVm4$}%<(XN`%K4UL^ZSpddM>s zHMEtGdb?{V%|!6Cji$$ij-y1WEvunTFoIL)F|PI>+UVJW)zD@LlVmX;AU|NfAWr^t zRlDwVskfiH-zl(JLu+kgJw|6*hSJ_eAB8oT1Px?4J@!Wjv0M1k`J#ikK={&y+-HJU za-RrZW%ScC=SZ#1*oDpL@Bq&c6>z_(fCoecJjg15VBhTt`%k|z?A_(3)}3Bz-2tn5 z%@c0-sXjIEa7Qh#YJ>jYP<9@0==B3)BKB_(9qZ;buMGL@RJOTXqS8V^hAHe6l06yypkje|eVjgRi>(^cVUI6B-PvadU?L zAIxf9d!4ktv8L!jH78Dsi(s%D;|T`4i?9cU0qU^2#`(n68U(t;eT1rk{o@(aWid3E z?^fiB^1>FzUVh>@C#s~c;EBfhsv#EVtA=>oTs8EGcfM-q9nTo$s0UNkdB9ZI<6T0ii z%U<!;kNOR9)2f1iW>vOekA2udTkdZONR5+M3q7<|PxGH#Rjk*VMHwnXtN{WnD+p zTK&)=r9*}-S=Y9qcFBg?VI!8*ii{;kH#ChHzGO~)V|`6qy_Gzq1zX#Fl>H)!Pvf7* zzlwhoKQnQ5;;O_oiE9(rCw`y!W8#6tV~IV94-;P{zDazS*p~c9;*#XQ66YlUo%mhy zr^I*3pA#1rotAtsxhr`~@~q_bMdv4X6w^nB4PMXwgURrGez2SpzieO>gJ_LTOT_O_P(E3~|M;I_my$ww0B_5Vll zMTzqUwqFAjrzR`PZ%dw+*r$D6d`4nV&Rxk}i8B*7CC^UWk@&Fq+r&AE%ad;>;}<6` zOPrs$FmXFR%kfPAOB2C!6IUeeOMSm>ITC__$t%Nk+l{`6VB%flnus88`5!J-Q$?Zj_7d_6b zoKC!ycsFq(s{yKwpW-hh{*ib)@sIdBML))$(mpKuA-*%QFG1G-GEQ|yHh(|yGpnBy zioT0eT~Ix}mUuq#OyZOxs;hHQla~}x&Hfy}jn&Y-td1T>9sLEh^g8P3gQAa$K0zIw zoVdK`yrT1q^3!-DQaP}^ws~F4kcPS!7k5#A!S|4Sq>evEv#OD$1#u0k<;4yHL>LX$J@gmC z|DdXQ%fa~u`s>1I_R%LE9e+$t+h&&56;~XTIKn}I2%|x}p}+m`Kd9bD&>eq-Vd%)w zrE%$R*vL_%M~xglV)SS!5x2uiOGi`Mp~J@v8_u$pAD}3|{GuwA>Sehv%pddf9o?^e z?dF-cT)g*BNiFqoWj|HP>%N~tdBp{)g0YPK$@ZoMvNnCi#PN4PFOFZ>obt$0$GYgs zm0snt-HEPee?__4rKv?HY)^Fby|O=QbZ7rrbi)3WQ*pnd+&0jrp*xFC)B&YEFhWtj z{5##*e-@pn2g*4H*lwk-5lMeU2b1dLt__X#tz}8{qO)6@SGCrxi%&*MTfBJFn9(Im zW;WEeHn%meY>&@xXzQqHjHlW=>KdBk!$uA%T{3^dk`)b2OKOJ?scURZ;>Alv(P;;> zuAx!US7y;MV|Q&yZOd#r)H9tH;6rK^eM;NN(y^lzy{@@U(HAu+`q9b=MXy?g|0{+g zd$XcXnu@HM6A?)%`s9Z8sugP{(-9hRKaq~v=#!iOF9!%2Bpt2MC)af{gy?Kjy0yNg zxwXBlr4`0*R}R_{{ASPy6}te6IvnjbPf5SHSUCVr)MtJVbP;_Hp^l;teXWhcLF_u1 zr{%D;+~o(f&a7kbv5m)ned`#civyP z`>2PXuRd`?*LRv`<{p~&e;~ZEvALFsKj);>5BDB?`dOuas=l(@+9O`fZ6@&@Y&y^? zrUS5um=2huzL*Y})-jW<;lG-kxQ!L?(^F^N^QX4&PW$7rc~Adk`a7#~OTzz40WBNQ z^)tcu^tyk@KNpWb=!>C4K3#Uy*~Ph!{%?X;@X8$a$R$sdzW(9DTh9M-ec#7FYREl2 z@;~8a2T^Iioq?XYYw5Umww0LC{3Ck8 zX>;aIdf?iUYbL%M%RQ_2{{){caG2z}r;LLZoW5?%k8kfXYEP;S0`t-pM4&Hn9w5t}@+?0#S z{clFkdslX3a*gO+d#Mw*9kJojF)x>Yolf+4D>@aw!dx30Fm7D+g!1ar3FFJBOrAZl zYR1GFZ9f)S-@xJ|nav`-Q3B@mXTU%Nk$Xah>m19P$1bxD1i zC?{hpA^n6TwSTU%5-)x@g+4>1@8;vO0z-r;bV@FkXd9iB&k|**0GEd_xiTs7tGaF2 z3w9{=98q3Il;42TR4N6^^{wqr(&vfvrhd4TVn%3^K9Z-@wyflb>~Urlwj%xiOtk%m z;<6Ugv+jG&V){S9Y1x*$P5T$3-9@w)Nwla~$gNpHTdkay>fi;URZ4Mr%A`dd{F%|# zHrA}e**!sh2B=>o>Pw*Xt%X|rGs>3SYYd5P%X7>>(xpbraOhcn9h^^JIt6;z4#ThP8tw8xCVrC)bN zDHOD$8Es7++aczHF9z{mA|5#sm&G71da_qQ)x&Df!x(j22YcRPQ@=vgeMaGOkxV^~ zQ8(4ICs>@Ce!b*XqW+1fUjucYCwr+(_C!X#uA`AXo#W)^gZwojzjZV&KND^f$}~pK z-%;iUyb#2%6Y(*J;xeWOWD6x{GFqBA+Eq%_ZxD6C7+f|=)Uz3NOMNSQ_-NzaN7VNb z^`Ai9+r+(;kz+`zXX{Z2vz!grwc`VN%j<<PG;WUpXgbXc7j4)om0IGWf4Px_(=o*vkCc!${LRN!(I*batL zfr(*tJ<5m>@2gXIuRwZLnEx%7(pHIidI7m?ZxWCZsXq%nkr(ValejHoKtXojg2(O5 zpnb@ocR+7ISOp}EiS4GVqD^2v`z$YOWh65FNpKsYjL>}oE2sj);Rd) zW9n?T3}X9d5*$<3;qn&PteQV0s*IDT0~NLHY$i3nxen*R%gYy5ESOy}Po^j@FJGkK zW7-P-()j+3@?H^c{<<5N%~**?d56%occABR$ZoC2n^_GT>Z>=@V;$1azL`XhBZ&mD zyqpO~VMs5XH>`XZWbP)!ZQEtJKF-*Ls62oNK zgV0jGN@I1(U$ zrM8;Z>J`kc3oB+yR(9BfwIhfc0egHyf~zjW<+4L)ECc2svqT3IiB{g$+-lVx@0VQl zXW2v4BHT_%$I>Gm1 zTgp_DwIA~*>Z~sgt2L28M^rr}s`fk>(wSpTsHt6DUpLL|U7Z#585MNNt+=cmiaKJ& z&^UAyN;uQy}GQV()VoF6)P3xte8eL#!_l>)*k;lvsm->fV8F zVEvKwwGAaNjWAu^pG{Zsxhv&cl5x;IxU>z&G=4c`s0?=xXW3Kg+bf!CS2wp-P^Y#( zn;IVg4Brv|PU61|`~z0^QoC;Kt~TYVKlV{;V}ZI@pgtDp*~=*`WeYoTzy0xyRY`Y; ztnW$ISq3hzK-N&wC$OI-?T{!0s&z579#+kD3bfFTccS|TNqqfYT!xIuL}v<%IE7j0 z#-qvE=>AEv{&62Jt01d0blsG`VcGa#8GI1tm&#Z982-_b%@+d*+qFbvKxXKH0vf&O zq$tXtgHOV3VEzAWF=&a5^73g&p>BnqOhWKj@Scb+x|`Aq!c%->Wg5M>IH#WNub}lb zg6=7FKi!n4x>q;WHEgJEN6I>u(ldjLN)}9e8Oh(fH(E^eHQ~^u3~EJdYt80~c!Jhm zj}2J6+hXa|n-a_u_al^;rvc_R26IndZOddlrUQiXZa5J+t_?HaY7CzvreUtz(M`#N z?U)R(O$J+z@@f9K3A3xmS4~`4J$K>kN!6*j6?3Oe0LRfIxjpA%->$s8LSYAIaVj$u z2te72LdSFfJ|cP&(hl6SM~l(KZYI>907d$8l-o^7_G7i!UV{mUl5R&@X!n5%EZ9Q( z=Qy}|0P8){u*oi_TUVDcA-EmypR@^czQoLVTp!stW~0|{{{QT~d3;pW`9FT|WPr#{ zG82%Hnal((LAVfBF)rEI2?Q8+0wFsC*+{}F>ad95f_q(X7uQ;?wN|fwaILu8Y8BVI zweH$lt*uq7zxQ*_UCzC8Z(!Q*@4w~+bGGMs&ii@JbJn{xZLHT_;W$?DNp|EVv?#ER z-IfN)OBzfSq{3B9(!rqJDa56xUL`#s=$|)0YG|+D+=iDo_GEo~2XZfhQvR2FQVDL> z?9r2T)N@d9G1GQ9Yp9wyJvS#M(pY^DIqEBGqFbr3JEuy{Wyb5Ex0V{V+lKs0m^7cm zc2hA|>2`Y&M7^Z9;W*R_7PEW$r49ZS1EePSxrO;m&|SfVeE`~p@n+nIN(TnyRewUx zboS^UrQSiRthK2r-VtwY!JXNZmj!iV?8XRe-I+3e zLU(=G(Ns|N35M={(P3%0V=j9koP`;ZtHWL80^pXV@!_FG>!|ag-bLbo!_+G-E`>^x z-`_uRy_CTAi*!v7%g2W0+^}2_mU~I>qQ=tJR?Ho_y`<9& zvjx|`>=w$0p|K{wGcGt9BUM`HOmt3tM@Mxd4e5TV80u7^`IT;p*P*m5 z9TymiL$0m$?X9%Zf(NB1wvz{4h*HV_1iJB>Ep4srT$#^~wC~YakNLGj_)JV3)t#;F zy8IVF*h>n+(@NUeq_S{Ldwq2skY_P zzVj@rM{yX>HsD^g(q!jX{m0m zuVWX`Rh;S7x5Zl;=}7VxMj50bAAX6943=?%eVC#319pv;-*-8}_^%+NC5`2eF{9l@ zQx8pmxDkNQ>GTA=|1vf=*q1z~qu_Ds02h)xdl@Z<4pG^&Jta&?e4hnh*h4)B7bv6y zIKJs6Rrsr_Hr7^EcXqbNYw+@vj>1A*4%yIDUt;7G7Si?DD)QYsnd)rh30OX45?<`#;ZGf{8`^7KtNxfVzH-!z zt!(n_n^_Hq@aC-_{ z*C)_3k3|W-h%EWr2G9%X8cde6Q1CVzAU@XTNWT7Ho2_2brpyhvb7%ZG+EZc`eW^KI z3d>A!?W2#Ce3P<^p}yASagM?UquU@mmLCS$ScHN0Tqe4qC!uTWY}es+A1tgq9DA=z z8HZ1#D6Mad8%qIR+*2&ZV!^iLyo^ccE0V>)jB7BGSySPM!%oG|)*I0*FnaBAnL z#})lOaOq!4i&(3a+;~SWuJh+s=eE%;S-JeK0o>GA2f87nM_2NHE_ZG9z}0yvZJ4-L z5l@`*Yt6d}Mo2yStw?NUHX!Z)_xC>w{Lcdav%vo>@IMRu&jSCm!2c}pKMVZ-Wr2!t z!Y^GXRpjE^@fG9yG-M1(&rkf4YU|sSA@!^9t?r5Mm)6ScbEY*2=yRr&j46RW)6|SU z`nSmIkVPK^?N^NN9BUbUZZ7!*U)jco_3$aujB zp@UXuEui?668bF+5#m;e1!BZgLEH{5Fs~=12q_s;@_;zfN6j@5cOZBF-tJ%K4(p?Q z-}@lN_+hRVu^Uj!wWrI+5v|TzK=COh^jkQT5O+c>5F>uHi2H$SAh-~)@0;t%m~vwO zX=-7A-OmPrLb^YL92P)46#x-%fjO5dMo7t+QU(Ae z27oBCl>H)rk|Y3A2tXbP0RZt-0MMgeU>-&lBcxknEkHOJds8 z{`mYa`$98yK`FOnM@B*6bi$AiT3|pt6%4MQ^_~R`GYky$(3*0#j)Bg&wHf{QoLRC6 z|H}movk3!zWg8d}PXz;gTpP?|5Re@x8B^v0L%D%rEV7hyMGWO`7%B+EIM4zE;;CSu zuTX=Teb*WxC1c70V3^-uooB$9L@+MXVbCG8Hs5FtZJrUM5xBE3Mo^CDP!LZA3Vl@? z%0bJl7e;o84%hGb|6DM6=ZGT0&^=NLP*J&(gVo48?e?Ri^1Ay z!0PUWBb{)xgB~~#PX)&YaDlm#>PJY)n9>V4dKx%3B8%a8+`!S(3rBClu?h6Rfp{u7 zwt@@HTd017l#D6;fTOR0gPxNm9Ieb-`g&pLPZ+j=78npu1;ZKO0`uuqH$qCrluTgA zFfb&L#cZ+HutkO!jsW4<4tn4~JQWgfLtTT3|pt6%5yc3(VJ0 z-3TceQ^LRyGB8|+EY=>sHQFQOg(H`6Tn~ESKs*&32fzhpdWf8GP%@?r1&+K7HEKY) z3AqGi5Hm-f4TcuAC4~`W7@@iutU!f$DyV)AE->FtXb@5|ri=ip{0w!tf$9$AD)R;$ zq@g`Q_ljxx8N18=o{rVw-_y0>Ua*cMSib--U?H9gtY3l)%y$tSgp`aaqXA3JP)8ZC z?nbWi#DIe|&#G_ks(|za|I>DH&770m|46 zwZMS#8{{f0bPLg)Y1-HfG$Xc%omzpHeZ~{0`@jiMh^GSTDR6=LNdkkAk}+ixKut6d zJ&i2#q&V}WiC!3vCk)Sk78npu1;g{;0`qfJH$qCrltN%Q!NBkWvIs*x!*GHZh7$?H z??4L-h^K<#C2)cHMXDPiC9$gkhEp=slMNVn?3IXKMxc~rC~bN((WOqMG=pt%w3F@N z#=+HRgXb0SXs5v0A4%6rGmyy^HRIq?RC<_7OU!KMX~m?>t0;gnh^L~=8{h)->j+30 zO2(AwP-a?&I@M6-P2{q{>P};@nr4HpO|>P3QDO!mdkgG9hIlH--T@bw-zG!|DH&5{ z1KBJC*1O0eSnF6*&+@`hP8i+;EifRS3Wh&}3(S9_x)D+`rc?mKTm!=g$YQ2B%P`Gc zFC6m-$A_Q?4#ZQz@d>!V{4v#!kdiSa1{@0v9G@bKaI9puSm1?WAz}Cow7`IPDj5C( zE--&Vbt9x?Oj!a9iwz8aMHXS`U>FvAVOUBSz632WAf5__ufYZ8uc&T>l#D4WfML0T z;qS;|?QxFL9?QLOR1%JFKo1;uq`YcUn ze5XRO68sd_5RM-~4;+Z6f+G#bb71x%ARLs8DUHCogOxo?r(u#8W}m z4_sjGONbCsGNyC@S-SzNKe8CCorbrxd*SFL90NcP9EhiaBMV$$4k92Nl#D4`fMc_P zV<55^j>iogo4s&sB^-l54;+Z6f+HJTU>=Nsa8NR)oCX}*3>-s{r4;CM72O@JZS%r$ zI^oCxJ#ZkN3XUkaz#O6a5mGXyoCzGeGSr<0lsx1rlXNI_Q<1jI21VOxO9~#dn~)6! zJCGrs3bNtg0<%Jh5K=OxoDF1q4OsceVl8FvqxO2?IEQeI06lOZo(hgp-~#hVsvjXG zW6D0@IM2YLB8zbFJ>_{`7|tgQqd^M{h^K;K0=U3Dp6W(O$(ZspV7S!4FcDdVf$!xm z^}=u&VVDG3U_d+-3@3pL%qLRa2q_s;t^tOt4GbqEi!kuL+|^zft|bhofEE}KPX$96 zxWHUWbt9x?Ot}dd4j34wAdC5gxtBZOh2v(zF%|T{fp{u7%E1NZ*;GG5O2(951IIlX z>aPqabC63=_+IWF8w~ANwxrNw?j=-n!3tD}r-EuexWGJ*&>*B_OnCsPv<&rr1JwfL z+V^sru$Q~v3)X`KD+XS`LOc~%OTh)^B?Jc{C1c8?fb~d*`mh0O8FH1y;t=zQ4T|=# zEh!l6F+#Q+>_CQiD#%uX3(S>-2q7h7%9B8LC_{b1K(-3Gc4UWaP_!p(NdehYgscke zK!$iK$ZEg^=4wKOkdiUwc_4c(Lw(jjR*PKwrt>*-)A_6ys22!S9XJ6B@l-&q0~eUr z5*UP(j47`I)L{cr6SBzV`G)VX7lzjeLo;ZB0r6BYw1ErEtyDKcO2(8of#D4U!+K;9 z2EOrq!wbV(grOa@z<_uv7)}Kjn72~h2q_s;J_UwPGSrU^7~43}X$X|h9h=TC^iAi- zc5vgc0;O%`>EO{mL9cu?UHif$F-p&%($CFowlMpQlu4if${?PKGJC)U=CcrxGL(!d z-$R-2GSq(=%Irlh8&%Cs=XWLmT0v|7vL%H+@B<+`8|*-acq+&)0T-ArCPWA+8B+#i zPE-45>SykkB8$N?H+=mwfkwClffQfZXJkUe&p;0xh^K<%3UGn>a;hI8C1XkuI06Qa zE0IMw_~tj@g&~VD><29{Af5__YrqBOtEp~;l#D6I0>dB!!?nmF41Ci$$P2?@!f+jE zfdTPUFx&_(FyBCRBcvp5699%G28IL3V(npW_=b4l2oa8(Ko1;|0)Syj?Aifnwb6)|a0K0r5h4| z{G%j=CpWUn@GcaF5HBu~l$U!Rr1x?p=&@+MS{xtlOfRQl`zlZ@Oh@EKiu4%Kn7Ob! zwO!%>rTrrs(0+wAnXpyOQQN8&)?KChQA~Lp_IWH*eN;D5mG)>RopnD(zeB|YZylU_ z{}%kKQ6s{mY#pkxu0pPbq3f_1LXC$q)hF~C>$N9XjfdzrDkjVtp8|gaYDAbqjcY69 zIBHxQQ=UPMPwUmK)1Ib^#_yh03=^_HzZB(}={zv&eHQgLp|MH?E60MGm|0)AcO55Tt>_zOY>{5P{>n$AG6SFK#)kFZGi&u6j0!eXKW1F zi2!I=GN!x*L~mxQZ)B>k>xdF`&ZWIhHKUbz)6v@mwKpk?8H>emISbg{U1v%@;Mf4D2TGdnzF)Q*f?2{%;b7LEsS6~Gau0DNqPTmax>ap4QV zCkE6BI`DD(nLQ>4VDW=2%3tiLOkltTB+5i*j&Bs{DJ`O3onEpO(&>d9k-mH!tIVjq zfTgDBjdMJ791k54rl8~T74jtLcs%YEgpP#)^#onV$-I`6lXN`6sgY9X%t;e<ZJ3=;`st> zo^JzO;s9I>z(oLzFa^M66>=#6m&KGR09+POOLfdsIOb_dm`k0QwKCS5{bEaSB0&Kc zBAYhT9NJ8UHdCPu!W6WbSs~AWHZx<&OlUJBpibAdnWao;umwcQ3}=pCClWgqClYe> zp?((d%?3V%Dd3x5Au2A8`%)OUq3n*Q@cY&k5=L7FD;6<1M-jx+{ zCGf6{DGPx&rsG}3@h(on8*}2-yBp6J05d&o{<+wJcMngS3E=mrG-W#HG7+ z5nspF0M&Y+LYM-o4Ha@HP;H1Q^*~h@P-}Hy8@a6;lWbk(mN)E9`Y@Oj!$i#RKXZ-Co^3CGNDKU*SZe`kcs1GfxIVgdtUsp;s;B_{CPRd3}?^Uh815(_k-zDcB1y%V9f| z1OnKNC1XkpY}c$CF0lhe_F<@59HKN^iu-yiuq0^H13ZYQf``sY^?eNCp=3;14?JxK zo;`#oCJYpIaBVhlwv@2zZ6}0uQ5FahPX*z59O1cy3_>UwQ#JzOhJe}`P&*8q`%u80 zZfgMRe`EZo*R1pGEzW5{+rWlKHce@rq8_%E-(s}VVYiwuAOSr%(6uP z$$rUan<(v+;_m2lhn}aAo^-AUJrPeuPdbIStWt-_i^fG-dVN+2AzS{sUy2qJG0?zOhaHd@Vo{r=95?)R4&I;fe3u}_L9amU} zHqLm2oQL&OpIrfnV-r97F@#?W;W6zjDr6T&#_u`1t8CxA|8bSiq;ytZBFJvQ@b-n#BFbk)6iC$;hosAOTch5o{Qff0JWbYQCN#l&Eo z^O1(QztFM-$If)>W++9+svPaP?nA&iPOr9$2N;>7npBHKu$x+ zm~s(1+=T)4f`EFy(c$hufpUpkhx=Jlf4RW3zx>QlL^SiINdnII6mY3sfZ5^jmTNp+ z_TP56OWZpgUU;qh=H&qlMq*F09o%Y{8T{IXtbcrJ z5|Gf?h^NxnzXlhW??FI~P05(DAB}xwK)u3fX}px$v52`sY!1zqD%Y-Ln(Bdn=zg{} zyEcG}HrGdVt6k&lM>_Q)I+x>}{^}$juva6F+E*I};Z9`hDc1z1@KdaD3JR2JQb7T1=VCyy!o1$l#(&!08DygK)oTLUT;_xFQ3+}ajX0I zc1r*)VYn9Ue6<_Nn}jVNx75u6oE{oI)DCsEDTm^>uK8`89%wkdiUw{{Z#D zfcii{)dK4M2HH1JraYu?QlH$@9T#Tqr(VTY9eRO(I4{tg1?hUh1I~ipdclKc0bsm| zsFN7nt8cKsr(qx7k6*M*`}@hIa2Em;2G^bOd6;FS#AAGwM7$W4*L*Mayr=!h@{9miD2qoL!NnDRDs{9{0U zE1b2o=O#LlaQ33T!88*q)?1=J69q$epKn!VR{ zt@b0c4~y9mh35;6#ulEs6zcLe@*#SG(0-hri=qDSpyvfi^c-a}y*0{z0>hjP!yrt- zFeMdoF$_}@Q$B}bJ`1Ry>V_#*K6N+DXRg^1o!n^wg_Aq8^M>g3Ns4lMXLiJ(cUnM~ z@665FRm6){_2_?(aD__@F0g_ zxOk@pbb4nt48!T27Vw}K4f8h`W+n`SFa^Vu$70IgVUn){>Q}l+=J4+RkECHxyx~Xr zn%T#Ra}iCLUwIbUuEV&9bDC8U=T>ABC*Gx`qjQ>95a(8OByrARLJ;RxB#N^Q*Z*(~ zg5RL!=z=T46k2XETJB$Hxo-pNKlPSd!dve9u3PR~);w+oQ2zNJv>X@bW&mAWYAts} zbZ)>!Q`-&}lp~^Z11^fQwcPiPmirDZw-POfFol+@!HujKjA~-aztMg_=#5v)7o>8~ zapXAu=2^HChyA@vcePnte<|p^v*!o1{rE~#*aIuPj2a`U%(kACg8JPoi-eQ^pOTiz zTpTqRwf%T^kwajFm)YFjW7jMuc?q5Vd^z_QB4ppstNL2 z&fdSd_tXGb_n_KM z$JT1Uy|KFkC>wLSxn!2x{hsq#`UrgX%yFu2u5cj7989VQ=S7+T9RVur~RXA(oU!|Yu#uuIk2U=pMS=r=Ms9Mm#d zI@?IIi&%R|^bm(=#<+->84JZsEOen-$#H;ZG8qG_&Bj1ax5VfY8bbDm$2xL?5Xr8s zMJDG4wIOEGqWcn;+NhB3Ny$73DK7w<2+2WxJ}Yi*s8l>P0k$d(`As zB-UhGSB!M5D~=;uvu9TDcBa&9eLc7Jb!1}*p(NhU1Y4^?b(CRiy3VT<1o1!z_Yt~1 zO&P^3BxtMW2%7M_?v0DQ?9%YqAYPPZbs4RIdKYU9mB|yhk0g&S8Y|<1+E@}{`62ba zp*&OnWp((3*^6B*RmQt2Bshu=KyU)PLbnir2@ZwEI}{SQk0kF_k~cA^O>k3)W%448 z)nQYJuHf?CFv-~)w234xxo+{`Pa7xD2u&c;*gSBO!vn{V2h!zZ^mfEk>FvJ+7ntcX zD|sL#W6BBez{x@Nc*6tlMlRnNo)~nVY##6I;L2oY=N0u(IKAk&oZdrkonCCmqmeI2 z)A0y7A|Bi3?8Kn`Y_X8+dLNXBT@gP@yPgCtr9vJCdn&lI9kwhBs-;1-B&Ze#)uNz! zif-58$~3*#J-LUTTRDZ?fFFeO0y+q%f+A-D9f4Cpv9o{XY%m)4o5Kd>L3MUeofTAP2Gtosb-HeY zF-nEa2GdO#dVyhsSnm{;nf0J3y5Ttow3Ya|pG%ZFZV>kUIktdf~!qbxrlN1x` z@j@$@#|4Td(WN?zRe(aH0Ze4r45I;3bWH?7;R1NTN$>!KDR_W&puPkiusEnL(w(4` z*Rm|BWfqy^r+#d(m}OW^giDd|dlZfi*G=isz zhlack%R;&UE5oQmu)b#RwDeTD@%#E8bof4;r_Su^lixdWEt! zsMIr43TpBU%QSrAv!>K{aYEo1r@=~PogqfBKNn-!|A=B%DNRA8&e5>iS~dsrgx zZlTrI3FR$DxmBx;ztt$WV2b?os*5)Jk&JC$s5MbtS~LCf?b0F|^~J5DNWun4{=9*{ zURbTH?@D|N6W`jEc!4BYd^O)jbOfC@0<0&Ig7<4}jtuTh?LiD~hBMtq&a}pMJW|Kk zY>U`%YV-GY!{7O_if!HB;aK-KqA$?9=S!-!|Vi0s)b7!vUm49VX30A@O_hQqKVUXKZ*?h2|qb-O0$Y+5->x9y%J z+wSVhwtJFno1g=1Zr{C5`zkwKdLOEGF)`1yn^aUWb);lana#o8_$h72f194JozD$;>=OiJs=160cq&am zj~{`V&V#85C>c{OKoguFRQDOJaE;jtmjsn1=EnR%j3B&mE_P;X`^1?|J6}xMRJqtt zh0lRp+(kj0KN#EpgEUUr#MuN~WEWs7yTmBdx5O8co#>e;3&-ukZ}33;LF&>v>%e zrFEkoV=b?x;&kaKxP;Rv#&2G%GG=pKhSgp53~Si1;B`Ty!%GtH3b-pd4!}0ozt+*D z*HDwvTO8r~h^Nw|zv4|wr|Q(Cl#D4iph>R}s@EB zb{HJ-R18j!$bgxi10sV{GN#-PgWncZZw;!q7&bqM0_BdNa*IP@J;PGg&pbuDEr@Qx zqL!=C#pyKL-ZSwKiTy>;_Q0%mtJq}PEnKLHsEF=Pu%+=^6o>%k?BK>}27>PL}=xRsLLXS=R2dha<)s@=&AzZ=Q`zo|YBU zTuThXk3l%)=?H%#;?p!cb8@^9@!<%2BjR-g+dpDj7G8WfH46$%%}PlDnnwYgO|l3n z8B=CJf$4?mB`4=7*~bHCWsdDp2k!#({)ZlPf5Iv73dddsf)7I zg$8r7q7>ml@C>L4mf+3p(vylA*6Kp)VJpb0HS=MmX=^e`e|Jwvb%QZlC00bXsET9c(# z8z7%UfmZDWa)_&CYfa162$tnSEa>#KV_`i(uTKs7i(mxg-xFknl#D6s0DWzi8qZSK zWT}l=YJ;J`ODNVFyc8G;1->A!enR5I`W&ydWr=sGwc1iG0ynSNQk|X|E!;q=Z%9q` zcfbgh-zJq2QW9UBf$E#H)J<9HMnm0qQJ`(~Qa2as{*}~yOIPCdUY;(^69f6;VW#rTKz%82=$mxyiGjuo zmGyi~zLbB+nUBei@}D&Gas5wwX5j8aUq(vkr|@Z1Os@$HyCfj+*iP8IrGDfis_8ybnWfw;an}(nwnw5bT@uTc<3@v?E9L)4NazabV zn9?U_n%X-@hdKpWTJN0QW#>g{qNqgOR}<9pqCzh1eGCOGS|OKM+mcwrL$a;g#{1>~ zz*N)*Ef7ydi*j&*c{ZU(NJ)I57+MU@QIE}02j!>(bJVOHHJGCY487)nNXg0J!%HZ~ zIfDdqgi%==D5h*3CX|yjgUlt#VO?_W5hM@tl$@I^xq>7|avY2Wgrq`Zs zd;22iqr<84G!DpkY%8&ZE?XWHpD!tWvrzPx-9ArBt7yds%*tfxDTHVAV#31NdVxU6YfYxKrk1fZwKM}Elt(<3sU_fJ%4Z@Vf(ZZRf> zoIPYnJXZefzTV~$4M6Oz;&>#6Puc9m?X3+-i^RrwLrJuz9` z5Y*+3aZ<>+_L(4}(TI}IR7eNUSv>TlC? zmR(N=kS;pX>}1axVb_EY1A;{BejR)Z;vkkfQi8ot&W28#Zo}&D2RfPukAv{SnKabR zOwID6!3cg80gdC7#B(udhj}5jBBag@sdGYVxzQS9P^`=d@j-hWdD2`F4|lg%$hote zClc8V9CH}BTyQwjt01Yu3Q?A3ldR2gaE}Fd;R3SCg4C=s5savP0s^uMC2{!$R#_ZU z7lqV?hCL>sKwD^f=W4+_m%DrCvLx@c*xkKzk*KiEc*`8dvm_CaF1&MjvUeVD*JKUr zD1vHU-f2UpEw*7by>l{z7cQlCSejZpoCHSL|3n1T4wQ^3tI-ZsA$3(qT^Ujw4>%^3KggOCzAh^I0a%mNpfXCff&D2dMsK)dFU+7wdPh19hnHE!rQ8^uan z2&yR}lgOQwl>32|-?X`2W!+axJlLe^%Q z?gKNnPD_b&t6QORsweXBBb6N~aSLHp{|F+8JgFDz7Gztzsrwaj3a`?evynJq zl^v#%WR;y}3RYP|B(RE=Nmkh|lB^?=T_J5VWooC=uV3535?fiqJYH%7C1kb`!!QG00KHa;;D4{O<7mp(ZqY}tDf}h9BxH@Sf=r%+`}a5q3nZnQ<9W80iFX)IF-90 z3XznDvkBa;^hF4ju)BXg1e9~x(Z*65lSt?Lq9D32$__AIC3#n8^Yut6IU+ZbD9jQu z4(&oMG8+- ze+sET8dyI;uJ$94C7mT{KOvVc4OyjhXV4Y`EdDjf=hmzXER&yoh;M1=BD zZsocz-$V+#kuG1OLg<3{QR$3lm}F(n=NdxX{QI{s{>XISeFpfBYcllC+2 zhj|t95T%zpEiE8z=XMoxNDw*&#m1(-PZ&@48fO*sFd<*H_YOM`V|p^<5hfZ??3*1y zHhHkU(6++w9k!jKX_iz1b*;jm0q0L4*ckhSohN0Y>g9q){oFO`o1{^%qtl2E4!Y2& zuR|kC>Jc>Rm!wftu;W59M?RnY`iHS7H73~H0Q}o>5YpU^PADV63+N;1Ik!ehc1_>M_w;2UXvAo^Gge1pR3Kz-mF zrDTV-fk!v+smc&{+TPIKG4PGS=^9@VjLa}bw;ZR1wLxT5;rf7pqz*Feoyg`GId+=~ zj4rNd>F3flhp_R8cg<`oPD`7D!og(f!6}(~0=^NAIc7pk$%U!IVKtmDi$M+_SfX| zK^K!Bb~rZB$0dO-Rz`|uBp*#OV~NnlL|_b1YSI8@0kH-sn&tUGqJ^n*h#xZJb{Um4 z4Ci~;g=+7j3yred#iqKNq^YT!1 z@o9w->f(`umaA^&8kTw>p*>XTY zn8Hfd`eOADgQoE{_)=OWCcYdjNyW5*qYLJV`RGoxhf|*Isqgn@V>qUwPRgc;OcA_@ z11#knZ3$s6ECeq4GBv^!a9Llb_8p6hd119UtQLjUQ^M-Wx|vof`TET8awg{0B5TCZ zPO;+3_%I;d64g#d-b?uac7BvLrsuN_<7z#dG^V95?wKg&K4^}3)dC5vB|%c+AgL8d zcu&=io}M_r|C`hA#*!RRfKo{UmDcxi)<` zCpfk%)VSLf+aR>SK0eqhn8K3__4*)KnDOjoQ)ugmGnyNtI%4cMZ;U!OHtot{uF>+a zHb>BCsZFCLN6?6KdTF%8O(UZMU87}PXk?T*G+G{Z)u;mw2fu(9B<7K4EwLZx0zmCsf-_2!G< zW3h!OpG}`k9Z?fz-|bA$J-{3UYSQNjaT~ASRk0d2FkXCucnWq%oQW#HybA&B!ICkh zKWx$%RvUD)=&wVunWh1zVKdj$!%2TK(7OM`Kuq?3W~6o8NbIdF$LZ6>6Vz-R8&L6y zfW2r%&$OEn<9#FdaC0zcpR+EE(|jLK&64MFOVXQB$dZ(dDH*V2lVL`Bm$$>innVw4 z`;QDrQvWjpws8Z}`@=O3#4?X~w4!@i3whZEAck!aPsPhF0T-ArMnJZqWK0RdHtk_` zyyy1~<9}o%lKr0z#K`hs${y>;hV;R{VSV;=?=K~!JyN0_;?m@yrmP5;Wv@?`bGa;g zHbZ(+e?ytV{!E!}OqqyO%!-T6;*(kN9xBF*^Q972JjE<7aVwr~7Ecw0%ewH{X7LP> zTh@hFn8oF8#WAyZK8lw~yE$?Qm*shG)h#s{7BL207gQ(93*Bm1X)-KNVp!(J@cjV8 znEx6e7}L=AC$sq9ZpHo#gWH#3=O$OPtH`XMZZdRtFtFm@W^qrq;{IlFU$^3bS)Ack zJjg80aw{HU77unS&NYieZpFjQ;ye`Fn>OmkaGc4I&l%E;F4^gq&{>DOF^w^q)TCNQ zxiO448OCx3qvLnVa)BGe@g~DWx8f7c;uGA8i_PLwcy*>yc+3Mzot(rZ`$~{EO@e33 zY`7_reWl2mY2={aVsx5e3ZBLV3q5CQl29;|n+&tuiszZdbKQy;n#Bv;ikF(ji`|MV z&En;5#WiN}YF2D@YSstVn8gil#m#2%I!CcAuSL!>G8`Yd`GD7HGPFAwSan;?;>~Ww zr<=vw+=_Rb#k)`(i#N6i)ywiuWX|2tTvOjJWV33|F&X!|$vxjJKF_WAGPC$nx8iHf z;;Y??Z#Ih$xE0@P7T<$n(VnvWD>sG*O$LoI>^8lgcjf!tm>x5k9!aX@VK;`SOol^A z3{SW*ykIgs#~92>AASE>H-^_thQn^fZ<)n!xD|h97JtI4Gp$g<`u@jBOtSBD(E7Z`}8SbgDfvX_PkEynO01L75n)5r1kOl=>{cN znH5!nG#1}lFYx#A$-XK>aGg;ovnAgKFxTiX8W@bU?u{m#)x=fb+}ge+scP9*Ylvi6 zb#WX~pYDBn^ht;4-ETSN(C2>m^4@^pkQor0n_JrlYOEW`-CpoPcqpHz1UCag1y*e zKLu1C5T}|%WdW%p$zY}4oU=^M8D8k7cY$uM$zJZoKD!I{`6hb>s63QgWD>=^iI$s0 zOTB>L@Yb`9SDEaU0kKc&&P4-?NwL}+MT1FH=Y^uS3l!^2_P7`Onl9K|P4;F`d04aE zBx>^}+GG-K2#AA#-T^zk&~8sooXu1d&fpOFJ(>vqxImJ{Hope!Clxgcp!A zynx8QT>+`Cl?`lscrTWHX9c9z=K4l97VDY%n2(uA?zR^k^)0Q<)UWhnIK;)KJ{Kmt zj4WT^1?_xqXqO~IyDS+R>b}aX`^tdSR4Z7v}4| zFaygSro7v|*l+8C{ce-}E-&^wyI{Z1WWN{M#5;r;OE<-@y~N(rh1i3p*aw|PdLSUx z+N`Dp9IJr)ZT^5W8`<|zKx$^~A^ZDd-oYW!0X{c9W>)kF;3PMhEI(|prirXwV7IHTw<-SR_q$%4r9YeRlz7L!={MoGGeK)<{3rKCQqSE9~OwNx;d0wC141`{m zKcp5*%4atI!essoU9ocwRiZDtKX)@FNFkZNU%Ws@qCsPrv?p2_Dmxm!-q z*ghE4-G(5`Rx|B*Fu)Hp8z#@gmQfE|M!akZsmGa8^MmdK-|#ND$C%uz2lps1ZrL{$ zincl$Xnas|7;j>bZ#@kA_{IhKw!_Srz~tCXUH~~_(_}K7HLy^FW$B z*923Z1ZK9g>RHa3W+uU%;Y2q*8BB#cn8ChbWDjx>`B%HVdpY*;fSJW-3`;?tu|zt}&Tc zdw5Kh7xQ3WhtvNWO=q&Jh-8B&fW+1z+nn5|n%rB0Qb%odQ~ffbx5)BlJ$I>)%Ove^N;<=obXrhquda&&iH%A2 zB~XCP3avP7)`D7lo#J+z;&!=-!&&taw8ciqySnq7)tzfrceaPK0OTchuED;Gof#L| zGt%S>O}Xb&*K9EtTtbhM<$Xb^b%WtZj!unw_uHio_Fd`BxWb;1CSPvW`?D_Uy|n9k zuXRej#*})MdtYO&akG={Mw9J&bojB!zA4Msp`akSfX1`~)Cb&r=1yllKR4^SO?O+t z0cH7C3{~-sx&zwQ=(2nZy8PyNhdY8_1f^1vWOm&Mc)LGxG^tqRl9rezri#bsG& z@49+SVCIqV!)y^vixzOqWE`}po9;zPQ<6zlo+Z^)cVaFx#ig-x`q^1h!-f`Y;{3)1 z$rn(KEYIpfYRr^6KTBFu-LWQ)X;nDQo|h%H)~rpcs-g>#OHGlBT}3W(7rC$tktT`R6}ueiDkkxiz^wI1ylPin{4Sv#)Da@}Rfa-%zn zhAvQSFi~`PplDA*@jgSbK1=GXs^1(JP9(5GYXi3AE+fmWS?1nGn1N)u#T{~U7m&A_ zkT-ik-joEH8*XD4QlB1ZY~r3Ah^<4%I-C0+8YtCb4sC30kJn=k6FSBd1Et3H)(ve! zCJj-~43rw;O*DY-rm3wrUsZku%b^Q5WE*wWWxJcJHrw4?HQ8=!E2^+D8;5vJ7!8uf zMcEh6=7*fdnjuYYGZD08yBw%DXS;1#*g9{6$=LxSW0`1c({>cN4C#!0tI59Ei+xiU z>}Qzlr+Kk&>wKOn>=*EYFZ*(GFzvXxSzeB`o^7?vSuu(n z@zh!NMF68?gLu>|`@#@t9K(r@;8icbwu zeYQ;C8E*<58={8gCvKwdasdilI*}}o(Ix7)|8b8Tt=BDN(x5OQgq~PM_I4Q+CZlki zdm$i}nGj1tx>X%6QtSo2$P4-@ZqQG5gAM>QO#ss&&&@>BLeg5d{HdrWx!bbVTwn^F z=fPazrPW+7t>(CCRqmnHQWL;p53Lq?09)v-RkbO!%7b~8msTsiw5oK|YK4bZjV6G4 z4`-?K(6-h?E7`XO9JTDqk2P(zn)Nh$)YIgp=sGV&*SaYhcT-gMwV}&YH*FBN@z{** z4w(mFbk!qG-e|(?^n%mj1*hE&&U$w^n?usNvG!BfEtF+HINcPInprm&_bX?HXlSj% z(U7ofk$pP|@0O1Bw#-u@bDUk~F2-)7+DWV}o9)Mi+bMIiLtX+ZR>hO*-UcOIvQH;V zIU$`!nNGP|38&p0XAqqo6o!_w&Gy*?J?snEvqDmRdwXkpX}sEgSOLCIOumnRHE9Ka z>ntIuqpiADob-F^v%{x)6LM!xd`k-n-)DMb3z}1v#O@n>?!;b!Qj47>0*x5ea!_wMT`vklIPbblA*E8%g z0rvtP#{?|fX(OMUZ4A(F ztf}9aWNl2xDb%Uh>|AEDlt9at+BN8gZWDa5QCi|wTBIu`tc7Ix6y0pL%#)LWabE)b zStgblMs2QGrW>WMSf;sQnVO7+sXx!Ga&FlBTxyP+$Z|K4vTwc}oUMsu-(sVbD`qQ& z1y-7HR)pPGzPN*rZ)jFC(zLXiuyNM4s!JBWjz=AFopGJX*l2)qwP%BeSnf}z*cM%E zn<=)*gORIXGIr{W8%@S`1CML#ulEpZ!_!;t$qwQqsaH!dc=Nyg_kMTHE2X!7_rb?i zd4sp(#o|&~VdbKZ`u2{>1@YSI_PW-}DXp7Ynp&&tIx5T7#M_!Tw5(H)A6+ndY-MxD z#@fn_wPVLu*6Ib7OX4l#$5k$q2Es5i4mw_#5;Na_*H{Vey3+%I##$~`}FVdRF$ zfyhmfTOxNw?v6YZc_Q*iPXtfk@KV1MIMM=4~-s*+>n18)9UAuYx7^qzccdlp$8)mM(&H;6MbU%uIQ`z-$kxf zei^+ndR_i&c{|hh4!tJ-n!IO+Zn!@0aQ-#XGb1k#za{$n{5SLePuZ@#KK$w7UkpDx z|JS)!xhn7d$PQ*eGUgAtFGl_m z`5vZxC-RTn>!a`GeV6-D-nY4XBYPq*=HHU{a{gNpGUO8xGTlv4GU($GGWGVnzvq&< zUyrdD)bCeZ+uGbVI$rnEif-~xKVfYu6*tsZcaAP7xKNf7JZE%Wdwp%^#(MZ6 z9u}kZ>wJpZ{zlivn}#+tvOK&w3p5Im+Wr_#V-w3u!*810cc_g32}Xm9@brhXYS8?f z#l;^+gHv+)>xTbnatVFj*7nC}I<~O9?)XiU9~y5XK!VYr6VP7|{7;ilCFr(4!Z2pS z31f4Gzp)c0PMSDj-1te8giJ)o78FdPyyM4Dm@tkNt?nsFKm8<2s{{{h4%nJ5UL|0CHruT@j*#NmX*!cvF3QVH88+y!O_{_Uh)`X~^lw&EGtE(um4A z@!Iy*j@E|G+{N*Z4b@G#vCa*3@z&h26Gj(QE-tIAiMLeNjvHOq)D*?-`;w&6I=C+0 zB&iK4jItf=wUxDP^WrVDXsJ26R#K;TOei>ElBCwPc1Y^-xTG$T#!G5NBmUQnL-7_# zojLlhkSP&Wf6~)95mc9-l&&YSd}1|1ZaS3nE>dQK!{)F&C(8Thm_O*4o}# z*wzk1cS-|xr+qbYynJdHJ%1efY^IcWX@!&r2O6}v4~B<9$I&1$DAA1#7K28z)F_^p z&hj!=_pB|fggDkxIPx}IY7?$?wQlOjT^H}{s2p2R8E>g=+E7=IC{1Jq<0c@i+)&%z zS=rH9*A%ZAy+-OU|F-<}6aI2y;oN`R6A3*spy#a_tNZ=e;+v~G*D&FE&+R#wbIJV2 zUZ~np*8RPfIT^=i{yz}j)YMwb#9wq~?Ar&9J@06)I4eJ=$<~&|S4&1>i_~Gdb?*C24-_N=Gw9IFIKkL25j1htVrh>MO81|Xq z`}-dp{m&Jp1O75*^k=K)Uznfq+y72*4R6e`k6-m{hS30 zr#^JkhyzpJ4`*C3@V|o3HuX$$-P78DrRO$J{_dT9TJ4z?7iLsZC;D$ag^9i}a!FI| zpH_Tzd`7^J=G$v_wm)<1!=n!0IP->O)wgHlN=J{L zkF0I+7Ph~|$l6~%>x@3zreE3X?ym-R-%)npn{Ga-GCZuPsH&{Es-SdU@sydf=ggcv zudKMtJbW*j81E>W*wWfrG_ks9B7_x9Wa5e@6b&sYDVBD0$3aQ>x|^hQDS^i`u&VJ% zD=nF`i)U7pO_@_Ndqy!hCKQbme*v&)oHh0rO{f)Q4(2lPAQF?g%9L3)rFiD-sk3I6 zl@!;uSwLrY7;{L`(6X84)dL-29+xIDgnhpoAXV44cF<8nH-9dWUx@|7Q@N6qxBzE2 z3HsVjuSYJ=Ma6y7G9*kUE#oX&ddJ|?M0*uheF=Iac|W4{NqzfeVDILT`V3J{L$!$~ z1*tCeW`qgYiLlz3lM2d-$@lzN^h zuOZ5>Kxrry1LgYmPCMxfM0)!W{1jj*XplahDb=<$@O!jy%L8mh`u~n-hm66`I;_ij zKXL)n|4B~EZv3=pe^0dgi1tc>_8CT7T|)N^%cBYR2G0OFDjE)_SC zx3PlzszJ$VbskVn%I3{T=-=mf1SvGF$q6E5^e*^Oh(Qhap4BM z0>p0+@u|n-XL29N)|H&YXlcc0H7QZQNz~bs@v}*wp2w)$>f70k_8bV|ev7CdB!H>Tm{GIuMJQEGDUf?l3hdACLj)o%qi~vVJ?m4jx#Z$`YUK}z>x)_V(FRCTkWAzAofwc?!1RB_G^e_A z+~#p}>o+ky`%{OZH{pLse5=awQ-RSmmwd@D^?i*vN=t3jx1pAgi2C%o`1uCZLv`x6 zP3mc_?Nc{*;;vA3D_I(=<>%o0nD}Zc@Y9Ov1UjY3uL0PO0@YJ+oya&ani> zgJAre7|(CSj~}lWY@-e|Cn)z_V&j}+3;?XY2f_9Qv0WI)&wQ{Y&WH2(7-OZ4aUQ!I zVEPNa4*M^}`TaWlTo29?W9X>1@h!&k*K%-T`)3p!)0^@0HrS3g*p3THMdGYpQrpQ^ zL#3^CxErXrcv;EPc_oWPisItp+S=6eaAs| zdp+*Yjc=^4+E|ahM7(ngi7Xo0a(9}_HS%m{Pl_9ByW$4>jUlRDp75MoIQVW@5rm=xRo&(RG z?-VT9+c1d@u_1dT5PwOC_g{&h=_4d*7|HJDD+s?+r?CUDLip~Y!Mb=y#|t;G#%DbjFsit9f;^)jUI96x%&?GeW&6v%vQ@@r}6$KVO4yz#8yL^0PhVz7L9gGh67EOq~sj zCFvbvdy?3svG_SpBF1jrFh0QOl|f&ANG=G=eIF5p&@5-jz_Lhsmt+jM4?hn<#z2zb z_uV^4esGZ7_a0(&+w))*dJJ2I(i;=sBMHxt1l*n=^{}W3tqS}4J|T*VS)z9II7XsL ztT!b6i6pJm@N+37jUi2ZJxp20g&+=BzT{Ov_M|AzM8>WIS;+oO@@{zmKcBlGGekWj ziZYRvqL*06J|IbtKZu`UNJ?}f&woij z2^MUl!+G3N(vuBH3D{&G)2+M1m=N5FTO>PlbH2>XdHNvHH|AmPXl>e9ue-u=tm2dG z$V+HBVVeLf4U*Sem~u#ktC*yNLAz6k>tel1x`*9AZ-CU$Ucb2w?-%OHhMFD7y$DMA zU+zgI^=QeSY~(lx1s5}IhqH#NiPNp!QX-Aj_mHE$vZiWmIB^0%m7L3r*Fi7VGHkaE z`Ij(hK8Nk5V#3qy_9BRSNpHh(s240|x1C8F{3`}XP4III^O>N#f(iQovF} z=^kh-3mKp%0H~C8Nb zU^rgINMY~wlkn2S+Sax$Oqk&&d%ecicZw}SRIR{7!H zrhC6W2=#?Cwa{^st;Amh-~$=&;;NdKWd8wzgvQ&+R3h zW*BDQ& z4Vlxi*61Y#+?x?o2X=P4%kuf=;vpEfc|+2omz>HnKidqJmg-wUMpax4^OzbKL-=;C z9BQQ*cV25pyc2z0SE46b>w90m6f@V_e7r zVG9HqK=zPjNCMf&!Y1k{h~U1~ec!6JwpMNX^h-r8xLa-AwOakwU0bWQi(37C&b{}& zci)>gk+I+3e~t3)cFwtA4!eo9rKx_V1pbxl`SM^i1{%k3;K#;ua>=0vHPQ(R0pYOBdP?_#Pi`c4** z{*sZN=}VEG*n)#R9M{w(a4^*2Rm=U1bY8o0k@O`MRnp$s-4l%~d z50eo!JBs|wAjX!m^b$8TxR{cI> zeBrPe+uFODT4)bL4*wxze)ce#!SGkc@F$w8o4VM`mRQ*?H-}?uIZo@WSEzGt?XT3- z;<**J9#5iY9)Xf8(K7?>L+D#48!VPHQSb&EAl?^~AYXN`O;SH)Yfd*F=$Sl;_JUab zUTO`O(kfD3@rbdKZ!UH-)Yn-&?orre^crL*@-ra^i!{)l!$fcBOX%9WIt0Al!=?3x zYtM8kC+bFSybedS`T1{@2`%b0|LGD$qqUV~ZA+?Npr_CJbpR8UcSVPT6E z8V~v?$Ax%2In!CfQtr$?%Ko9ap^5L+`vQ2N2+z!ku#fVPRlo@PUC%yms_g@SA*8=~wz<(|9Ukm)#0{^wZe=YD|3;h4G zKvg6eP_9?13XTd)Wm>Z~Ggp`bH!%%;&S$`9=_p}@%cfgNM`>PAS(xRwtLc?0y}CX80(UbSb>M+K1q+CTg6rx>2O!amW+bDG2$ z?o3xsB3i*(MDbarbS(}O;x>o{V#G5++yO2yZziM&DH+!afjBxqFE9~zBKN9&y+18D za)9<#|NRu>=d?!DX+WdEnXa5fw1TyW;{2L0Pu2^qFo^X(A^yEI0EpH44{Mn;EgP@0OFYdh=L2u1ynIYO2)Nv z04Oy9#E_+3B?Bl;0WgaI6oL={5YGevy=w>NBdKD9l#FW?05IDGFbY}Pd4u+oy_0mW z%a}bFKmW{rO`f`-Qc!w&c2V&h!Y~@Nz<_ur7{-DN%tuk(2q_uY<^#iA69c`&rky1) z(CM}@cktdbN|)hZrG#MtVbDPf42Wlfp$J@HojtS>fUOhc}AnSepZ&&CO6a~O-w7>&SP#c_f% z9rS>LcqUMa!3E}{2?9b&#KsnGv5M2uIp$YS%-X_!(=;GV|6hM=>ILk!arymcH>7`A4Y6n`}YBI-a7 z9EfLvV*|LroS^y9H)UEI1tYS$8Kkdkq2C~)MOIL<&8 z;izG@$W4b~7-7ICatH(BnP9jOTwuO{>PAS(xRwVD!%YkqA&W2!VHk#|!!Uv{Tnt)Z zKs*x+^b$9iucf*XQZlYZfFW#RxE@)oJ$_@hM>rjh0>W_v=z#Fj^&_NY zTpI}-h1q({gmMdV3Cb{LjzR|vBj!j-Bgm12>Q=A<72=to`Z2h`d!VCmcOq9?JY+u&?MZsN%NU)#r~GeOSRMW?%NUgo)=>oOC*TDv#4~~QGjM_VrvwKf zCF9z7z|ynzaVD(0k*ggXvY+M|_U@XY6BJsm8RN_tW^mVx~FMG|i%PI2IF*cR>#vh-ZT118{-)eX1WJCF5EgIF^_=K13GbSj%j&BprsO zgyAF50t4ciVE8k*!2Ai-jgXSqvjD?#6T@GSMHo66hUMuntRM`Zf)*GM&jiEg-~#h! zR5wCO#7$YQW|ncmWo4o4T^7y^3WKs*y1x!?kG z2m#@sWL(=09NSDBLy^UBJYwS5mJY`b!Z8f=z=3!sIP$;+=HUnk2PNa$$-uGG#4!R{ zT9KHm=&@&GXF43G5RQD%0|(-n;D~_>%u%WzAtmG58NjhSTi<0uDMYR|O+cZ?iHzM2 zD8?>FQu3HRglr_(fei6Xkc|Qtm^DI#kdkrjEFjxw!WxY%)>76!YF|1WXA_Pwpa%}b zGr=(qTwoqc^&_NYTssdq&NXr9$RZqkPkC-S4CfPu@t_3;#52J#1zcdBOm!oqWL*0p zFkEV4n2IdI!1r>Oro(UaDlmu>PAS(xONLL+-zc)g)HV1)?V)BbU1D$9J4_W9EfLvqY_+T zUO@FDq-0#X7dY<8)_-n7S%_SM!uN9bIA9n*cO<1Ab048v1XiFzJQGwWfD6ov2@OI@ z#9mo*R1X(S(z+6L!5K=O(Jq=_}W$RCx$m)>m+;l!=Z91P!2kIFD zRS!;pLOc^to4^I;jRXcECF9yl0QI7Ys2N%0@_fVhVmb^j6NVPh0t4ciU}y&ynA@ms zgp`bHuK~lWCWg((A`E=v`)WE2uM>t2&;kSEnP4~xTwvZobt9x?T>B6hKFHSJH(~7L zL?J z6J_>-3(RLCAY~{S*S>->UuNt7GL_kfTsEp&o6avS0JMTO{^dwYec)?Cb{5!y4Dn2m zT>>sJUrdM)QZlX$$*Ir>=ZG`+OOeH3SsT8=IY1-bfi0cIl^C z1Ufs*2g+Sp$|SmiX#LV&Rcg)Bz?juJOZ|enl*)=%07)&dBg_DMqDrj?tVCQ}3+!tI z@C{mZjRp@0%3zuO?kXzBu`96hEiUJFTx;Fybd550RmwLAd(kja|P>PgaBYz z61#Q)T5mSuC7c2uWKrVAdT!JWWYpvj1=D2+we>lo5LPoS=yzH$iLb3FTAf6QhA0Af zp=1)@O+g)XT>G-_)cCllZjdC-&3RZu>_hOFzLXQ5tKzXY1Jk@MhNQjIVDbF7;UZ9Yt0zPJ;mw_Oe zMB4%d;u)a8chJ}vvI_ywuw-0&9f)4b(O=EcUlE9sbk1eGLN%k6dDGE1294J!iy4c> za61dwUS$XwwV$;khxrGBxrf6<{4imT30A2itJFfk8yVO1V1+&|sE-Zu<;#)Ugdh#J z%BVwo_u&4**x;?R&x_hO7({VE6pwQiSE-sYAqdv@2fl;31?(E2jai?b&D0rZ%pm;KX>i~{0 z1K<;@)FJ?%h#Ox3J~gOM5x^&1#q2R72#fD$QU19{Z3+V}AFTg^tJJ#vOD#UMP4xSFkii z!QDMt+T^MP*x@FC0q-w9RfV&FR=t}O(<%AmeL;9H_CaHG*G-G&YbA_dfmc?#aR8?WeYJYNFL^l}s4Srz(4* zbnsR7k~*qWq(kG?E{#_~;{-HDn1RMk*ik{_ChX9l@fxA-My_skN((K>=IYW{mW?&` zDq$IxGnEoDe9a{@jn}G^p2B^BL)Gnavj%x{^st@XQ0@xOA>xL9t*SR5T^(;q1 z7SK46lqHDd5l3D(2nMOxgCVU{sh&XEnYzK%iW^|Bt*{ru4D5AMmAV7=Iw`JgguR-A zdZVz{PHwN}6nizgt)n%$Ef~-^k*q!^N~c*`21$e|Rgxj9mU04eD>%Hq*=4Uyu-D13 z7s3qem81s_#P$YuW68MI3fr{^!zE7#g>x8ck%uV5k>bAI1}sV1^Z*aync$&wQn8OA zJd})Un}Mg@#Iu+1#HE4439j7%&XJOKy&Z&*Zps27;+Y^kmm@rfkU<;Q( zLA}$&c^(S5)9nai{cn!{^zn6`z1=-67~O1WWYd(fKhOK1D^Pwv&iFhWK^gLnP2}_=2+K`UcxUo*@SwFZ4AExP3 z>BdP8&1_2yo)J)dj)~GqDesO>ap`$7=}G5$&=c`Y^rVA1Fw5t3aqV>Id0J3U2K7@- zZRvPU+Z}ZHGuM7kP}^yF5PhQENIF!Mf$uSa%kFVTihxto3OK_l0B^_fX9=$%cxMLj zj)gr*JB}-CLz`zjQqF_o)Ms}P;@HH`E~apNxEKeVXHp@%IWl?gS*2g!{@33vtX(`a zONq@mHyEehb_2+`N%jWO>C8?=pP)BRlX{QCJVtt5_nNv2Z{9_%d?PAZ+G}Z`_`Kj4 zQ7;{sYWpxTnCEhr-LWjFBs9zA&&o?{VohZ;Q@#=6tOzAHdr0p+1G!>D}d})e+^V15r z)G5H~a6chyqOw7DTFtah!t9|`JZbS}p`{WU2*;HcEm8?G@8!kx%bc5QGLKgF8F zaBwu&3p6HlUdC=VFskCK$)vx4-Y_ZRnV1w`xh9k1rfbp8*SLwiN!s#pOWhj8>7hwSD0l6b3g%{W2=P6qJRK{)GC8r!({M<{6yGe`3P!+U5JQFRR0vDK{B=iU=8P|RRE$$2I z_XhQQOhukX0kq?aurrx^WsJr>a;nm}kB<&K2*m8W1ivJx&p;TUBAyAQ!vjAqoPcc!A+A$Pxwjy9@e@ zf(NVuz<3Q+8NUuf){W6pb}imdI=+s4=!keGI{pz{V15$;=}1XDW(OS)1oa0^?cPEz z_oGKr_UZ?$o%w;RB515V$TG5U`-5i$G)_W0Xa`AuE5os)7UZ-mcaYl|X(ifKI3zm! z`4Q8f#jx@)+3sy92-_ikn6~>3xJKb#8f-QyuDuLjTgO(O%Hj=Ra~WxFsP?`KgZc{}C_?KP&ibYf!sfx(l{O$3p2_F}xAjwn@< zyk|};NhYeC!~mLzi&$zFbsw1KO_*jPOoK23(@d>Wr@%B*w}f4$@mk&q z!e*vj=trlFx0!;=Xffi5zvURpWTfu|ok;%#q|<>EVFpN#sZxu9^q9EzK9If_)ZZ0I zkJa9_davVN?R!=qmb0T8&zBmFEj)!3>hccq5u!k9KTglZQ2%$)^MVw5jxv?r9_2rP zVUB}g5N2SQ(kitChAE9}AHy&o1@#YwVal`*y$$n`XLeMOyDgw`a(8y&2tl8sD5rO4 zM@@RS1%!NecA<2W{1X_a9EL%dfnnxUsTDBHoVfNW4D*+u{%2vBx!RvSEuj6yGdn8C z-4;kg4#RNqZVL!{cQy>e>D?AcLoXZVuQ1F!7zSYmhN+ClwZFk6p9l5Ngh>|i?*8|b zVNibHNBf-F$BlCtO_-mhEppt4@et=Wt0c~=$RSRCN=cw|n^zL&RrFor+{1(<&Z|fk z=NPX4?ivKYK+Dk$SA-d~+;X(sztD334C?<7Eq5YsxvzR|xqq_e@iKt+kMGfPT%4By zgt*LF?mN+W0hdkfI9SlW6P*`uS)8NgzH+tPmuR`QXgP!#v|KG7WW``q8`u7g_WN2i zUL9YMsv*~r)6hn)88c0uJcAhWTxRcyf!(S$hLa#8NZ06$ zNXW=x={z&dZer~v(IZ@<8RIfyW-Ju5u+WWaE#C#6$z%+yHU|T}-4dr;Xb9OKUhBvY zK_t7k7M)QLGDcWQo9=_I*-Y;g1#E?@M(qkb#Du$dSy`F)gh$}+Bj%*Z$ z*u2T7G$ZCnMMG?ZzKmV*9YbrZ0^$OD^LHevO1GskJR+V6Zo2;qX7(xvLQ3L8M!-Ef zq>nN|)4gK8+8CR%gpeN%*G94Nka~f^1un?fpq&Ay&dsPdi&47 z1!lUC@;f=;d}i z9Ql$ofk(=b@i;bT$Ap|`i^XJD{6;X@74gHg>#^X{s?;N4PYqAD!s}Q~J(Y^HE%JJj|{2-hc&_OsA%ybvf5jYi;xC`j;n+i(Z1%pLFnY$n; z3d*g5Ds{9`foW#XPwAi>*W%gGXbfzCFasNm$Ga%7!FW7x4jWX4^aUY(en_7e(&vWs zIl=}Lv?_-U=2$R9foX&J?gG;WbKM1|4HmcyOdHH|7nnAvvj8WyV!6MjzPQ(#r zV1sFN8cwgCXeYo1i-pqDwRp(6oY58wD_DC)o?$N^1A;_azjG4m8hn3=r&j4T?OyCe zS&aKL&~MR%OG9V`oV+8dB=4aKgfkDem_>#pEghzy#S`!waWWZu=qH6dwagZtm0Fmh zm{dUsQ8dsB ze@utd_5+6~n^WkMshxAp#(<=GeWSx6$qOEd!+G^J*6c8k~Av8`Rt0QP6 zPm>P~c^$TegaA9ktV6PX+B&4BmFjS;jn=u=Mr&cqg|H>U3~afC-jk|Qm*6!E*m8YH zuNJn9b6eJ>*s|Jf%k?R?RfiJg`JkdP6#uw z)5K}1J5Rj+AHQFXqjAVZ<#a4tq%S+v)qO$^V6p;+MP!-j(wrgOm!J8bmiNnWi;x`TSu9M4UqhO z1F>FMuWjy0d@B>*){}UNBvpJ3-$rzX+z$e5CXtf&8||(P?o1sa3~r_~{gRxi(Q!Od z&)00r*l_Cb_YTwF`LT*)-QVe2_cx#~(Dy(PX3!TJ@Vy4~g@(A+jlR$&Izl6#=C`Iy z^Ifh1V;Kx!@1s*6O*c=qG|p%{zmw4&J?!Y zn_}DDJ=u0|ifxm0fX(f@&uw3Amq+hI)gC71nNAZ6c4r?H>^3F0vX@YYmG`-FFHaUx_Z?Ca5o?$B#5IMHqBEw$$ z1^g?SV{%rTP|CFBaRYHud%jGSDRNSf*>j|`T3eP}gH26f98GYps|n7bCJ=8?A)ZMS z(CbHFrt@HG0!qfU3(y4ThxGHzR=Cz`g-b%(iPpya0gNELaV~ae8|TS0n{mFJa;S2# zsS2M1xwwl$IDas=|NCj2a)@&XxX3BMQFe)0Cbq;ElAY+CC=3XQXJRKhj|MXxZj+rT z8P_g@oqib7FE#DN-b`Y1`BiR%aK*0l&b}f=-%HaP>tE+; z(rc+n=_`(KeZ(_q(x3AtrBiikQcA|P8_}dUg!JppR;3q(w423TcuUCr;>q=nW$z7g z%CY3QC3RY)SC4q_xi!UKuJ@W2Z}yrNd8X}1Y=GzNcJr}JHzgmFy@WapeyhviH<7`A z1?(_5;+YtnUXcMay$3`Fr(|5a0|vi6r2iyOi&YIjUTdLQla)_6zO)-BUrNWd9evatypSxWC^JDU# z-@sV#AH)ySe|}0_G+iTLbGb<3#!fD7?Bt3MsPgxM%X9aXKNvOFkcXm0`0{LYMn!Ji z@GLP2-v{BW$D{mz3k%*pXZ#0R77i-^|~?7*0cTzvR&b}kf{otu#YG>-x}n`9AE zGOo>q0&`3SXmT>5zb1G@4~2qi?JYg&#Y&n%jhD+ z*jBz1vWpjyc^72{o1oaYdc-p^J&mbgru&?Po|5<+E6^{`)tBY! zOHK6jo~5xg9eP@ve@y6K6sCWX&@Z>pFO$%7A-3V^&CTK!WcU@CL8sRj0htC^f=)@C zegpdITzyrpzS4w#00qX%bkJ${k_vsb1$~tSoeQy{KLp9eYYF<=%%C3xBOud&M9?W2 z*Qx=1oe7%WW;E8N13e6&QwI)CZo_*NGK$v|y!DyEqn8l@>j{E|kdkq&9`NdN_1av$ z#sv8k3XGa`AV+vww$8F_tz=m)#D-39I~FGhdLlFE&w&w;pC!l$DH+!`0s6*Vy(w33 z%+(um^$n&1zeBOHA)Nvvp};5P)o%)~ev`aC`QNx_=>cUl;1WPU>!x0B@CAl#8*! zzXjRFI|%%a!v=rBP<$AW-W;Ou18R>At^ zDvNwfzLbB+osY?m@*lPGasSVFV(6YjpGHgRQv5h7rq2W-Jk0r^ntsXs0CYsa22+v5 zcfIoPU9UX7E>Ew`6KftC`m}~TelXvd=iZ^z=e;X^FRo5bId&+GdG32Y>}7DRDGwj* zm7aK$KSsyv-1r@J)~2mdTJU^baDbMvy zJ)6mnG@MxLBA!X>e*l&6UQip_yERX5 zVU5jI+?=9IYaZ#r-`;FVYwXP~aP4{U$@a`peaKOD0aa(7-XWpd;x@d|DI+mD!cLt+$JM2w#q37u9IB2b`Y)|nc@1F<2nVnPR`SJ zGFcNjj{0P$ z-|fW(rDT1uz0DfDwAr2r+!UfLx<#1b$3_?bv9kvO9(y z+m}&eBXYltMx;_&2V4@9GRCnC_8pTw$s|qF95vuOX=C#-v=@`?- z_Y4xsmquk{sGM?im~ei|46=wMM}*{p?~pt!t>l7K$yFpdns4OhV;nb*peugkfq#1J z1S*T=I}dvDW$A_^B|X2dl;8~=d5SY4J@5tmJ<&QiD=l{7ZfPx-9A6;z)lyliy7>*IIatw-g% z-p1q-QR6x`YS0PWjWHw0h7o)s>Yq`(PKGP} z;>KzxDINFR9OL-Mx;qcgJ}Te6uwh+6R!fr|*a7w^ry^Y9nC~`}qoejPAdGR!cho&L z)lh4k+S57A%`rp3=M6wcTI(d^_dI!Pn(n_2B1DAIYJgW??@vQ;?FaO>ogg zMhF^ee9kIpXbRyO{g|*wo+ywgd9A6G_S73D8{vhC)E`*f5kE8_r0%;iL_IG6L#M4C_TGl%(lFV8q}Nx7kE44{1j)j*=Ybt>3c?ntiMCg z`A$7uKzis%3sOC6j8hXn3`i2~=XLN~5c{#zQIhO?at?IH90%6GAkfh~coc*e&!eGk zUS^gb4@U6o2xuIqB;JcbJ1h?CRbhQmSYH^{E6vuJfMRWKm=D^M$deYyc(}X8!|t8s zVwuQc;JC}cm6F4eUPUPtR>`sqhh$@+i+dutiqPJ5VyNtw%dlhxK(~eQj7@6V_Lo zt#KTR(Mpncu9fj{@2pMn&T5&+Vc=Sqfmgfy>-dxk*U7RBhh$@oi+d)xi)+X#HJMqZ z9E`9=83M8jCGo63tda=p^P5$bF(8g-Ui+kPo!+74kf zhA|2SM8JPhtbyi&3W$Mrh-Wev%m){k=OG~ND2bmHfOaimy*aFJ3hNugdXuT+0u*cQ zVW`iC%*iw;wa8i-n;fYosTF$SYIbmKl(?+TdnHG@2!YW~Hel0W8>wD}JgAO%CaTA| zz$FMsbxPvFb*SDI);q&`M_Au%>b(?Y+SahK*{hX0JTfiRClcqju(6d8vrUq=J#25L z={YcS>$HMMcX$bUbv2Rhl=0XOVv1WsG$)6(PDrF*hBN2ll#GC}lev`1xRw}C zF&Sx#Bi_Q}lI#pO<2qtI)nv45%o0_m=d319Sm_i3!e&`m$vD+YLFM&CvO~@!tDG#8 z)DcNCY}gHwYL$ATIW4Spxvk>P2pCC+RT9K_y2)s(A|%-vZpID7xXWaet-`BJ&)Gnn zu*&I{l4O-#Rti>WBobJ~&LpdxCX;L;lHFlr8)X_N(KTRfXNeswVI40ugAy`ZiQx>% z59!3m*iE$7iBTJ9@W@r~8>4%|`1&n<(eg&TS38x)176V?Og0@i8LXNtL&{;*J8~E< ziG&_xf=IItdMo`#_8uyN;w{waI{^Wm9`Q^%{Z_8y76jDkDH+%Hq0{dT>t~wXeH(J^ zKFWSUV2=FJh`pp6Q|(MMR>^<&>nuXH9qd4ccqYhx2QDx_M~Dzo65r+oviHLJyC$;V zBUk${Y`ljtho9P$i{D5`;s1>C!z}G1xtJc3a1=xI^CaYBs{`Oj>_dpN_<0GrB}zV$ zO2GO8v3?R34C8RRqOc2&MPkXfHdj9y5FB1b16Zc{OSvzSs9)#pr-zc1D`J*TD$uyoP|P6Zc7H&w@p*Vp z>Ep3+G$PZm?28zmS!zwOF-f^acCNVD@<6Qk3-Yr!AP`s)&&1E(2N#&%Ba8?s8P}9Z zh5l_=|Hj1n0dkFRfGp)K$@mtzbZf{ir3as$AX}avlXA&1MXtboeymuHpvn&+9JmqB z1ovOT1?Eo)FG5PjwE%GYBf2jlj=?@duHlQAokPB*;U(6|@ROv$7g4Ev zoL9Nf<%?)>FVf|6R0v%VKTKT;pv3Sh^$6%NJg#K{f1ilnTj0;r`bLc20D5q=IcY!P zeVA9Jj?nsf)6xRcac)U42Bi#HsZm>K%JK{S1lnhUe>Vzp7w;-j^Vccw|4!p7LHLa>vi5xT<9sxS@uofYu~5>w)G#mLwcYDQvI!?rBUm1}nR_6LObX?LrTm z+l3yj&l`jt?+Z_0@k(A@9 zJdD7@Bl;0y1TNC@BgPSjHv&)8!rrtVBk*J`B6@d$+bN~$>Md1`;bb(&??>6FQa#1d zj|x&;ataO^`NC){`CLTqL{jx0PG(o?;bdVphH@v%x8t-Nn_4`AT4h8=t#WjgIs^0K z(Q&O1trCmqQPC>J+K~|>dU&mJjHY?hdbG;1+9;Wp?7DAc(Yy52o^{uArZzf)TLMy- z9px~e4a>uPcAHn(j;Q9-SN0RH0%*gets?<5vtwLe`vJiCiMJo_*poG2h9ceAW} zhViF~U!mdWLxg3$(5M`BLr(tgR~-(C?p)Ssh_N!g&T@2_UEqElTp`J-K*9VkPXtK0pH7 zAfAbB&O#Mn-bV&NNXfW%5Vlz#(W_1KoXv6_=Bb8x&d0eI%tJOHBh`N|Ba!UyXQX;= zB>Juho}J=0JV;H)u>lpI6WA|Bi%h2(G4!wJ{lS_YlJxcL;#!*UYcsRtMPP&lFGN6= zq-0!s6qZbwX1thXIn0=ly{zeb8IYuYKLa*#16~3F1_xrBM?NPJUe-WfCceOpcqU#( zpWX)Z`UC*6R^#uh`!M@5C1N=!#o>Py{zqf8Hr?nKO?nqBhlxnGqO*zx#wNFy(Tmr`E#ze_nOX7%Fv5b@BOpssGOj%ZOSYS4ypd%&%-Ak_S=aY6 zAW8jx2JGSnq&Kw<4#f5{K1I`(hOKxz$iwJWZrBC!OgxOfCIV*qgf`iQeOyHQE$p%- zqIa97;h!3Dn5H|`!*+Zx1Ci|SXP_P2KzBfZ)5AD6+rxeg3c~^{JdB&r*g|_Uu^UUW z*S@!rcWpDRxX`bL21FE99iXae_5h`Ng|bJ*XB`5HswA5*^9=Cy_Nzx&B)N=aFOg&s z$wreTY?0)Fq;!%?jH(W&?1`>yNFVMya=_l+gO#MRS4nn2oL?Pj$%=AW&iYiffXi}b zGo;53HkBzJ%#`WHl!+=OthmG~K8_XdrDFWXf>O$gXIaIiUd3~);@PrrRR~{T70;Eq zRUy2}Dz5Y@j$6eipm?RSha-n@RbA{=-3p6g8DkK-pgL7u>Q%#9i(yp?!%8oPuZEb$ z{MQi4n5MqpTE+kNDh_0u+`eolH@TWqMP~ghi=nrRffe_+iu-yM54MU2dKCw);%u+t zVODXjSMdm|c(_+_fmIy#Dn8OGE<~}jX=7dtM_CM`IfLKql3f7>opqEK(*%o2PpM^` z7sF(WVIpTRJARj{7I`sDw-}~+6(3_2AMI6KVih0HtFx5C8$nR&xD+PUSBks}1)i<4 z;igpel_6)InS*|d(P^$FxPl9odd}<=pUR8G?b5VCoZK6ZUX4Rf;G4At{d%jhCu2=D8R`I1?#n)NI z*LW4*Y8Bt?ReYaSd=H9cd#dWsy%-*_7!1a+$MSmKm4D^M^svQrAf=WEy%-*|7!IW{ z9Q0y%#$tGiF<6s6`u>w%3@=*@FM1WfZWX`kRs4}v`~k1dvO+2A`|qbPslJbq=j{8R zAjj4BzqSN_$pqW}t*ZY@5sJQ_ony{QgL7zBvKg4`YT7xkSzzLihfvefNy|*Kwv;GD7nt6 zXbni?O*;}2{{Wxrt2PDKn}sS{@^yo`R>0W6VEB7CSa8-8SE8k@V|z-~s;|xz$*>A> z9MOQ@1Nsceg6Q8^xE{_?Y8^|QhjNq}DT6h}V;1=#H#s)+DdbODM{fQ}_>- zgx7MEdZ|=ZUrmvK0|{(gXXk7JG3z_M>}XFR|E< z2UQw~vn`_XpwgLQu(I@=^DWM~>CnyT0o@{ty)qs9f*#mUu-L0Wl}5Q`7EwGs(JG5* zMLHlS_5fs^#l9ve_etSgG@w`%>(isyU=h`)Ls8cQicJ=KQ#$s>9@yI~_7+g3v1W%w z)SjMbt3}iulm`LP0lU(n>+AvD$(GEM(pS6-L_XE;KQ~CThu?o53u#+_nir5{Iv}T} z1ETtN2bKCZHn8#Gy+rk$8C2R@5)EuD7MWtq$4sR5+6RtAYg-HTD^U!GxY*L?!c>=0 z)eF)=J3l?NOH!d-mI@7ZUv1TWWl(8ONMpWep({{H8V9(=;=Kvg*<(eCs@|9m^9|`R z1IwM3ygSmd-`)fJ-4^>#)3M*x1N$#6_WPhsQ>Qdz2~*sgPV7BBh~00AeZXy``-4iI z!)iv*wF>x^!yj;FqxyawR9aYjsDZ(lcW_8_GoPCtwkkRRIH^shst=m1ewmfcOs`nX zFM0Kj7lR6xF|Nt;1qWJTqvzp8E=ofEDrjq+ux}&S!+n1Y?lDihD95k9X+ilzP-$#* z2~*YAk-Ie|_cgL5P1%m=7`hGjz2mOoPgV_Yd+GI7P-*uRq$mH{y+ABX~ zZXZnQUL%m@sF`*=7~qez8m2IfEn{hH8BJ$PNIlAuIy&S%@Qvz$dxFKSr{Nx#j$8Fj zgraS(2AUjFT*jLk;#&{XKE6pIzU{CwrZ729lNUjb-1Hd9jtRNO%3=%rj5Oeyc_;7@xlGrg^}x zF0#N>rhr-Cu6n+^rggCAz1lr)HH&7l`bIm*wx*CZqInaoU1AQU z<8XTq?rRGvIN`CD*s8BZ_=_cU6V>e?*+|tma$1Gg2`04UR(DHovGnhPnjJN*oy|2} z2{GeHkk~q8r8z`1POOxAi>huDxhtexCh2syq*EdvvMJ1dQ|0OTc3uHn9m-5D1- zGyLj>mfZ8HYqnYoE~!VU>Uklht=n`YSEok3S2?8)_g(4ExWbv?S1-5f{b3LFUfOfL z*SV!$Ye~J@yRR|VxYf;elf`xeI{d^`-&ED>QBagxKx5j?)CatL<}P+KnkyRrMfpg(Y&ir^sdABA50ca;+tD zwWr8c-Xd4_AacDWa$OHp35%-Ev*KFsifeih*=&j2n5G?@Qrhtq){c$2p1TZHZSY31 zp$8P*7K+X^C^}M5yv+#nz#7lf(TF4OQwehc>izG$k;HNgdy zq#^2wp~{A)W*Wfv(A3tSuPQ%-<Wdxqj0KrKSU$3M=~yWHa7@ z`6h4we5JForX4Fji)sL#J!VuR7?s~YE}xwO_tp{m*u!1J^D#wiXp@*CU{cj1@|6y@ z9p(>xp`#7U_x7Bj`QDzB3kmYAEL9EV%ZpXl>=#T2U-jkZW7_d@v%-93GuvuevtkT6 z@~N}xivmVxw|vyB`XUf$9>d9w;uHR~YOtg3HZm}L0Hnjpzs#ixg< zK1U|-Otyqh3{%7M6E|6RwFm_sok&$D2#MnHKkkv^Mcq;+4GL4j=!w;2Z;w%71_~#6 z7Xo6r1+g?Ntm<-+l625#rh|UG7xd%2paZ}>3&0%6^D?MsU=zJ3scc)n?VxlBS;Kbc$|Dr|3p6MVq`7RekN~GBwTJ@-`lu zu{~ky0F3T>_|+{I%&v5BI@7`F@Pf118_u?{vT368)O9;$IS)>^hLsl9&E@^d8DSb) zt8p|W?OIgd>4bNC=VnLdNsu|oDRVbtcTnvj*4Ay#N_u3U zLY8tvI+-%va(56;r#Vg~IwvR$EoWKnvln_e7qDlBl|)BJTSr+_jq|Vqd>>eR?*VJd z3IO+6!b)d*O`SaH_ZPFnhoT9&GbjH^3klyxqOqk+pYLM`p_M~*drgyAKGMU_$vKb| zP<@}Us^?;hHg6U!Iyo;r6ZC}z@AEKDPHF97J}jD?$CeSFrNakqHDXS5-vU+Y_^GPj zpwG3{%gXVo56rzRW`D$+*%xs$TZ^V2Sj>GQ?&jznQ8uMtZ~|Ig*Orilu~RgC%}09Gd=%*A!BzE*rJSl}cA9QkLh}MRhA0>EhqElo z(Gg`!hg0GxGn+ChJt|P0Ml2sjEU^tjY?CE6 zk%p10U@^7`#x{#_lZnUE+#Az~b>Zm{V!JG{?P(ZYc(w_~9Twvjd$i&1hMin@8et9; z{nftgFi%nXwT42s{yT8rm)E{f_M3-RrH6kucLp9eG|Q+@a))wvGZbg#x986R(M(LyuvGE7ZqL`yCHT< z?1sYoV~1jA6kbqxXW=gke^vNM;cp6`E_|l&rNWmB-za>u@ZG}q3jbR8o6(PsW3^v>9sF(dYPluY+x^vyyt-@{P%@z`~R zUq>Gu{kK>$`h4{2!ndQRGt(W2eqHcf^zYHHV8S<}e=oQp_EzDS1@9I9vtV!Z^(Yzc zF9l?7G8dVS%=k!@415_(bXwux3dqo}M4y4_pN#G+By(Sc#-OJ8rr<7S;`^DA4>2=8 z%MAT04E=85`-LCE&}T+>7oJmiX<=@%37?Y~R8rU0(muYa{&%Z;so#E!b*)meAyLyc zzNqLzRY~%k@%0^vx~?q=_#a+0qqXk|6m|TKuWM=^xuJpO`Ed2CF(P&RF`9;EmgmRS zuZ|k&AV7lA;08YZ;hY;Z|6p zoS**s;GbWmFI+nR2*ZS_lZpzYzll?(PMbPq(&TB=q)bF778OmSyy;V>7ah%t*7sGE zZ@*QQO7+_8=a$d-=AQnyyz=9PcV6}4FJfB!;rj|zC8vKMg~~33xv*Mff3m$PgRDKy zZOy)eIeuYtqALK+$u7DQWpD}8Q`nv8K7rM*acOGN3ELB0324q5MKSx&q7(L~lJWzJ z^28XMhGG_-XamaoW-8{Q4=HBr5`CH{Sh5Zs*}4mH77cXV;Bk-ceFKh z)U*^-Ag8ln^tKt(#;jS`RM*kg*|wppV0lw#cTICaysNvusjXn*l<`GtmY1)oZE9Up zH)(u*b8`%j{ws=3Yv}r>W<}qS!RXrAQMab9oz~~^MA!H_MW53-rReBsieBH=spzYk z6#YbHvZ7Zt;9u<|6mM7b*>h2}a267AMXzY;s;b>sL3eOOd=}m1(JR{iFNb&wA>G!| zE9!fg0d%$@>PWP=b#xWCcfibD%8)(&&&Ezxe-c5zpM)Npqa=T~TKNF(Gi><)3=YGN zq9I~fvKJdFhK*&ZaXc@J&Gwn)h{~#cJ|#T=REQ3 z{I?pi#{~bA3fi||&}V{wHF*E{f2=MW^5+TTKU#Ofg`=~7^PdT><&8PD|AFPdj_b(%HYhWz5a9-i~BnF!Voy&yE9_BRcJIjHqo;8d!dkefkIxwW8+Fp3j{kDrm)rYSZhgzA42m2%b7pmU zNp;ceStS(n>3(TR7gW=^e{IhAg3BeSNq8EGmjQBLoT z!AvTr)1WwMT_Rlty)l0H*@mLNzCLkCyCxUbCT6PXHH@r zQ3#yI1>*G^CUA%)@aP4z7SEeiS~k0c>C`!MWJP5YE{kT4EG-qxeK|8;>H%|hfs&c6 z>e@-mPBsS(R_|QBHSzoS*vTdF`+w26d(@FWrP0DtzM!O{ymH=x+0b$xJ-yUg(>!zP zY&r#ls#D9lH*83B%$&-t*VGA%34lj&fZbRvlDV2JiDmOk7R|1lUpfa8XHLO?ljJK} z5>_%NpqW$ZB%P1oBK<<-MoZ+>c~uK%FPuNS9Lv(~)-H*qH)mN!CtS+FFNY{Kb#0w= zF4HSefX2KMYp2Hw6eW292$J;sR{aiKUO=R%1QToPB%7ALkoh>#UXA*b^cw(!h}NeJ z9F&bsv`gv}L|K8>Nj@q`9ht3cz~h%rp-&R&+qt;ZVzM-a&dFBV+qOC>pCZaY9xe}I zfoW3W`)-}MG3Ze0X`;NAC_e+GsZ<=4n>)Ikq|XrP9V2il!m8LLeI!SzYu~^hb;FY* zuodb5TcRB?0hdi!qV_*<0n`6cPRpL3wP~Lv+VhC^N{RLfMq5)$=ck;O+Tb~&Rf=$V z+@wVt{Fc$yHP^J@4!WQ|7u3Ha>TN{*9;kC30}8+IksS5W9ChIDY@Q-I?zQXqJ#h`3 zh|Ac1iZX<_RFg}`v-s`op07WPbiEX{JWuqmO~U1A&S0&{C$E&LXEN&6L<1dVaccTyw3mtcYodMy)WaSdtTNg7C?ND}>279^({b|4K>iAm z|7032-wY*m?wTv8-b4_bQGkZ#rvlyu055zLy7+hu!RFn~5@ej&Y z7i2SqTNxwX4r=IXWOo?28rOjD4dQ$8cw7R5;P1>2)Ol!t%@U90ImGcMacr20%NTGB z;+_-FW=vZIldRD7;Q1r*WR>8u2s~pS8|?Q@3#zk%zJWU#M=KT_SQg;DUPt@AMQlq- zak&v}M?fjxtf0CX=uT&Bo!G-jrlXqPCYItdTpk4rzD>T7 zt*3FhQ{4xS4~XO46LHxRQj{5Fe?91f?FRP8-N6EL~RDz8rgll9I&~EyG=;l9Hlj6H6wRtP-67!iwM=e<9I7yA+paaE#FK*x*25 zT9CX7-Dfd;crNOwX>V`dUftBv-rd}pAo(jKsa8!S8lU!4@Ry|DW&4yQN3X!;v(flY z7i%Iv>muqxwDF0S;9A__%UJqfN&4Ma;qn-cHBzK+fb>n(^we}sM>X9Gv z{$33A0}%Ze5G>%ecB{tN+x0loXciS1PdQgP~ zy#!Wyj;xaR6I^}{`Tf?Dd}Uxc%!x(uyv~a5=4O&J*NIm$?b87HI}&mh3Hb+v3@jo2 zm4OuyVi|G?+gEr%VtBY?k|}>rqWa&3OJ0$p?3~L?`D9=9`MykF+;c&%s@q=IoG5E* z^$;iHWE7J8

    JB>$nG;qnFK52tYj`mTc5hD6u0R_s{nh2RuPat3pOJ$~+8cqdFS<<{#oQ5z_XlN(gd6Y8^Znt70#sV4+OfUNlWdE6D|AJ%>nWQMEl9y4% zzVe7#5m8sc(S9x0vjktx*uwnFvmQw}{YcK~QON!9m$Kk%14(Vk>Ys zKz2ABp;r*%v+l>`KCCv6VM1}@sSbQxmN>hnuF=a$rjdD82t%CShxg>iV2IC1Z1jI{ zDVc&n!WR3iEEeab*Z_J9rf%#Kj4v-JFOq-k-;YZGi_(>{5&9{^gLUoY_EU38avaRo zPx&;L&koDQ?7>bum1G}QI2eU-ex@>yo|j*eU`H$STH2dY$>W1bz~lX^o9mmlRCgh# zh2;!P;i8rlOfNE$KlN|6nCK&RfoquRr5znL+h^h4S62cDueRnddj)Q=0YXVXr31qXmU`9j(aH0$xa;nxM8Z8Avt zff!*?G4?vh+aGeaj=WkD%=CbGVDS)TLq}p;J3ijimuLE%q9L~mk2I#I}!rlSxQcS>|U9?rD=KWvf%wdmyQ|e8m z%G;Won>w4?TJdBK<>f-1IC}^fn?|Ng06BcQ3=QaEu|RJ;S{5iSOob+Il8|d)h7I*y0H^F$`}&A`3-YgG+}95U3Ta6@j~+0_P{05k z1fa4qBAO$j%_Hrk>Pj=UDnzC zrs0c(b#3k2nK08$_JQGM#_$$QO1D1P%9MKqEEB-;vAV9Y!NIf_Ot&zmgL(GMJP&?U z)792NZi!BYNrJ{ktVBwo@H1fPr<~^O1Z|yNsl8yB%lu+Il3U?*ChU6jQ`X+5kDkYD z{FDTVkFPc$u{0t;1_tSV${i9h+d$Z~z;45T7}SA(_J_YV;Ss*xyoHhi%Z^Lq4|ClM;WW(dTubgU7cg~hlMv3{+-&1Z(dCa2UDnoyQM;g@ zaJ2J`a2a2Vfqsw>R$kqT6@DIKN;XP?j$b@1{rI!0gl4Wgot}au{Ybja}?n zMjXBnx>h=MTbStVtZCq5R0*o1Z2Kz?hunv403(C!t03LHeYZQS18#*QZWghj`V z1_OJqi(Brw(3khs5Im@~gUt?08#@v;^(e_@`n(GdqJ1YaE~L87!Z=j#7@}xaxSv(^ zjjJlQMir_*395dI=CY1s@Z^h-cNpOnmh(tm#qypNi_73Ew%14-V~HF+%k-jsWai6l zCs^FwDJ}8Ru12ndBlJ_=&Et+$TzqVIYimtQqMqHp)^VDYXm4t5pu@1+n6W}Me9G#CoU@y{WCD4^yVUxm{zz6qIm!aQIxtZCpDo|a$rLMZBtE;1_7H{8n78m0rzq>h6YUUId(@oWC zjFHK^nC%vQCkse_$w<%irASX~!8ubkc6|vPrF3}JazA6;bJ(n??GeUuMJlkGhK3G& z1&ZDF@~Z0)W4!z@8Bx>Ij3JQ9(8anZyiTsh%wyJjma+N|hZPmQ#HjO9t56G8SmWGGf)a3F$;@qI#!pzn*RnXiG^4y>QDHK!X-pHH4d8%?a}FSSN|X=Q9J zE$!i+kB_^V#jdk>+!Kk(=rvDF^m5(qE} zvWJia2!teLVH0%(L~y}<#a&!$TU)nYEsFbYYpc|)wc5JZ)@p67T75syIp^Mc?wvc4 z`Stt$*C_XF&-0wm^PK0bcbT5bnjU1R){Zt|sfe&JjTevULqVQ%8Pl}e-#hA9p+(gtVoF-pH5@pvA6+2X;tYZ@&~f8CvMkL zes5)!$Un?NJnV&!6c9hos1XjpTg?>W223xJKaj#Dic&1ns}SNz%DxfBKb1X`k>Amh z&!5Q1ugzbFO?W<=mnge7pH5QpF<`=15=XMz7&;C~kQp9TJBf&W?H ze-`+k1^$1tKxHHmP;O8v^Aq1Gm1BCZ$r_wln7Es&>(i8_^sV%*>VcnIt5eypudPNv zzrIGvxEAa^L(l5Xe}Xtsk1YE2%D$z0%Cd~C-nW*0ls_C%`pvYgiZWbELcPJ-06P3` z8RAFz>u;?7b>IT?TB;WzCF9ya)SqM4--s-#KQYp;D5ZPP%ra{!mu8+z<_u<7&d|n%uQ4`LQ2N9JYdM}tq(F`G$Z%Go;{!BM|x{t^*Tf`JavX+ z1tZsK5@V1vjh~tYtza#t__Q**mV^m$3&a93;^`o60~eS#5mJPd#4oi2akRIdZz66- z?ty(7pXCqjt$ow$5XJZ{0wd})ppoxPSBxfF!CFl5X=QXR8A6CVAQp%bKU&0n!8HI} z2yzIiNXE4j`pwWw`UyW9h$8LUzK3>4`|}%^T1h|rg5F{J3G1>B{CsU$N6Cr(z0WdNlFAPhoS0P%DHM8O5-e5x2B zCF9yu04Os7#E_*OkO7n>0hmSr3P1<|h^GTU0~eTwQpE@<8P{e2z;qM9Fl1@_`yL{D zC+NPeF})vtoRIynIdwrLziek#amh@=PzYLJKs+4`$Ab&Z$5Gt~DH+#J28LNC26~}U zJ4axk8#l(RetXX4o3>Z*7VYnZ~8+- z9q54r@pN#k0T-AXsD6Z$jBDQk$A3&5Ymr4b&R`h+lM2K4gkc?MfdTP!Fl+!9nAcO? z2q_uY{8=+}UzVSe5%okGK2q_uYa)DuxiQ!^o5r+N@!=O|c1`~!$ zKno0rr-R{oaDn+csv99C<5~n5!X}0rkj2{L39~)Isc_^IjvGM_9Ehib;~==ed^6RL zkdkq22yhf+=`j<^EyyJ(1DQDr959TSBPop_LkZQbU2!k4&r%|B-17O9ksVg7stY0v6)wz`7e;VE!q= zK}gBCHUhBpEPc2M>u1Q-p6q{!<{9?(o}m*ITCN$x%@}4v%s?Xv%FjU$D2S&6lSm#J=ql*FzE7$#@wCz&vQ%ZXk=pp|85t)iLe zp14+?#kM%cNltL1;p%fB@Kx{_li}=#GmY{rWU@ugXt)%W9--1QE1P**DJk@BbZ8RF?6 zdmCI}{sSRGNXfW12gpt~Vf_(V1Zx9p>XTDps2~jQfEE}KPY1)F!3E|&QQZhB8P_U- zVV;TMJ!CP{oNbzBUMd{(3CH`O2M)y3!SNBe!2BWAkC2jaEe;$DO&lL1i*T%9wpf@7 zLlt581hl|_csdyV3NA2zN_8WoB=#)8u*k&lH)Iipc7|b5Dh!JW!)Krc2E^0B@CCTQ z{5jQ)kdkq2889q0G5iBrtUb;(+hb`e9LovEm!Jm@#M8m?Ex5q^4b_j3l5wpTI98cB z{(~%r!`i8=VttmTGrm)ySQ#!Qs|m+rEKPAeWiL+No@CKrz-kk`-)6 z$E>rFko5pNkRhH9vcBK~b00#4kdkq&9mv{DSpAU2VC^!!r7abX4#LqN^uU35IyiE` z1?CU}!a>QnwhcJ8nm7g^i{W_O#IZFMj_rhFAn1Vu@pN$Hf(y)p5D*SZ#F|}I8G-Vd7uXl#M8kM0~eU1R6jyW#Lo;^`n81}-pbga{!eFN7Fpr_S5mGX) zT@DPFnHa_)i!kuL+-0dSTtOJdgBBPNPY1(^-~#grR5wCO#2E^0BFcn;2E~mN?QZlaH0t^RD4AYRse8Sqx9ZZGeR>CnI^uU35Iyfr8 z1?D+aKSD~zwR?f%o-F<6CX~6zB`AC^caH;x@pDH~>M{2bs(D}qD#X)4wE$dTo=<2H zQZlYR2vkOv{tFY;LgYI4a)z{*`$Z~P4-u?5cmWIXbYLw87nn~WI0z{j*B%9|!&&+x zCafjM)fUM^%wY!<;}J(vGT38;Y$@1*4Doc3tpFF8mlGm{l#FXn1KCqq`jaNImB@7> zd&&XDc+!!SkUc}lYQPR;h^K>WHMqcBONbCsGOoP{WG`gt&zs2Vkn7xZzF=)SpHBtq zB?46sPJlu@9Z(y<1?Kex1|cQm+V24Bh>55PS>*D3!*?VVhSvzgM$iHS;^|;$1s9lG zsBVOmjB9TK!y6`sO~@h)eB=8@DhzKChBnXw1LEmmI2BxA-cEHRq-0$C7#Kdv(mym| z?BGPFA<+Kf+H`&@Hk}_j!HvcWl(voEIort|6*mch1n;hOacW^ z2Jv*1*$XZ(pN)W&p=4b92FiS$rT^PhW*>6dsA_FGzqSC-3flO$BPsQPZwc8sU=hTbn*oVj0yEC$Qk@b$|E8tE1UQhZ^bl?@S>gB~~#PY1_U z-~#iNR6jyW#csdxa0~eUDrMeMPGOis93`#?;MSP=;<|Db+%pl zStfzb%JhM9SEe$Wt{_@f)vZ#ktqK$^%dYYZ>M|-TSqvnrfgNEQ*c&RtBoj zU|15nb^uysHsYn60$<5d;>Id&)HP((#N~qN3WVCKY*7fSnHKarEtt5H2DjMY#h`j6xSYyeICo!9~CC5F&@pP zv+l>}Iz&$J*1@^=6X0Kk8WA34>rjpLm1-RfU5~{OYJ4hNe^S)gU_8lce2T6yIbqfK z4EWceMuch9xV}Kr=|$FPhoL3udf>Jut#fgMSTF zZ9s)E4OE*e)lQ(=9M^sWR4)rWTO1WTz}Xi1Y)SwRroky*cA&8d@NyU<;P*v-3w&FF z4`CYkPOnr?1HRL-`UAcr+4`&5`YQtE8OAGAvt1z}GLBH5KVZB{Ax{N-%tEgLK_Y>+ z1q#H|K!Gp8u`y&90-#~Zxb_why_v1Qk*&Wj5GClG%Xpn?Ml18CqpvI)Z&DUB7K`C_ z7O=g+5He~%Yex?A_XKkfhl%)6!Ym3_szWN(0>B#**Yw~FeRxnmKFF6ZL$#4X8f=we zPwm}<`wPbhZ=JqBYTsZG#Q{+~+*MquYR1SQSTBf{v1`c))HV!eM3@G?<15wUfbV$R z)B?UyLA_Yu8?F@#e0!!|94)rMX`?)|BZ53I%#+-m9T_})XI8#~2deT*#sIhu;0V(I zKB`hJ2Jlh1@de=Hg8EnieDnckkBLE8{1A)s4_<0x8E^@SHqM>n8%}yE)pQl~imi~K zmvUtKiqWhxv-V<^nkE`&0(2Y$9TBFX38beza*IVnlUNp6j_ z5_gVY){)ao8VPzSN2Yh^cv8@*I!+b}PUZ@hB`G-B ztxhIyES@jH=J^i5WiG&_06YbN5vBonYNc8Zz*FPeGyt9&)XN3tX&m#6B+TV*%*IsK zn*(x7a3VJ;hFc$rJ%rO>zm8Y4_Y<3{YLpm8I1XwZ1MPqVw5nsoy2C7X!g)j|Not0__P<6(&2B4}B>U9FxW^U`XNw%(YL)7Y7j)W|r zaUv;85XmEsylxN-Qn3d^N~uykfs`}#T30KsfxWiCUI^2$*Qu52cG&CGxV9elY7FY@ zguQlfdo?B5Yn|IVTBF;70gV&M>T{x0nx$lrM3_<~8KP<_Cm^?i!|R(|_Syh@od$a$ zOv7FYdf-58Z(ui;jBCxX-9}-!#75$%aNYO&J}s9*&mZX108_w3y%O7UtUCa?x_{ zGul(uu+>?EqxS7)nb@>J7?bhO5eb$ZwO!A1BmO&^Ol zPIYKzTcY2@fZ}sZluk-{cXYZ-&(laxI@g1qh^M0`9n67QKBtRoJE7;9K|K-F&oH&6 z<2h}2(BaQq`#nKzhvh-^BLhalp`r|Yj|p6MkF$~loRLz%Sxy0XJB~j~crC#@JBW8I z>`B^jTwxp9JmZma9ucQLyMqwNCVqA?g^-OK+dKaLo4Kp!Psvnb z6VDIEskhw-GH#N+L3BE^Q_)BGjWea*<1mkrTGzd%uELvlQ7hksN~*e51xoe@i$uM2 zV5;rI#9*HDk%oA_(6$7}&UET#Dn-Yt9PN4DL%_LiuXc*$8ga=1Cfe9X7Lqq*U3kK| zrgE|;oYQ5MP6dTY{Xc*pwRz8RB5({O=b2@)>2DFHFWMih@}ntkrL?aI&5}-s!$-@h z!`+F1oQ9Hd?P7Gei-P)vLHz==!`+1f?NYA}cX?8OxiDpax!hDlHuGgk0xn1?;4-HG ztHa^5=6Jj8zwL0BdUv>=LOA!$D}xw}xHYaY`HhQM2ea3;yvQ-0I;>=*R{2U( zWzqPTP`|qykkHtOr_gGMLZpo;^XFIQiDv1kdkrjAWV95P`@dt-)LI(Arx>` zZ}%SGZVRF%OxL2FuW>VZleFdI?6(GSdT7$o3dy*UpBr;)7&pl&hiz`{!fv-Y%bYSD zQf@aXg*)Ctw!^pB$##gRW4puP0`nsX$aa*BYd?bR?hNX8n1*{4xsD|ZH^YyU%y6f} zOYe|V4h4Q}Dj?j4ofh3iT0DlTpatUTXz>)d!2BekM@Y%Ib~m*6X;A-(sm0UC#a_W) zcyTR$o}|T3W!%P3#2|Yqe#;W9ApstJtbT6afR9DGDBR7xWSZ4_O6( z@g}M=9u7j*P0=!TEjdIwzJ+|~h z>W8hJ`QglBXskWLGBR=dgJ%RZPC`3q2T3n0!?B|l0anqm0 zu<{t$?p-Jd+aZ3GwtE6x!*DMRHX9b#UW2`U7u1gg^;d)XE5d4p+8Yjkc*UNnxmWOF z(<@%}E;fDRh0+E3_|}yEUF~#z&xS7$@G>^OpM<%c=EZ4Ad=2rjJHw|B}OHHHh1Jk?>(~N>?5T;?8ah2*=m}XpD`x8v_Zcu+m*kwGg<-H(mX4-{* zcFTB|DOgR55l8$T$519CeJ|)l`ez`W0Hg@hKzc%@S^}ge#I+BB^n;-OzCe1S_P*77 z9rtQKu==o^9o2Zg)M#wsDWp)BcaRSj1ycKQdM<|gzl)w1B++w}$@KOp{}Bvx5)6Yd z4a1aGs--YYSzP-I4D(4)|5zBNT>IGDFrRp4M+Ldt0vacGXBP|>^ht_xdUtlzq<33D z$aiNKNH@tpg<+<`FbLBy%*;x41`IPZu6+i>{4J>eRTyTL_E%2}Xn*s}jtX+O1yYd1 zFkHOb0)pP14a0DHw*^wr%ZB+o3^N;sL70YND&leNA27)mLH%=KlDWLQ|1)VAlppxf zzF_uo=QNlFA(GNhKtnW~r7={=ZLJ zCUbGr7)jzpRb<(uGDlV4n@d+-m7`2GVTfhzcQAE5OpP!NQ?IL3*TU56@S&OzK2#Ip zkDN7Xz7Tu9*Fq>VY{-6*LjxRFLS)z)`vYtP90=ioO#nlf2C(Kzbt8Z^<2y9~mJ!ms z32ZIS#~U+TK-rkn%_FnI>Gzz^)<@!VW>)yUDzw#>7@e7(724L3_?(#)!fu(cTPy5_ zFb%tPRI2T;TSr{$1-tbO={-XFF~W46S|1q3ad_U7S<2Q}>*31qo9F1;w7wzj7*}Z$ zc|?-`Jr3u8kil>C31LnQ(3zPyvEQ!sH*2zcW0y6ZVb# z*NmAb!8^2I$l(fI5udJwyiIMlwb01UuuOf1mSY;gE=?l$Hgy*aek0^IHG85~8)(*M zJ8+k^+2-zo!K*fU5?34KGWkH$&_<3KGfkd2ix_fUX77rD-KsVQksu>T*XYDZ$jD~t zTrK}|7K&L|=ti}c=K{}UG6q(ggMr>|iPJ4KgzOKmb>xL0lHFU2 zPRtJ(gRP`Z_Ze=rQ6W9Y&kw`ssTaFnnNMbOW>zB`XM1D3NYD-Os_sSkA@NQD-T%fr z1(8sd-s~iX^i4Pe8cVS2$W`d@B z#eB7Ke9{s^el%Pg#>PYH1@gX@+C&slcT6fOWL#cF^1{k-S67JhS}KYn8pBi6Dl^5ZtEM!#t=eDe4Pol)U%?Y zrns^?eA4X2?v`p}JQb20MF5bTz^Tw}1YoR7p)oFnB<>%QcRR@&7c$0rDa0~)k-_S4 zC`5N~d2bl+?hVE`5|>=JeDG(CmT06VkZBwqINs%fBgq5l_Az=p;_3AEyTJu!y3I-+ zNXfW12_85xq)#wC@Mp;78^aSq?vu?4?hdX^ba!4^4~^5yj?3v&=q>2wc03ySk~D!w z%8~InHfJYD63+M=(3QFAtbofmLW$uE0qM+Pe5EKPdt%6Fm z(3pW~X3tOQpd8nd>CmVMHb9t$4MyNy6xd({o;QaLDnk04kbZJVpB>U?h4h)i1|zjf zhYe<0FhqfAgOl9_rVVDf3rri#aTl02nC&hwZBStq;Efog(qV&numPQjBTT~v_l0N`xDV` z(S%hYGy+cE5mgfR&;-Jn`&rB)Lz0#XQ_$iG_>DN3j6L*|M4nt`3(rh0Oj1m$Cly-B zJRVSNi5}J2tP&I&4PYYEW*7~SqI)6;N*2NcPJ{;_Ov3~01NBqj0gFO(DscEG;9BZSMuC>t$*m5pxi7*XYE~NLQD%FK}%>uSu71C>jE#usl zbxF3YaociLk}WxjWJ^vW+fvd>OM?8MuTGyD?b$67&0FrV>@7Y^fGOINNZrG zl+@%IwrTjpXHThr#0fz_o(7j|8%!~h{ka(1{y!*YrPdVE>Rko|U$|{F%WbsA z2C2N+EVpZQ@VA)dHcXkHK6TORJd$zj3ymhK%h*U)zFn%OQD5FV$|P)nLcDvou3yKCLQ7JY%f2ZAt-zOWYGYd~LE8`nC~7dk{oSjVUNElJaShiky7 zh5_t-bn>I==Bbv(8ExlxGMZ$`q8wAs7T1)s87k9P9}uRY@+SJ?16~-5YulmnwvfJ6 zXx+xO-r?5TMrGnOwoya>kParb2me-+-=W_Qmwu;0zs=AOVH*0`?`fS5{Z13g?a&fp zY&$cAHw#U7G{_xKBQ%m9JAClWq~Yx}Zl|3;Y$w#ozj0u$uE=B}(;iE_?U+QyzR=() z(P6}$E+d`+BeHj|U`WK%FeLlp1DNT!8VI3WaabtsRQEa zSotDwf%!rNWMxXmwR2(Rb4(M{cY?T0&QG$*IZSlZ4EkBc0XSvg8_UY69bEg7aNXa2_>*c#8`0bee!(KLRtI z2U8PJGOk^SCb%G^?>AfFI;#~f4QZ!X8}o-Sg7C(<#GP&ImuEKP0y*VS(2? z9?~x}?ZnJKe(V zgm^l3x`W$^PN&IEl#FZF!cNziMq;PW%t+TKb?IwZm$p4$;~91r^exF0d0i0syHSs^ zm)A;Zrg9Wq(rFaqw{BLMv$>FAcUO^N4;wbTE{FuYB=MeryOQGq>~Q_-T}^r&H7R|? z5w4GTI!*d>-lTM@PEAV5xONko^u~~WgW0O|qL6k_%!Rjv+%KNo;8^zFD5o4tj$4wa zMSAs!_nupm{N)C(Y4M=fw8%4UM`8m!XSbV=Wx6T(nCvCgVengB2EUmM{tIA-!4Xf# z;Pi?NnCU$rGB_pU+MO`?9U=YpkbawK^Ft`m?h0wQxfB)|wz2`{DaIWkbPE=>U5#!| z`yG4F#KR=^$06s7UAN0kX51#H_*XxjBBi=q(hoyAZ_b}2H78fZ#%=tV5cA{O6iV8S z7vOa!E1#UhHhRWgB%C$5TeeiMP2~_TRhwk~KvIQC8T=g4;Xgld`OlBYf1ZG`;6I2T zrT_etxM;dYz~*w1#EqRC+}OzxA5i7*1y9Y{Gxd?ExrTfyT8uBxMkmh5i5s3JCgF!5 zoc3&#e-ZInnw>d0zKHlplzkEL27(esV^MsO4B$_9H8$;K;sJ=*tLZKzaU4SpQBfr;Ax~cDpP@{3HTEN{|dn4i*AWm2>gN^ zd|$H~|BU&P8eE7lJ$?BtPNt_h1LzS?$MiI&f|>4f5_(GFbF4tWC`Yf((W^}K^q!?r zl?pvA&i_K_j|kHrA@qwZ^wko2F2puGy}4Pkm<+!-J?QlMA|TTMOVBBa({DgumZLAt z(U+Le52L_Xk_tNQUXr0Nv!E}PpmQNM^hY7NWCcNAkskCX!3fASAQ5y*#jsBMo7uHwgJ%B=je?&`nnu_ZH~Ui zRNyx#HrAw4UESG6twhBuu$B8QYAtCZ z<(kq{?ss5>Qb$NBgp`bH9Z;@4M{mo~H|6N9IeJTu-khUvG*zUxHI0p_R4jywetRjouqnadaAz-MyUJ; zQW+s7@ryH1eQS=sB}dN*&jcbo%K4y%e#!kXbVR@gQ<21Xy>jtg zuUx$@S6`hg);u)yX=`)&!Th>h_YS2#_kHPmadmRau|rvx>%Qm1UIy11bMet$>4`V_ zV|2XE^*>PO>Xdb^&vm?^V64rRe7VB$vbd{^?S!o-ULS`EIF_bd&yOc<$aQ^F&uGl0 zJp;Xh!C%C1$(QejZE&GaZpk4JX#Rh^N!~A3-I&7u16GZqC&=vc~2r zZc5UnIhXX{Z*Oi)Y3xldaILxU$=38xeaumH09AXg-X@{i>^8j7E+aA8ywgK1HTz!j#>(nIY+$tk6w#X?5u2WsOwiB-H>EZed$8|bzotCTbV7TyE zV!p2Yf=0a4cNjj{0P$-|fW(rDT1uz&ZfWdm>U@?5Xid>^{Fn&yc?bv9kvO9(y+t*QJ zJ#xQ}Mx;_&2V5GHGKRAZ_8pTwQ!j~?Gz~^YG%Euw;z!xz7+U&WaWK=*krP@<#GuwKa(~GC0?MY`jk%08B@1 z&;s#vw5R|VnCB3Bgp|ZD6hn(adHS(=`oKJWK%SnHr-$O5JdeGxvWRLQDr(Pke0`Dg z(cx5up93;q+e(~5a-9;5p;SwBqMpZNb}8MLr+il5VyaIQURIdr`uH7p>tT7Ww=uay zc?Hl_8^}ZBusp}A#nA@}lRb4Q&>4d;YFy7o4LV`FDP{!OFoI7+eHF#)WVq5VZY*<> z(s9qh7{`CSyYuku+s#mERoWoYhRU zL+FHX(yTq0)SW2QJ;7Vuk|cFU9*w$_lGGiQQr$^Tl^m!`oMnbx`46ajLbAGHsLLDU z#ISqqGgd}tOq5d&JSUoX#LjO_7(FBc!SF=H)9Ge0aKRJH;fZBoy)>*(3G0)?`bnlU z7EtRrmMCR1EUwA4FkIPmt77VEr81E*#gUq9_afsYJMPeMnyI1iA@*M8R8n&YR}=Ac z)EvguoCP&!hV>a?eY&Y&AxeztmN!v@nzP^>Z)ZF?$r){S8bFfzo-sq#-=XKpPCZ>f zy68xAl0B=)sR18bl!=x8214#G=j(@-}%J( zBlvX$G>%ge@5P`U=7;slus$!W&kgGpW^0T@u{JBr2kp`1N%Lep+}+|~_s(*@Oyn?d z+-2Yj$>B(^;-m^IWm$$pvN6}iJqp|<3&|=A)3eGrFrxOc2*@gw#O)VYWl>nK4(nB> zJ;tNJsIt6smE@gEy}fful6Ttd-riX)E9@}d5|{C8Nd%+|?_8SfofDjztYaNTQZ1Et zI?x%599S*yoCx71i>VzJr`HZAf)VyV0RgoGCF9yEv_nl;Um4a{g!ScNeVN%BC!rXv zBzflw84vf))k)r2BNI6cyxL{pWiJ1koK)dTS(f3DY%F(iPXTvHEm@^DJ*!LwBdk%5 zfUH7EJnIjuG=%l~uwG}{V;Tyybz$dl(%?W?FQ=>{)ahU}>MXam{Zh)b9l}@_#wZjJ z0slp@wKNyZfEZ|pcsg^z$>0L>Yy_koCGoQY&~9T`Zwl)h!utBK-e~GL2gO=z80zyO za|{hi8)dDG4USZ!)Cyg3H95G}OI+6Gy@Dg1hrnnh8?b4xg;cLZ9#ls>9o6Gp;6enX zIwkSoI#lln>+NB^Ev#=c^{zshwk2$A@@l0vk4y{oDa5%oY-}OKY?GvI3)`D%dJfFo zIxQyB?Oui2sj>iIT}GrkWIVQmnBtZb&1qq+9TMr6;mo->DI;L)U@m1ct{}$KO-9<{ zh_~>#Bs;^+xRMypFd6L{GewoDIcta$Ryv)4uvr#XGS0A4P>?lKu=tMDpQbFL*$SY@ZB zBw1ybm4a2)5eckfXOdOUlu0%a$?mYRl`@S}=^8M$vBY+ku#T6SKna=6#Bi46hjij& z>?T_4#Ha-{c;qVMrs$q9zJ5zzw7d!L)sCa_fLC-DlTF7>2CF91kaAe{jvR(dBB2MF zAkwUZ-b%lTy@!gRWHWX8c0fRAO2)N)==6KT`q^f8--=wjkFsA7 zm??iWVlU~&R6E;@Rq)^aI){*L13Qo*o({6#fD6no6C#9^#J4$t?1QlWzKQI&$kjd$ z8y{fI;ivZG;y2Mz_*YSWn5BIp7t=!$j$(*@g@pXY>Hs(r`xxRZeqKUuiIPvG60p8X zte=Jj!*HCgDC~k`kyzrLO*Kyk1cz5qZFSXdMHUrOoHbC6HeuBia{jh z;cNnrD}5S9CG6>+_W|WRcC@jW#w61Dff$G$h_M5V-;um)bNPCtoE(uGNfu^{m=6(; zlZb~%#6w)fYYtEO0VtS0wb*RCIV_ZO5&4{XuB`M`sZfb{T{i-7vVi+&&Gz+ zh)lz>FJgRdsWsNdB;^*{x#DKaL$Q)C$T88or3xIpkYfe&iBvyL1Q;UTU2TKTjHb8I{V1dzA}a zzKoW1BVE2gh0q1@qtqn>Tqn|Zcj>1pwPS!kQ-D87>xu7m!7)bTg6-Jkcu}v2kr_cs z>mD(BQUv8$fk2^x-<&S%7&5VU1Y)KLK6M=DE5-NlyvQf@iQsUfIh%S&X`+TYT;B+K z$G!Q~)$Yxwy47l4i5hx+@;gj#<&RWV1~(u?=HV{u!xVop`}s*IvO5&FIAGW<46 zuSikv2>nLLRBu@9xyc@|$~4#!;ZfQ#AI_jxs>5LbJ+A#6_ghB^JC2AOqtMn5#3qh~ z!uU?L^S8En87WJC`#>RD{oX=pkf6b2ly*=IB#W|OrdN6l-!tu3LtrLcg>Vu;gR6TG z8LeF=SmR**0phV<&|Fx?ks-(9=zJ`!STZI8D~(CZN+tLuRhXe9uKgHR8XwWe2}7Nr zO=1q0_-v4(l+tKRr`w6~@C+JowdZ??!Fdiep`yW*O%b?Bc_-eQ1xp3sJ`kfDDG$V8 zxs!}Z%=Tm+nnJ$JgpczlW=n#w$2jt0aw+g(@(`23WQmJbNMAA}W@)KZnu*ef3XSoR zJ=2V#qv?W5%OnEYK0Sd>O*05UvERL)DwXp_CwMNk#{izU+IU(V51+dAqFW12Gu&H9 zHQrkYMAIa48VK(#1fqLb`8`xVLn`N9q+LQ&;X^Scv4B|{;{Y=gBtArjoh3NR$j~Jd z(O>98#R${rFLNu^3V6a?{6YjgVM;`wEIeVJG1+Q0Za`xSGInK}7OX5OBgZRCt2$J* z5dSdfOvNx)F6yc>%B{M1TazWFOzt+6S-|E=Hb6{+!qq^4Fb#$6m-A-;!E}LOnKmop z^vdZLBD->O5!J^KB>C$KZMIj>`5_mY73s=nR>ieSNHu#!$-GEWMMPv_Y%lMeQ#3DP zRFVwC3vg`WT$&D6Yx5&gxirXeUg%{`A@E2vFmuSdc+rB0F&}ogr*Pszl2fn6%?vUH zb-a6Nu(WyBXjL+WZ90P~njt#(S|Qe!V$4Q8_ZAveq>DG6b>1{Wl!ct*(L~lbvSd+R#Hc4Da#O}8 zu8zQ?`AYF5S_|-MISq{hz33e#G?=IzaoXCI)JBR{bF0voN(GnHvh3reXxXAQtedlU zzu~oL^)zM*_7PGT{t{FH?`6rjb}y#M4Z?%j$3%?{mJ8c+mpw~uBu^7>O(UL8{hl8k zeGv7xMf6P(y)~k@MD%783w?c5>x>vJY&K}NK-pukIr_3!x3tX>!zPl(JEJr85X@d{ zju&l-7@K*Y+$sy<3o$%JZVctmR2sD0<&@Mb_;`YzX})*V3Lzq1F=;Cq>IPB*$ZV#h zNv32=q-ZN|R`%+apq;dh4-W^q1dKFTJHf{jlgY2RrrdqZp^m+KEY&0iYi2+5M1tPi zl1R7)#wIK^9~&wHu^@hobZxU0GGygM0c{jfJ6nJz=;dWeG}rV0p-JfNu%luVm09Yu zx5jK2;Lghi3bwL9YtXx2v{K`X^%qG)*^m>rN8;KH(R~lQOR+#r(61n31lx|jN?R88 zMNRa|ZD>A8b;&Q#hj(R`bdW3DO}xG$#M9|B_ks(|^wJmgSxUxnq=YAaBl?breyZ79 z*pCV(BE}BZTTbn&x6nIa+L;lpqU1z3~g|P6F3TkG)@pxpP;fXgBYT zkCLrT)O&buq;~;~Gl2n1yROC2gZYw)C2t&0>s;WbSHHBgWLT2pSlxwVuUn#9i+Uay@#%i}@?P$OV7h0|oi^Q6i#OvEZLzNXI{41{Z4hH3Di2 zO2)Ov;Gg><`re3sw&|b0L4kH&#MsOH^K2mGYdVk7oSx{`&W{*2k?f!6IsDVb5Zb3E9|YT^%Vpz_wY5KT}4a{Lq^G^w0XERy|$s3Z-D$m1k^T^ zjBCF}+gu;fuZ!r{nr*{ghtY14+vZ@T=%$Fs5^ZxZV%);o=339TxtZCL-W1VpjTknK z+%}BgY8z|Vr1w0u+m4P&>H$#cucT7Z?GfWP-k^6d5Pu_icbb{08uahPYh1?;zob>y z^-_y+sh%x5@ke}|{+#N9!ZxXEPWS=@RmW6imfRI75+WW7lewn%b8Qa0KpMpXw<_9$02q!029?Y%dnANFc{l|&oF`PCto ztSFb|tWQ<*xh!WkLwaIAQ<;)}Oqp&>nW$3Aic78HlUVUyD#lMoC}pg8npIrpRXo!w zo-PYlh4496@hq8J6~Zg6;tH?gxK+FW#Y>bu965xm>U^*27F!I}j6vvv>QuGLtA-U8 z!_p*%C0-2Q^f!(9@BWf8O?|(&ivQzP9LO@ceOXR!ay6%l%=(!YLxzii75B1=dw3Q1 zvx@t86$h>2EU)5$R&kD3@nEZXkXLcORUGyz9%>aApxD{8F)xPWEQUhP;5WNuM?gVm z9p=R}(qht+Y8mduFvemS#Tm?w-=V6-UJMf~hH+lSCs@UkyoyV$;>o-^ODVkQ1f@<& zVp4r&$eW?SvsE_Sl&QXQs@rZAZ}loZ-74PURlLV4-i_jTxTdm@QUd8uW#rL3Cwx_E8+>7BMivj0B)b}l~=Uw?1 zUQCZ!OgLC@)$)iJ!!s7cQ%MX@dNI6YF}%PStVthz|9LNl*DQu3Ud3-&#cy~Oe_|DX z#H+KcP{#WHhe=GT?=Q%6_We(hcLHfN=N+0;F42IhJ> zR&mg)c#u^*(5pCX6%Y0*j#&sgM7 zxyhgOAb;K>e>PiL;}-U7tMsL8Wn=ADsa#cGL{?+7BkKhZ8Nan;yzEi>npJuvTj_8J zdllqZ5?fP&s=k68tcI-|rtt4A32$aA^-`&-zL6y1buS4cf~I>94=QLTQ+{GUR@SO| zd{B`TXPM*J06wru6WR~(gphi7W;kB zrm1%vr&By2bGPiJ=8!y%sV(F zI>_gy$E=DD15R?2sp=ypt6yei!~W|Q^Y6TR$C03dWsGa`eAR(g*yt5_k&BX0zX96S zPT02*>_NUi2KSh!U6kWj-?pIqKB%l)=Mtu>Zy|R}Qtq2%OPaFXQ`#Wkd+r+kY}N3t zmtOA#l~zwte)S`Z^8-?z*C(2R(5veE)M82b%*LNu%%7kucC5oHHi=MGKejAowGv5Y z68>&U_*;r5{%cC^LB4;w?eL`~?u!)Ke4a|1LB4O?(!RE&eU$>-zfywptKV7N-*!P2 z2${<{U&wT*WHV)2R2iW1GIF<2%2w(PW|}u5p)iFR`7ES)qo*y*vEu7t3v=WjlM15h z>l;!!wzB1}HFE?hORU4K%swHdv7W6^t*ji-ZF92bQkI)_5X%k-TVBZAKA6nH;Cd ziy=pDdW@APgj{1~i3NUQ3h)zBfrsIyTijF0FYGZD6L>i_xFe?wcpMp}A=mUZ1$8+n zCR1x#(*~QqW5^~vsFP zU8GdNW`PwJ`?8SNOr@$zQ(%OdS6j@hQg}>FD&|4HcDMhnwWKw8`6Cech*-)IHdmL#%uXx@hA4l#$)ak#w)_qBu+obXsnY}L0>_=_cU1J&&ySx?nC za+-zL2`04U7I#Z-w)F3Snr*es?M<~E4PwTTAfep``F6OuPqnzWg_QQX+NOpjQg2b! zts-}^l*=UTbW1wJl5|=~X{)Vo1QG|6>Pw&in-yAdIIIO=``qI8SmJhjiNjg-4`_>x zQ0nT=cUO0wRoyu$oCP2+b#e{zUE%rVl$K7@kzAb` z^&W6a9pt;(opF^j!>?Xx)q8mt^
  • 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

    #>P@w*p7{DM0W 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%0Deaev2Ssf8Y^+Mw4&=^4vc>5|)#M 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

    |Gr&5VYY+NNsKf3iiZ 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⁢O`l;kJsU50Rp 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

    |}ooeg0yc&xU zmI!AtJE!rO^3J>&%550&(i9j4x(!oZ#I#|mXp;@gtZaa7R(3ifI|h-(ugl1ufyfR- zWDERCz82XDJhFqMBAaiIY(Z3HIg2T>oW&ejlaCS3ZiFooOQR`{jcT++ZLlqBgAlce zh#G!fMr{hBHVjc4>Q{znQ9C;_!p{RY(vOXK{fVQL3pTcA7c04G3 zPGponGL!|@bJjEkA~%ZOlO1z^}`;F$-;DGTO!@tzncE z%H_DFf!FZ(OyR7knZhJnze4qAYyd>R4WMt;MYy2RDy)J!TeK?6sCAZY)H)N9pihe6 z*JUIwKqSsVB+m9LQ?y{z6w0-Qa$TWZ&x3KUJs1X99lm-trNw`9P3LxypQ6iK+&

    r@c8gA2@?2`SE$jO%$oto1db7UB-%UUX90 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 z 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%0DOmuTClDgFmL1}iw1vXVkFPoy4tT>}539?}C9fr( zY@wM%4r>`pMm%+mzWS#6V12frJ$w>3dsu%EGj)M#HV49WvmV$YTJKRuU$8+natUL> z==nR;;$P$UH(}z(uMXaG=n&J#T#2Eh#uI7^`T`Mjk3)K@nugJA6wL=_n1(V!)??}* zR3GvNe4e0^x~8yv2yPkGp$}i}Zwz4ySPTPX_qc_+)G#)i^l7H?H0H-J4kA#I5h&+U zM@;Ro;T}t8K3Y1X6qajdY{886+oVqej9c5)mSC$F=yND$)yt0JhO!fBYwL-zd3m$@ z%xG)8mvv7RcUh_wCsC>t7nG{3N?B=>O4YQ|nW>Ic?Xoh>^B9Xa+;~lBc56%|JEI+0 zgpD|;nq?$ZH(56*ia|Hn)!I!B67Qv%{TgHOh3(CWWHvtqmn9cX9QZhMdRDuZ^sILf z>4D;n^;H%d@vH0t#6pgR6pk zd|`4CMM!m{TxWVt(AtjbG7Er-q{)T4>L!QYWE-63#;{Ih;b!Wl5MRqu6FG_0G}fQE zquE?YQ@!(MvI#t_Hlg&_3%yPht`?h+i`6D@GuZ^s77LI|jtIjmBf@-XRA+(tTDBA} zn|r_C)6i7!_l8kVt4sd;UM&32Or)a8<>7c|JSDnmMoovwhx*ze8tmLXv?L3Tg=SJ< zgbaJ?Bk0=I(MpQi)Mubkd!NzNTcs$5RyVzRuzH{{h;C3eAKnkM`pCj>br%(Y)tMzE z>*Qtgq5c+P-5zUMGz*h$u~sU%RCfnaAJ2`opdOz{`xs>Z0;@G)Z*@Zi`#N&%&Omj|c4mx-k~A)&GY!aXY>+$Eq)ouH?# zx~b9ISXb-8+%_g@#QuypJ;=F!_5h#CEIUiEG*<8Pc^d*@%%;(9oytTnQXk0AU?@N< zxVf@o6N0j4S05apaQYI}VJ0nJE9wL*T?Wrq5tcJ#H$@kOD>6j~p78D%`=sSi{)R@ZxJDZvO_+tXyg$r7H#yejOH zU5Z&u4`U>h?!-#BK2$c;>+Y^!xXPVV;*lmqjfrJl1{?mcJbmaS&tdqVno;3n?C9dF*J=Rl@yZqe3-4^aWC?)H zT-Zmbs>T+@eqQ07}XR^T2~XQ3tyVAxi=z_NOWNhbqG^p@fYQ&`<_GN?40e1-`!Rl$*~l2uRyGnFBKpr&av8*6EP zJk~l3JN>W)!ZN*uUU4K63PlTOf{hY&=mnXxtO-wAHN&K; z6j?@n)(xvV>baI>maIN3cUpYt5fQgSP@-UwDje%tm}<}B$<2jTkruY6Hk(8$-qzNI z?LSsOnY1bqk-DmrUMe!;qx)pU2R=FCLpdX7eBk*r@gWH#KCxxp`hG>sL^fg9Lb$1Z zGnFEb7a!#@BqN((8qgo~hrGVrbK$KbgC%K@Y=ms|G&D3|^G_pfhcW8Y+MW!wg*kGU zLP*H~s;ecZsb0t-8Me0glg0IcQzk2D;AWqlNG|TR_sFWri&+(4gSWam=;@3uqvhJ4ncDYxYD3kv{@PHO0w* zdT(t*1e-TJY%}8)fYf^$!oh~dptr_gm1RmgW3buijbJt&+lmcpKOd~Y6O4H4>-;rM zD!(lWS6>s1V4ufky5vTIFzR$uF%dK2ydP#rV^=**gΠ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

  • o+cG0JbVM@K@XX&;t;4fD6Sbkn>s4ea-xRbM@ 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 diff --git a/ios/include/chipmunk/chipmunk.h b/ios/include/chipmunk/chipmunk.h deleted file mode 100644 index 59197476..00000000 --- a/ios/include/chipmunk/chipmunk.h +++ /dev/null @@ -1,245 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_H -#define CHIPMUNK_H - -#include -#include - -#ifdef WIN32 - // For alloca(). - #include - #if !defined(WINAPI_FAMILY) || (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP) - #define CP_EXPORT __declspec(dllexport) - #else - #define CP_EXPORT - #endif -#else - #include - #define CP_EXPORT -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -// NUKE -#ifndef CP_ALLOW_PRIVATE_ACCESS - #define CP_ALLOW_PRIVATE_ACCESS 0 -#endif - -#if CP_ALLOW_PRIVATE_ACCESS == 1 - #define CP_PRIVATE(__symbol__) __symbol__ -#else - #define CP_PRIVATE(__symbol__) __symbol__##_private -#endif - -CP_EXPORT void cpMessage(const char *condition, const char *file, int line, int isError, int isHardError, const char *message, ...); -#ifdef NDEBUG - #define cpAssertWarn(__condition__, ...) - #define cpAssertSoft(__condition__, ...) -#else - #define cpAssertSoft(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 0, __VA_ARGS__); abort();} - #define cpAssertWarn(__condition__, ...) if(!(__condition__)) cpMessage(#__condition__, __FILE__, __LINE__, 0, 0, __VA_ARGS__) -#endif - -// Hard assertions are used in situations where the program definitely will crash anyway, and the reason is inexpensive to detect. -#define cpAssertHard(__condition__, ...) if(!(__condition__)){cpMessage(#__condition__, __FILE__, __LINE__, 1, 1, __VA_ARGS__); abort();} - -#include "chipmunk_types.h" - -/// @defgroup misc Misc -/// @{ - -/// Allocated size for various Chipmunk buffers -#ifndef CP_BUFFER_BYTES - #define CP_BUFFER_BYTES (32*1024) -#endif - -#ifndef cpcalloc - /// Chipmunk calloc() alias. - #define cpcalloc calloc -#endif - -#ifndef cprealloc - /// Chipmunk realloc() alias. - #define cprealloc realloc -#endif - -#ifndef cpfree - /// Chipmunk free() alias. - #define cpfree free -#endif - -typedef struct cpArray cpArray; -typedef struct cpHashSet cpHashSet; - -typedef struct cpBody cpBody; - -typedef struct cpShape cpShape; -typedef struct cpCircleShape cpCircleShape; -typedef struct cpSegmentShape cpSegmentShape; -typedef struct cpPolyShape cpPolyShape; - -typedef struct cpConstraint cpConstraint; -typedef struct cpPinJoint cpPinJoint; -typedef struct cpSlideJoint cpSlideJoint; -typedef struct cpPivotJoint cpPivotJoint; -typedef struct cpGrooveJoint cpGrooveJoint; -typedef struct cpDampedSpring cpDampedSpring; -typedef struct cpDampedRotarySpring cpDampedRotarySpring; -typedef struct cpRotaryLimitJoint cpRotaryLimitJoint; -typedef struct cpRatchetJoint cpRatchetJoint; -typedef struct cpGearJoint cpGearJoint; -typedef struct cpSimpleMotorJoint cpSimpleMotorJoint; - -typedef struct cpCollisionHandler cpCollisionHandler; -typedef struct cpContactPointSet cpContactPointSet; -typedef struct cpArbiter cpArbiter; - -typedef struct cpSpace cpSpace; - -#include "cpVect.h" -#include "cpBB.h" -#include "cpTransform.h" -#include "cpSpatialIndex.h" - -#include "cpArbiter.h" - -#include "cpBody.h" -#include "cpShape.h" -#include "cpPolyShape.h" - -#include "cpConstraint.h" - -#include "cpSpace.h" -#include "cpHastySpace.h" - -// Chipmunk 7.0.1 -#define CP_VERSION_MAJOR 7 -#define CP_VERSION_MINOR 0 -#define CP_VERSION_RELEASE 1 - -/// Version string. -CP_EXPORT extern const char *cpVersionString; - -/// Calculate the moment of inertia for a circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpMomentForCircle(cpFloat m, cpFloat r1, cpFloat r2, cpVect offset); - -/// Calculate area of a hollow circle. -/// @c r1 and @c r2 are the inner and outer diameters. A solid circle has an inner diameter of 0. -CP_EXPORT cpFloat cpAreaForCircle(cpFloat r1, cpFloat r2); - -/// Calculate the moment of inertia for a line segment. -/// Beveling radius is not supported. -CP_EXPORT cpFloat cpMomentForSegment(cpFloat m, cpVect a, cpVect b, cpFloat radius); - -/// Calculate the area of a fattened (capsule shaped) line segment. -CP_EXPORT cpFloat cpAreaForSegment(cpVect a, cpVect b, cpFloat radius); - -/// Calculate the moment of inertia for a solid polygon shape assuming it's center of gravity is at it's centroid. The offset is added to each vertex. -CP_EXPORT cpFloat cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat radius); - -/// Calculate the signed area of a polygon. A Clockwise winding gives positive area. -/// This is probably backwards from what you expect, but matches Chipmunk's the winding for poly shapes. -CP_EXPORT cpFloat cpAreaForPoly(const int count, const cpVect *verts, cpFloat radius); - -/// Calculate the natural centroid of a polygon. -CP_EXPORT cpVect cpCentroidForPoly(const int count, const cpVect *verts); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox(cpFloat m, cpFloat width, cpFloat height); - -/// Calculate the moment of inertia for a solid box. -CP_EXPORT cpFloat cpMomentForBox2(cpFloat m, cpBB box); - -/// Calculate the convex hull of a given set of points. Returns the count of points in the hull. -/// @c result must be a pointer to a @c cpVect array with at least @c count elements. If @c verts == @c result, then @c verts will be reduced inplace. -/// @c first is an optional pointer to an integer to store where the first vertex in the hull came from (i.e. verts[first] == result[0]) -/// @c tol is the allowed amount to shrink the hull when simplifying it. A tolerance of 0.0 creates an exact hull. -CP_EXPORT int cpConvexHull(int count, const cpVect *verts, cpVect *result, int *first, cpFloat tol); - -#ifdef _MSC_VER -#include "malloc.h" -#endif - -/// Convenience macro to work with cpConvexHull. -/// @c count and @c verts is the input array passed to cpConvexHull(). -/// @c count_var and @c verts_var are the names of the variables the macro creates to store the result. -/// The output vertex array is allocated on the stack using alloca() so it will be freed automatically, but cannot be returned from the current scope. -#define CP_CONVEX_HULL(__count__, __verts__, __count_var__, __verts_var__) \ -cpVect *__verts_var__ = (cpVect *)alloca(__count__*sizeof(cpVect)); \ -int __count_var__ = cpConvexHull(__count__, __verts__, __verts_var__, NULL, 0.0); \ - -/// Returns the closest point on the line segment ab, to the point p. -static inline cpVect -cpClosetPointOnSegment(const cpVect p, const cpVect a, const cpVect b) -{ - cpVect delta = cpvsub(a, b); - cpFloat t = cpfclamp01(cpvdot(delta, cpvsub(p, b))/cpvlengthsq(delta)); - return cpvadd(b, cpvmult(delta, t)); -} - -#if defined(__has_extension) -#if __has_extension(blocks) -// Define alternate block based alternatives for a few of the callback heavy functions. -// Collision handlers are post-step callbacks are not included to avoid memory management issues. -// If you want to use blocks for those and are aware of how to correctly manage the memory, the implementation is trivial. - -void cpSpaceEachBody_b(cpSpace *space, void (^block)(cpBody *body)); -void cpSpaceEachShape_b(cpSpace *space, void (^block)(cpShape *shape)); -void cpSpaceEachConstraint_b(cpSpace *space, void (^block)(cpConstraint *constraint)); - -void cpBodyEachShape_b(cpBody *body, void (^block)(cpShape *shape)); -void cpBodyEachConstraint_b(cpBody *body, void (^block)(cpConstraint *constraint)); -void cpBodyEachArbiter_b(cpBody *body, void (^block)(cpArbiter *arbiter)); - -typedef void (^cpSpacePointQueryBlock)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient); -void cpSpacePointQuery_b(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryBlock block); - -typedef void (^cpSpaceSegmentQueryBlock)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha); -void cpSpaceSegmentQuery_b(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryBlock block); - -typedef void (^cpSpaceBBQueryBlock)(cpShape *shape); -void cpSpaceBBQuery_b(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryBlock block); - -typedef void (^cpSpaceShapeQueryBlock)(cpShape *shape, cpContactPointSet *points); -cpBool cpSpaceShapeQuery_b(cpSpace *space, cpShape *shape, cpSpaceShapeQueryBlock block); - -#endif -#endif - - -//@} - -#ifdef __cplusplus -} - -static inline cpVect operator *(const cpVect v, const cpFloat s){return cpvmult(v, s);} -static inline cpVect operator +(const cpVect v1, const cpVect v2){return cpvadd(v1, v2);} -static inline cpVect operator -(const cpVect v1, const cpVect v2){return cpvsub(v1, v2);} -static inline cpBool operator ==(const cpVect v1, const cpVect v2){return cpveql(v1, v2);} -static inline cpVect operator -(const cpVect v){return cpvneg(v);} - -#endif -#endif diff --git a/ios/include/chipmunk/chipmunk_ffi.h b/ios/include/chipmunk/chipmunk_ffi.h deleted file mode 100644 index c0248410..00000000 --- a/ios/include/chipmunk/chipmunk_ffi.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifdef CHIPMUNK_FFI - -// Create non static inlined copies of Chipmunk functions, useful for working with dynamic FFIs -// This file should only be included in chipmunk.c - -// TODO: get rid of the reliance on static inlines. -// They make a mess for FFIs. - -#ifdef _MSC_VER - #if _MSC_VER >= 1600 - #define MAKE_REF(name) CP_EXPORT decltype(name) *_##name = name - #else - #define MAKE_REF(name) - #endif -#else - #define MAKE_REF(name) __typeof__(name) *_##name = name -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -MAKE_REF(cpv); // makes a variable named _cpv that contains the function pointer for cpv() -MAKE_REF(cpveql); -MAKE_REF(cpvadd); -MAKE_REF(cpvneg); -MAKE_REF(cpvsub); -MAKE_REF(cpvmult); -MAKE_REF(cpvdot); -MAKE_REF(cpvcross); -MAKE_REF(cpvperp); -MAKE_REF(cpvrperp); -MAKE_REF(cpvproject); -MAKE_REF(cpvforangle); -MAKE_REF(cpvtoangle); -MAKE_REF(cpvrotate); -MAKE_REF(cpvunrotate); -MAKE_REF(cpvlengthsq); -MAKE_REF(cpvlength); -MAKE_REF(cpvlerp); -MAKE_REF(cpvnormalize); -MAKE_REF(cpvclamp); -MAKE_REF(cpvlerpconst); -MAKE_REF(cpvdist); -MAKE_REF(cpvdistsq); -MAKE_REF(cpvnear); - -MAKE_REF(cpfmax); -MAKE_REF(cpfmin); -MAKE_REF(cpfabs); -MAKE_REF(cpfclamp); -MAKE_REF(cpflerp); -MAKE_REF(cpflerpconst); - -MAKE_REF(cpBBNew); -MAKE_REF(cpBBNewForExtents); -MAKE_REF(cpBBNewForCircle); -MAKE_REF(cpBBIntersects); -MAKE_REF(cpBBContainsBB); -MAKE_REF(cpBBContainsVect); -MAKE_REF(cpBBMerge); -MAKE_REF(cpBBExpand); -MAKE_REF(cpBBCenter); -MAKE_REF(cpBBArea); -MAKE_REF(cpBBMergedArea); -MAKE_REF(cpBBSegmentQuery); -MAKE_REF(cpBBIntersectsSegment); -MAKE_REF(cpBBClampVect); - -MAKE_REF(cpSpatialIndexDestroy); -MAKE_REF(cpSpatialIndexCount); -MAKE_REF(cpSpatialIndexEach); -MAKE_REF(cpSpatialIndexContains); -MAKE_REF(cpSpatialIndexInsert); -MAKE_REF(cpSpatialIndexRemove); -MAKE_REF(cpSpatialIndexReindex); -MAKE_REF(cpSpatialIndexReindexObject); -MAKE_REF(cpSpatialIndexSegmentQuery); -MAKE_REF(cpSpatialIndexQuery); -MAKE_REF(cpSpatialIndexReindexQuery); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ios/include/chipmunk/chipmunk_private.h b/ios/include/chipmunk/chipmunk_private.h deleted file mode 100644 index abe56395..00000000 --- a/ios/include/chipmunk/chipmunk_private.h +++ /dev/null @@ -1,766 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ -#ifndef CHIPMUNK_PRIVATE_H -#define CHIPMUNK_PRIVATE_H -#ifdef CHIPMUNK_H -#error Cannot include chipmunk_private.h after chipmunk.h. -#endif - -#define CP_ALLOW_PRIVATE_ACCESS 1 -#include "chipmunk/chipmunk.h" - -#define CP_HASH_COEF (3344921057ul) -#define CP_HASH_PAIR(A, B) ((cpHashValue)(A)*CP_HASH_COEF ^ (cpHashValue)(B)*CP_HASH_COEF) - -// TODO: Eww. Magic numbers. -#define MAGIC_EPSILON 1e-5 - - -//MARK: cpArray - -struct cpArray { - int num, max; - void **arr; -}; - -cpArray *cpArrayNew(int size); - -void cpArrayFree(cpArray *arr); - -void cpArrayPush(cpArray *arr, void *object); -void *cpArrayPop(cpArray *arr); -void cpArrayDeleteObj(cpArray *arr, void *obj); -cpBool cpArrayContains(cpArray *arr, void *ptr); - -void cpArrayFreeEach(cpArray *arr, void (freeFunc)(void*)); - - -//MARK: cpHashSet - -typedef cpBool (*cpHashSetEqlFunc)(void *ptr, void *elt); -typedef void *(*cpHashSetTransFunc)(void *ptr, void *data); - -cpHashSet *cpHashSetNew(int size, cpHashSetEqlFunc eqlFunc); -void cpHashSetSetDefaultValue(cpHashSet *set, void *default_value); - -void cpHashSetFree(cpHashSet *set); - -int cpHashSetCount(cpHashSet *set); -void *cpHashSetInsert(cpHashSet *set, cpHashValue hash, void *ptr, cpHashSetTransFunc trans, void *data); -void *cpHashSetRemove(cpHashSet *set, cpHashValue hash, void *ptr); -void *cpHashSetFind(cpHashSet *set, cpHashValue hash, void *ptr); - -typedef void (*cpHashSetIteratorFunc)(void *elt, void *data); -void cpHashSetEach(cpHashSet *set, cpHashSetIteratorFunc func, void *data); - -typedef cpBool (*cpHashSetFilterFunc)(void *elt, void *data); -void cpHashSetFilter(cpHashSet *set, cpHashSetFilterFunc func, void *data); - - -//MARK: Bodies - -struct cpBody { - // Integration functions - cpBodyVelocityFunc velocity_func; - cpBodyPositionFunc position_func; - - // mass and it's inverse - cpFloat m; - cpFloat m_inv; - - // moment of inertia and it's inverse - cpFloat i; - cpFloat i_inv; - - // center of gravity - cpVect cog; - - // position, velocity, force - cpVect p; - cpVect v; - cpVect f; - - // Angle, angular velocity, torque (radians) - cpFloat a; - cpFloat w; - cpFloat t; - - cpTransform transform; - - cpDataPointer userData; - - // "pseudo-velocities" used for eliminating overlap. - // Erin Catto has some papers that talk about what these are. - cpVect v_bias; - cpFloat w_bias; - - cpSpace *space; - - cpShape *shapeList; - cpArbiter *arbiterList; - cpConstraint *constraintList; - - struct { - cpBody *root; - cpBody *next; - cpFloat idleTime; - } sleeping; -}; - -void cpBodyAddShape(cpBody *body, cpShape *shape); -void cpBodyRemoveShape(cpBody *body, cpShape *shape); - -//void cpBodyAccumulateMassForShape(cpBody *body, cpShape *shape); -void cpBodyAccumulateMassFromShapes(cpBody *body); - -void cpBodyRemoveConstraint(cpBody *body, cpConstraint *constraint); - - -//MARK: Spatial Index Functions - -cpSpatialIndex *cpSpatialIndexInit(cpSpatialIndex *index, cpSpatialIndexClass *klass, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - - -//MARK: Arbiters - -enum cpArbiterState { - // Arbiter is active and its the first collision. - CP_ARBITER_STATE_FIRST_COLLISION, - // Arbiter is active and its not the first collision. - CP_ARBITER_STATE_NORMAL, - // Collision has been explicitly ignored. - // Either by returning false from a begin collision handler or calling cpArbiterIgnore(). - CP_ARBITER_STATE_IGNORE, - // Collison is no longer active. A space will cache an arbiter for up to cpSpace.collisionPersistence more steps. - CP_ARBITER_STATE_CACHED, - // Collison arbiter is invalid because one of the shapes was removed. - CP_ARBITER_STATE_INVALIDATED, -}; - -struct cpArbiterThread { - struct cpArbiter *next, *prev; -}; - -struct cpContact { - cpVect r1, r2; - - cpFloat nMass, tMass; - cpFloat bounce; // TODO: look for an alternate bounce solution. - - cpFloat jnAcc, jtAcc, jBias; - cpFloat bias; - - cpHashValue hash; -}; - -struct cpCollisionInfo { - const cpShape *a, *b; - cpCollisionID id; - - cpVect n; - - int count; - // TODO Should this be a unique struct type? - struct cpContact *arr; -}; - -struct cpArbiter { - cpFloat e; - cpFloat u; - cpVect surface_vr; - - cpDataPointer data; - - const cpShape *a, *b; - cpBody *body_a, *body_b; - struct cpArbiterThread thread_a, thread_b; - - int count; - struct cpContact *contacts; - cpVect n; - - // Regular, wildcard A and wildcard B collision handlers. - cpCollisionHandler *handler, *handlerA, *handlerB; - cpBool swapped; - - cpTimestamp stamp; - enum cpArbiterState state; -}; - -cpArbiter* cpArbiterInit(cpArbiter *arb, cpShape *a, cpShape *b); - -static inline struct cpArbiterThread * -cpArbiterThreadForBody(cpArbiter *arb, cpBody *body) -{ - return (arb->body_a == body ? &arb->thread_a : &arb->thread_b); -} - -void cpArbiterUnthread(cpArbiter *arb); - -void cpArbiterUpdate(cpArbiter *arb, struct cpCollisionInfo *info, cpSpace *space); -void cpArbiterPreStep(cpArbiter *arb, cpFloat dt, cpFloat bias, cpFloat slop); -void cpArbiterApplyCachedImpulse(cpArbiter *arb, cpFloat dt_coef); -void cpArbiterApplyImpulse(cpArbiter *arb); - - -//MARK: Shapes/Collisions - -struct cpShapeMassInfo { - cpFloat m; - cpFloat i; - cpVect cog; - cpFloat area; -}; - -typedef enum cpShapeType{ - CP_CIRCLE_SHAPE, - CP_SEGMENT_SHAPE, - CP_POLY_SHAPE, - CP_NUM_SHAPES -} cpShapeType; - -typedef cpBB (*cpShapeCacheDataImpl)(cpShape *shape, cpTransform transform); -typedef void (*cpShapeDestroyImpl)(cpShape *shape); -typedef void (*cpShapePointQueryImpl)(const cpShape *shape, cpVect p, cpPointQueryInfo *info); -typedef void (*cpShapeSegmentQueryImpl)(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -typedef struct cpShapeClass cpShapeClass; - -struct cpShapeClass { - cpShapeType type; - - cpShapeCacheDataImpl cacheData; - cpShapeDestroyImpl destroy; - cpShapePointQueryImpl pointQuery; - cpShapeSegmentQueryImpl segmentQuery; -}; - -struct cpShape { - const cpShapeClass *klass; - - cpSpace *space; - cpBody *body; - struct cpShapeMassInfo massInfo; - cpBB bb; - - cpBool sensor; - - cpFloat e; - cpFloat u; - cpVect surfaceV; - - cpDataPointer userData; - - cpCollisionType type; - cpShapeFilter filter; - - cpShape *next; - cpShape *prev; - - cpHashValue hashid; -}; - -struct cpCircleShape { - cpShape shape; - - cpVect c, tc; - cpFloat r; -}; - -struct cpSegmentShape { - cpShape shape; - - cpVect a, b, n; - cpVect ta, tb, tn; - cpFloat r; - - cpVect a_tangent, b_tangent; -}; - -struct cpSplittingPlane { - cpVect v0, n; -}; - -#define CP_POLY_SHAPE_INLINE_ALLOC 6 - -struct cpPolyShape { - cpShape shape; - - cpFloat r; - - int count; - // The untransformed planes are appended at the end of the transformed planes. - struct cpSplittingPlane *planes; - - // Allocate a small number of splitting planes internally for simple poly. - struct cpSplittingPlane _planes[2*CP_POLY_SHAPE_INLINE_ALLOC]; -}; - -cpShape *cpShapeInit(cpShape *shape, const cpShapeClass *klass, cpBody *body, struct cpShapeMassInfo massInfo); - -static inline cpBool -cpShapeActive(cpShape *shape) -{ - // checks if the shape is added to a shape list. - // TODO could this just check the space now? - return (shape->prev || (shape->body && shape->body->shapeList == shape)); -} - -// Note: This function returns contact points with r1/r2 in absolute coordinates, not body relative. -struct cpCollisionInfo cpCollide(const cpShape *a, const cpShape *b, cpCollisionID id, struct cpContact *contacts); - -static inline void -CircleSegmentQuery(cpShape *shape, cpVect center, cpFloat r1, cpVect a, cpVect b, cpFloat r2, cpSegmentQueryInfo *info) -{ - cpVect da = cpvsub(a, center); - cpVect db = cpvsub(b, center); - cpFloat rsum = r1 + r2; - - cpFloat qa = cpvdot(da, da) - 2.0f*cpvdot(da, db) + cpvdot(db, db); - cpFloat qb = cpvdot(da, db) - cpvdot(da, da); - cpFloat det = qb*qb - qa*(cpvdot(da, da) - rsum*rsum); - - if(det >= 0.0f){ - cpFloat t = (-qb - cpfsqrt(det))/(qa); - if(0.0f<= t && t <= 1.0f){ - cpVect n = cpvnormalize(cpvlerp(da, db, t)); - - info->shape = shape; - info->point = cpvsub(cpvlerp(a, b, t), cpvmult(n, r2)); - info->normal = n; - info->alpha = t; - } - } -} - -static inline cpBool -cpShapeFilterReject(cpShapeFilter a, cpShapeFilter b) -{ - // Reject the collision if: - return ( - // They are in the same non-zero group. - (a.group != 0 && a.group == b.group) || - // One of the category/mask combinations fails. - (a.categories & b.mask) == 0 || - (b.categories & a.mask) == 0 - ); -} - -void cpLoopIndexes(const cpVect *verts, int count, int *start, int *end); - - -//MARK: Constraints -// TODO naming conventions here - -typedef void (*cpConstraintPreStepImpl)(cpConstraint *constraint, cpFloat dt); -typedef void (*cpConstraintApplyCachedImpulseImpl)(cpConstraint *constraint, cpFloat dt_coef); -typedef void (*cpConstraintApplyImpulseImpl)(cpConstraint *constraint, cpFloat dt); -typedef cpFloat (*cpConstraintGetImpulseImpl)(cpConstraint *constraint); - -typedef struct cpConstraintClass { - cpConstraintPreStepImpl preStep; - cpConstraintApplyCachedImpulseImpl applyCachedImpulse; - cpConstraintApplyImpulseImpl applyImpulse; - cpConstraintGetImpulseImpl getImpulse; -} cpConstraintClass; - -struct cpConstraint { - const cpConstraintClass *klass; - - cpSpace *space; - - cpBody *a, *b; - cpConstraint *next_a, *next_b; - - cpFloat maxForce; - cpFloat errorBias; - cpFloat maxBias; - - cpBool collideBodies; - - cpConstraintPreSolveFunc preSolve; - cpConstraintPostSolveFunc postSolve; - - cpDataPointer userData; -}; - -struct cpPinJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat dist; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpSlideJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat min, max; - - cpVect r1, r2; - cpVect n; - cpFloat nMass; - - cpFloat jnAcc; - cpFloat bias; -}; - -struct cpPivotJoint { - cpConstraint constraint; - cpVect anchorA, anchorB; - - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpGrooveJoint { - cpConstraint constraint; - cpVect grv_n, grv_a, grv_b; - cpVect anchorB; - - cpVect grv_tn; - cpFloat clamp; - cpVect r1, r2; - cpMat2x2 k; - - cpVect jAcc; - cpVect bias; -}; - -struct cpDampedSpring { - cpConstraint constraint; - cpVect anchorA, anchorB; - cpFloat restLength; - cpFloat stiffness; - cpFloat damping; - cpDampedSpringForceFunc springForceFunc; - - cpFloat target_vrn; - cpFloat v_coef; - - cpVect r1, r2; - cpFloat nMass; - cpVect n; - - cpFloat jAcc; -}; - -struct cpDampedRotarySpring { - cpConstraint constraint; - cpFloat restAngle; - cpFloat stiffness; - cpFloat damping; - cpDampedRotarySpringTorqueFunc springTorqueFunc; - - cpFloat target_wrn; - cpFloat w_coef; - - cpFloat iSum; - cpFloat jAcc; -}; - -struct cpRotaryLimitJoint { - cpConstraint constraint; - cpFloat min, max; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpRatchetJoint { - cpConstraint constraint; - cpFloat angle, phase, ratchet; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpGearJoint { - cpConstraint constraint; - cpFloat phase, ratio; - cpFloat ratio_inv; - - cpFloat iSum; - - cpFloat bias; - cpFloat jAcc; -}; - -struct cpSimpleMotor { - cpConstraint constraint; - cpFloat rate; - - cpFloat iSum; - - cpFloat jAcc; -}; - -void cpConstraintInit(cpConstraint *constraint, const struct cpConstraintClass *klass, cpBody *a, cpBody *b); - -static inline void -cpConstraintActivateBodies(cpConstraint *constraint) -{ - cpBody *a = constraint->a; cpBodyActivate(a); - cpBody *b = constraint->b; cpBodyActivate(b); -} - -static inline cpVect -relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2){ - cpVect v1_sum = cpvadd(a->CP_PRIVATE(v), cpvmult(cpvperp(r1), a->CP_PRIVATE(w))); - cpVect v2_sum = cpvadd(b->CP_PRIVATE(v), cpvmult(cpvperp(r2), b->CP_PRIVATE(w))); - - return cpvsub(v2_sum, v1_sum); -} - -static inline cpFloat -normal_relative_velocity(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n){ - return cpvdot(relative_velocity(a, b, r1, r2), n); -} - -static inline void -apply_impulse(cpBody *body, cpVect j, cpVect r){ - body->CP_PRIVATE(v) = cpvadd(body->CP_PRIVATE(v), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_impulse(a, cpvneg(j), r1); - apply_impulse(b, j, r2); -} - -static inline void -apply_bias_impulse(cpBody *body, cpVect j, cpVect r) -{ - body->CP_PRIVATE(v_bias) = cpvadd(body->CP_PRIVATE(v_bias), cpvmult(j, body->CP_PRIVATE(m_inv))); - body->CP_PRIVATE(w_bias) += body->CP_PRIVATE(i_inv)*cpvcross(r, j); -} - -static inline void -apply_bias_impulses(cpBody *a , cpBody *b, cpVect r1, cpVect r2, cpVect j) -{ - apply_bias_impulse(a, cpvneg(j), r1); - apply_bias_impulse(b, j, r2); -} - -static inline cpFloat -k_scalar_body(cpBody *body, cpVect r, cpVect n) -{ - cpFloat rcn = cpvcross(r, n); - return body->CP_PRIVATE(m_inv) + body->CP_PRIVATE(i_inv)*rcn*rcn; -} - -static inline cpFloat -k_scalar(cpBody *a, cpBody *b, cpVect r1, cpVect r2, cpVect n) -{ - cpFloat value = k_scalar_body(a, r1, n) + k_scalar_body(b, r2, n); - cpAssertSoft(value != 0.0, "Unsolvable collision or constraint."); - - return value; -} - -static inline cpMat2x2 -k_tensor(cpBody *a, cpBody *b, cpVect r1, cpVect r2) -{ - cpFloat m_sum = a->CP_PRIVATE(m_inv) + b->CP_PRIVATE(m_inv); - - // start with Identity*m_sum - cpFloat k11 = m_sum, k12 = 0.0f; - cpFloat k21 = 0.0f, k22 = m_sum; - - // add the influence from r1 - cpFloat a_i_inv = a->CP_PRIVATE(i_inv); - cpFloat r1xsq = r1.x * r1.x * a_i_inv; - cpFloat r1ysq = r1.y * r1.y * a_i_inv; - cpFloat r1nxy = -r1.x * r1.y * a_i_inv; - k11 += r1ysq; k12 += r1nxy; - k21 += r1nxy; k22 += r1xsq; - - // add the influnce from r2 - cpFloat b_i_inv = b->CP_PRIVATE(i_inv); - cpFloat r2xsq = r2.x * r2.x * b_i_inv; - cpFloat r2ysq = r2.y * r2.y * b_i_inv; - cpFloat r2nxy = -r2.x * r2.y * b_i_inv; - k11 += r2ysq; k12 += r2nxy; - k21 += r2nxy; k22 += r2xsq; - - // invert - cpFloat det = k11*k22 - k12*k21; - cpAssertSoft(det != 0.0, "Unsolvable constraint."); - - cpFloat det_inv = 1.0f/det; - return cpMat2x2New( - k22*det_inv, -k12*det_inv, - -k21*det_inv, k11*det_inv - ); -} - -static inline cpFloat -bias_coef(cpFloat errorBias, cpFloat dt) -{ - return 1.0f - cpfpow(errorBias, dt); -} - - -//MARK: Spaces - -typedef struct cpContactBufferHeader cpContactBufferHeader; -typedef void (*cpSpaceArbiterApplyImpulseFunc)(cpArbiter *arb); - -struct cpSpace { - int iterations; - - cpVect gravity; - cpFloat damping; - - cpFloat idleSpeedThreshold; - cpFloat sleepTimeThreshold; - - cpFloat collisionSlop; - cpFloat collisionBias; - cpTimestamp collisionPersistence; - - cpDataPointer userData; - - cpTimestamp stamp; - cpFloat curr_dt; - - cpArray *dynamicBodies; - cpArray *staticBodies; - cpArray *rousedBodies; - cpArray *sleepingComponents; - - cpHashValue shapeIDCounter; - cpSpatialIndex *staticShapes; - cpSpatialIndex *dynamicShapes; - - cpArray *constraints; - - cpArray *arbiters; - cpContactBufferHeader *contactBuffersHead; - cpHashSet *cachedArbiters; - cpArray *pooledArbiters; - - cpArray *allocatedBuffers; - unsigned int locked; - - cpBool usesWildcards; - cpHashSet *collisionHandlers; - cpCollisionHandler defaultHandler; - - cpBool skipPostStep; - cpArray *postStepCallbacks; - - cpBody *staticBody; - cpBody _staticBody; -}; - -#define cpAssertSpaceUnlocked(space) \ - cpAssertHard(!space->locked, \ - "This operation cannot be done safely during a call to cpSpaceStep() or during a query. " \ - "Put these calls into a post-step callback." \ - ); - -void cpSpaceSetStaticBody(cpSpace *space, cpBody *body); - -extern cpCollisionHandler cpCollisionHandlerDoNothing; - -void cpSpaceProcessComponents(cpSpace *space, cpFloat dt); - -void cpSpacePushFreshContactBuffer(cpSpace *space); -struct cpContact *cpContactBufferGetArray(cpSpace *space); -void cpSpacePushContacts(cpSpace *space, int count); - -typedef struct cpPostStepCallback { - cpPostStepFunc func; - void *key; - void *data; -} cpPostStepCallback; - -cpPostStepCallback *cpSpaceGetPostStepCallback(cpSpace *space, void *key); - -cpBool cpSpaceArbiterSetFilter(cpArbiter *arb, cpSpace *space); -void cpSpaceFilterArbiters(cpSpace *space, cpBody *body, cpShape *filter); - -void cpSpaceActivateBody(cpSpace *space, cpBody *body); -void cpSpaceLock(cpSpace *space); -void cpSpaceUnlock(cpSpace *space, cpBool runPostStep); - -static inline void -cpSpaceUncacheArbiter(cpSpace *space, cpArbiter *arb) -{ - const cpShape *a = arb->a, *b = arb->b; - const cpShape *shape_pair[] = {a, b}; - cpHashValue arbHashID = CP_HASH_PAIR((cpHashValue)a, (cpHashValue)b); - cpHashSetRemove(space->cachedArbiters, arbHashID, shape_pair); - cpArrayDeleteObj(space->arbiters, arb); -} - -static inline cpArray * -cpSpaceArrayForBodyType(cpSpace *space, cpBodyType type) -{ - return (type == CP_BODY_TYPE_STATIC ? space->staticBodies : space->dynamicBodies); -} - -void cpShapeUpdateFunc(cpShape *shape, void *unused); -cpCollisionID cpSpaceCollideShapes(cpShape *a, cpShape *b, cpCollisionID id, cpSpace *space); - - -//MARK: Foreach loops - -static inline cpConstraint * -cpConstraintNext(cpConstraint *node, cpBody *body) -{ - return (node->a == body ? node->next_a : node->next_b); -} - -#define CP_BODY_FOREACH_CONSTRAINT(bdy, var)\ - for(cpConstraint *var = bdy->constraintList; var; var = cpConstraintNext(var, bdy)) - -static inline cpArbiter * -cpArbiterNext(cpArbiter *node, cpBody *body) -{ - return (node->body_a == body ? node->thread_a.next : node->thread_b.next); -} - -#define CP_BODY_FOREACH_ARBITER(bdy, var)\ - for(cpArbiter *var = bdy->arbiterList; var; var = cpArbiterNext(var, bdy)) - -#define CP_BODY_FOREACH_SHAPE(body, var)\ - for(cpShape *var = body->shapeList; var; var = var->next) - -#define CP_BODY_FOREACH_COMPONENT(root, var)\ - for(cpBody *var = root; var; var = var->sleeping.next) - -#endif diff --git a/ios/include/chipmunk/chipmunk_types.h b/ios/include/chipmunk/chipmunk_types.h deleted file mode 100644 index 7aee0c79..00000000 --- a/ios/include/chipmunk/chipmunk_types.h +++ /dev/null @@ -1,242 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TYPES_H -#define CHIPMUNK_TYPES_H - -#include -#include -#include - -#ifndef CP_USE_DOUBLES - // Use doubles by default for higher precision. - #define CP_USE_DOUBLES 0 -#endif - -/// @defgroup basicTypes Basic Types -/// Most of these types can be configured at compile time. -/// @{ - -#if CP_USE_DOUBLES -/// Chipmunk's floating point type. -/// Can be reconfigured at compile time. - typedef double cpFloat; - #define cpfsqrt sqrt - #define cpfsin sin - #define cpfcos cos - #define cpfacos acos - #define cpfatan2 atan2 - #define cpfmod fmod - #define cpfexp exp - #define cpfpow pow - #define cpffloor floor - #define cpfceil ceil - #define CPFLOAT_MIN DBL_MIN -#else - typedef float cpFloat; - #define cpfsqrt sqrtf - #define cpfsin sinf - #define cpfcos cosf - #define cpfacos acosf - #define cpfatan2 atan2f - #define cpfmod fmodf - #define cpfexp expf - #define cpfpow powf - #define cpffloor floorf - #define cpfceil ceilf - #define CPFLOAT_MIN FLT_MIN -#endif - -#ifndef INFINITY - #ifdef _MSC_VER - union MSVC_EVIL_FLOAT_HACK - { - unsigned __int8 Bytes[4]; - float Value; - }; - static union MSVC_EVIL_FLOAT_HACK INFINITY_HACK = {{0x00, 0x00, 0x80, 0x7F}}; - #define INFINITY (INFINITY_HACK.Value) - #endif - - #ifdef __GNUC__ - #define INFINITY (__builtin_inf()) - #endif - - #ifndef INFINITY - #define INFINITY (1e1000) - #endif -#endif - - -#define CP_PI ((cpFloat)3.14159265358979323846264338327950288) - - -/// Return the max of two cpFloats. -static inline cpFloat cpfmax(cpFloat a, cpFloat b) -{ - return (a > b) ? a : b; -} - -/// Return the min of two cpFloats. -static inline cpFloat cpfmin(cpFloat a, cpFloat b) -{ - return (a < b) ? a : b; -} - -/// Return the absolute value of a cpFloat. -static inline cpFloat cpfabs(cpFloat f) -{ - return (f < 0) ? -f : f; -} - -/// Clamp @c f to be between @c min and @c max. -static inline cpFloat cpfclamp(cpFloat f, cpFloat min, cpFloat max) -{ - return cpfmin(cpfmax(f, min), max); -} - -/// Clamp @c f to be between 0 and 1. -static inline cpFloat cpfclamp01(cpFloat f) -{ - return cpfmax(0.0f, cpfmin(f, 1.0f)); -} - - - -/// Linearly interpolate (or extrapolate) between @c f1 and @c f2 by @c t percent. -static inline cpFloat cpflerp(cpFloat f1, cpFloat f2, cpFloat t) -{ - return f1*(1.0f - t) + f2*t; -} - -/// Linearly interpolate from @c f1 to @c f2 by no more than @c d. -static inline cpFloat cpflerpconst(cpFloat f1, cpFloat f2, cpFloat d) -{ - return f1 + cpfclamp(f2 - f1, -d, d); -} - -/// Hash value type. -#ifdef CP_HASH_VALUE_TYPE - typedef CP_HASH_VALUE_TYPE cpHashValue; -#else - typedef uintptr_t cpHashValue; -#endif - -/// Type used internally to cache colliding object info for cpCollideShapes(). -/// Should be at least 32 bits. -typedef uint32_t cpCollisionID; - -// Oh C, how we love to define our own boolean types to get compiler compatibility -/// Chipmunk's boolean type. -#ifdef CP_BOOL_TYPE - typedef CP_BOOL_TYPE cpBool; -#else - typedef unsigned char cpBool; -#endif - -#ifndef cpTrue -/// true value. - #define cpTrue 1 -#endif - -#ifndef cpFalse -/// false value. - #define cpFalse 0 -#endif - -#ifdef CP_DATA_POINTER_TYPE - typedef CP_DATA_POINTER_TYPE cpDataPointer; -#else -/// Type used for user data pointers. - typedef void * cpDataPointer; -#endif - -#ifdef CP_COLLISION_TYPE_TYPE - typedef CP_COLLISION_TYPE_TYPE cpCollisionType; -#else -/// Type used for cpSpace.collision_type. - typedef uintptr_t cpCollisionType; -#endif - -#ifdef CP_GROUP_TYPE - typedef CP_GROUP_TYPE cpGroup; -#else -/// Type used for cpShape.group. - typedef uintptr_t cpGroup; -#endif - -#ifdef CP_BITMASK_TYPE - typedef CP_BITMASK_TYPE cpBitmask; -#else -/// Type used for cpShapeFilter category and mask. - typedef unsigned int cpBitmask; -#endif - -#ifdef CP_TIMESTAMP_TYPE - typedef CP_TIMESTAMP_TYPE cpTimestamp; -#else -/// Type used for various timestamps in Chipmunk. - typedef unsigned int cpTimestamp; -#endif - -#ifndef CP_NO_GROUP -/// Value for cpShape.group signifying that a shape is in no group. - #define CP_NO_GROUP ((cpGroup)0) -#endif - -#ifndef CP_ALL_CATEGORIES -/// Value for cpShape.layers signifying that a shape is in every layer. - #define CP_ALL_CATEGORIES (~(cpBitmask)0) -#endif - -#ifndef CP_WILDCARD_COLLISION_TYPE -/// cpCollisionType value internally reserved for hashing wildcard handlers. - #define CP_WILDCARD_COLLISION_TYPE (~(cpCollisionType)0) -#endif - -/// @} - -// CGPoints are structurally the same, and allow -// easy interoperability with other Cocoa libraries -#if CP_USE_CGTYPES - typedef CGPoint cpVect; -#else -/// Chipmunk's 2D vector type. -/// @addtogroup cpVect - typedef struct cpVect{cpFloat x,y;} cpVect; -#endif - -#if CP_USE_CGTYPES - typedef CGAffineTransform cpTransform; -#else - /// Column major affine transform. - typedef struct cpTransform { - cpFloat a, b, c, d, tx, ty; - } cpTransform; -#endif - -// NUKE -typedef struct cpMat2x2 { - // Row major [[a, b][c d]] - cpFloat a, b, c, d; -} cpMat2x2; - -#endif diff --git a/ios/include/chipmunk/chipmunk_unsafe.h b/ios/include/chipmunk/chipmunk_unsafe.h deleted file mode 100644 index 990bd012..00000000 --- a/ios/include/chipmunk/chipmunk_unsafe.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/* This header defines a number of "unsafe" operations on Chipmunk objects. - * In this case "unsafe" is referring to operations which may reduce the - * physical accuracy or numerical stability of the simulation, but will not - * cause crashes. - * - * The prime example is mutating collision shapes. Chipmunk does not support - * this directly. Mutating shapes using this API will caused objects in contact - * to be pushed apart using Chipmunk's overlap solver, but not using real - * persistent velocities. Probably not what you meant, but perhaps close enough. - */ - -/// @defgroup unsafe Chipmunk Unsafe Shape Operations -/// These functions are used for mutating collision shapes. -/// Chipmunk does not have any way to get velocity information on changing shapes, -/// so the results will be unrealistic. You must explicity include the chipmunk_unsafe.h header to use them. -/// @{ - -#ifndef CHIPMUNK_UNSAFE_H -#define CHIPMUNK_UNSAFE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/// Set the radius of a circle shape. -CP_EXPORT void cpCircleShapeSetRadius(cpShape *shape, cpFloat radius); -/// Set the offset of a circle shape. -CP_EXPORT void cpCircleShapeSetOffset(cpShape *shape, cpVect offset); - -/// Set the endpoints of a segment shape. -CP_EXPORT void cpSegmentShapeSetEndpoints(cpShape *shape, cpVect a, cpVect b); -/// Set the radius of a segment shape. -CP_EXPORT void cpSegmentShapeSetRadius(cpShape *shape, cpFloat radius); - -/// Set the vertexes of a poly shape. -CP_EXPORT void cpPolyShapeSetVerts(cpShape *shape, int count, cpVect *verts, cpTransform transform); -CP_EXPORT void cpPolyShapeSetVertsRaw(cpShape *shape, int count, cpVect *verts); -/// Set the radius of a poly shape. -CP_EXPORT void cpPolyShapeSetRadius(cpShape *shape, cpFloat radius); - -#ifdef __cplusplus -} -#endif -#endif -/// @} diff --git a/ios/include/chipmunk/cpArbiter.h b/ios/include/chipmunk/cpArbiter.h deleted file mode 100644 index 1dc130af..00000000 --- a/ios/include/chipmunk/cpArbiter.h +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpArbiter cpArbiter -/// The cpArbiter struct tracks pairs of colliding shapes. -/// They are also used in conjuction with collision handler callbacks -/// allowing you to retrieve information on the collision or change it. -/// A unique arbiter value is used for each pair of colliding objects. It persists until the shapes separate. -/// @{ - -#define CP_MAX_CONTACTS_PER_ARBITER 2 - -/// Get the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetRestitution(const cpArbiter *arb); -/// Override the restitution (elasticity) that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetRestitution(cpArbiter *arb, cpFloat restitution); -/// Get the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT cpFloat cpArbiterGetFriction(const cpArbiter *arb); -/// Override the friction coefficient that will be applied to the pair of colliding objects. -CP_EXPORT void cpArbiterSetFriction(cpArbiter *arb, cpFloat friction); - -// Get the relative surface velocity of the two shapes in contact. -CP_EXPORT cpVect cpArbiterGetSurfaceVelocity(cpArbiter *arb); - -// Override the relative surface velocity of the two shapes in contact. -// By default this is calculated to be the difference of the two surface velocities clamped to the tangent plane. -CP_EXPORT void cpArbiterSetSurfaceVelocity(cpArbiter *arb, cpVect vr); - -/// Get the user data pointer associated with this pair of colliding objects. -CP_EXPORT cpDataPointer cpArbiterGetUserData(const cpArbiter *arb); -/// Set a user data point associated with this pair of colliding objects. -/// If you need to perform any cleanup for this pointer, you must do it yourself, in the separate callback for instance. -CP_EXPORT void cpArbiterSetUserData(cpArbiter *arb, cpDataPointer userData); - -/// Calculate the total impulse including the friction that was applied by this arbiter. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpVect cpArbiterTotalImpulse(const cpArbiter *arb); -/// Calculate the amount of energy lost in a collision including static, but not dynamic friction. -/// This function should only be called from a post-solve, post-step or cpBodyEachArbiter callback. -CP_EXPORT cpFloat cpArbiterTotalKE(const cpArbiter *arb); - -/// Mark a collision pair to be ignored until the two objects separate. -/// Pre-solve and post-solve callbacks will not be called, but the separate callback will be called. -CP_EXPORT cpBool cpArbiterIgnore(cpArbiter *arb); - -/// Return the colliding shapes involved for this arbiter. -/// The order of their cpSpace.collision_type values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetShapes(const cpArbiter *arb, cpShape **a, cpShape **b); - -/// A macro shortcut for defining and retrieving the shapes from an arbiter. -#define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__); - -/// Return the colliding bodies involved for this arbiter. -/// The order of the cpSpace.collision_type the bodies are associated with values will match -/// the order set when the collision handler was registered. -CP_EXPORT void cpArbiterGetBodies(const cpArbiter *arb, cpBody **a, cpBody **b); - -/// A macro shortcut for defining and retrieving the bodies from an arbiter. -#define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__); - -/// A struct that wraps up the important collision data for an arbiter. -struct cpContactPointSet { - /// The number of contact points in the set. - int count; - - /// The normal of the collision. - cpVect normal; - - /// The array of contact points. - struct { - /// The position of the contact on the surface of each shape. - cpVect pointA, pointB; - /// Penetration distance of the two shapes. Overlapping means it will be negative. - /// This value is calculated as cpvdot(cpvsub(point2, point1), normal) and is ignored by cpArbiterSetContactPointSet(). - cpFloat distance; - } points[CP_MAX_CONTACTS_PER_ARBITER]; -}; - -/// Return a contact set from an arbiter. -CP_EXPORT cpContactPointSet cpArbiterGetContactPointSet(const cpArbiter *arb); - -/// Replace the contact point set for an arbiter. -/// This can be a very powerful feature, but use it with caution! -CP_EXPORT void cpArbiterSetContactPointSet(cpArbiter *arb, cpContactPointSet *set); - -/// Returns true if this is the first step a pair of objects started colliding. -CP_EXPORT cpBool cpArbiterIsFirstContact(const cpArbiter *arb); -/// Returns true if the separate callback is due to a shape being removed from the space. -CP_EXPORT cpBool cpArbiterIsRemoval(const cpArbiter *arb); - -/// Get the number of contact points for this arbiter. -CP_EXPORT int cpArbiterGetCount(const cpArbiter *arb); -/// Get the normal of the collision. -CP_EXPORT cpVect cpArbiterGetNormal(const cpArbiter *arb); -/// Get the position of the @c ith contact point on the surface of the first shape. -CP_EXPORT cpVect cpArbiterGetPointA(const cpArbiter *arb, int i); -/// Get the position of the @c ith contact point on the surface of the second shape. -CP_EXPORT cpVect cpArbiterGetPointB(const cpArbiter *arb, int i); -/// Get the depth of the @c ith contact point. -CP_EXPORT cpFloat cpArbiterGetDepth(const cpArbiter *arb, int i); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardBeginB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -/// You must decide how to handle the wildcard's return value since it may disagree with the other wildcard handler's return value or your own. -CP_EXPORT cpBool cpArbiterCallWildcardPreSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardPostSolveB(cpArbiter *arb, cpSpace *space); - -/// If you want a custom callback to invoke the wildcard callback for the first collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateA(cpArbiter *arb, cpSpace *space); -/// If you want a custom callback to invoke the wildcard callback for the second collision type, you must call this function explicitly. -CP_EXPORT void cpArbiterCallWildcardSeparateB(cpArbiter *arb, cpSpace *space); - -/// @} diff --git a/ios/include/chipmunk/cpBB.h b/ios/include/chipmunk/cpBB.h deleted file mode 100644 index 40200600..00000000 --- a/ios/include/chipmunk/cpBB.h +++ /dev/null @@ -1,187 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_BB_H -#define CHIPMUNK_BB_H - -#include "chipmunk_types.h" -#include "cpVect.h" - -/// @defgroup cpBBB cpBB -/// Chipmunk's axis-aligned 2D bounding box type along with a few handy routines. -/// @{ - -/// Chipmunk's axis-aligned 2D bounding box type. (left, bottom, right, top) -typedef struct cpBB{ - cpFloat l, b, r ,t; -} cpBB; - -/// Convenience constructor for cpBB structs. -static inline cpBB cpBBNew(const cpFloat l, const cpFloat b, const cpFloat r, const cpFloat t) -{ - cpBB bb = {l, b, r, t}; - return bb; -} - -/// Constructs a cpBB centered on a point with the given extents (half sizes). -static inline cpBB -cpBBNewForExtents(const cpVect c, const cpFloat hw, const cpFloat hh) -{ - return cpBBNew(c.x - hw, c.y - hh, c.x + hw, c.y + hh); -} - -/// Constructs a cpBB for a circle with the given position and radius. -static inline cpBB cpBBNewForCircle(const cpVect p, const cpFloat r) -{ - return cpBBNewForExtents(p, r, r); -} - -/// Returns true if @c a and @c b intersect. -static inline cpBool cpBBIntersects(const cpBB a, const cpBB b) -{ - return (a.l <= b.r && b.l <= a.r && a.b <= b.t && b.b <= a.t); -} - -/// Returns true if @c other lies completely within @c bb. -static inline cpBool cpBBContainsBB(const cpBB bb, const cpBB other) -{ - return (bb.l <= other.l && bb.r >= other.r && bb.b <= other.b && bb.t >= other.t); -} - -/// Returns true if @c bb contains @c v. -static inline cpBool cpBBContainsVect(const cpBB bb, const cpVect v) -{ - return (bb.l <= v.x && bb.r >= v.x && bb.b <= v.y && bb.t >= v.y); -} - -/// Returns a bounding box that holds both bounding boxes. -static inline cpBB cpBBMerge(const cpBB a, const cpBB b){ - return cpBBNew( - cpfmin(a.l, b.l), - cpfmin(a.b, b.b), - cpfmax(a.r, b.r), - cpfmax(a.t, b.t) - ); -} - -/// Returns a bounding box that holds both @c bb and @c v. -static inline cpBB cpBBExpand(const cpBB bb, const cpVect v){ - return cpBBNew( - cpfmin(bb.l, v.x), - cpfmin(bb.b, v.y), - cpfmax(bb.r, v.x), - cpfmax(bb.t, v.y) - ); -} - -/// Returns the center of a bounding box. -static inline cpVect -cpBBCenter(cpBB bb) -{ - return cpvlerp(cpv(bb.l, bb.b), cpv(bb.r, bb.t), 0.5f); -} - -/// Returns the area of the bounding box. -static inline cpFloat cpBBArea(cpBB bb) -{ - return (bb.r - bb.l)*(bb.t - bb.b); -} - -/// Merges @c a and @c b and returns the area of the merged bounding box. -static inline cpFloat cpBBMergedArea(cpBB a, cpBB b) -{ - return (cpfmax(a.r, b.r) - cpfmin(a.l, b.l))*(cpfmax(a.t, b.t) - cpfmin(a.b, b.b)); -} - -/// Returns the fraction along the segment query the cpBB is hit. Returns INFINITY if it doesn't hit. -static inline cpFloat cpBBSegmentQuery(cpBB bb, cpVect a, cpVect b) -{ - cpFloat idx = 1.0f/(b.x - a.x); -#ifdef _MSC_VER -#pragma warning(disable: 4056) -#endif - cpFloat tx1 = (bb.l == a.x ? -INFINITY : (bb.l - a.x)*idx); - cpFloat tx2 = (bb.r == a.x ? INFINITY : (bb.r - a.x)*idx); - cpFloat txmin = cpfmin(tx1, tx2); - cpFloat txmax = cpfmax(tx1, tx2); - - cpFloat idy = 1.0f/(b.y - a.y); - cpFloat ty1 = (bb.b == a.y ? -INFINITY : (bb.b - a.y)*idy); - cpFloat ty2 = (bb.t == a.y ? INFINITY : (bb.t - a.y)*idy); -#ifdef _MSC_VER -#pragma warning(default: 4056) -#endif - cpFloat tymin = cpfmin(ty1, ty2); - cpFloat tymax = cpfmax(ty1, ty2); - - if(tymin <= txmax && txmin <= tymax){ - cpFloat min = cpfmax(txmin, tymin); - cpFloat max = cpfmin(txmax, tymax); - - if(0.0 <= max && min <= 1.0) return cpfmax(min, 0.0); - } - - return INFINITY; -} - -/// Return true if the bounding box intersects the line segment with ends @c a and @c b. -static inline cpBool cpBBIntersectsSegment(cpBB bb, cpVect a, cpVect b) -{ - return (cpBBSegmentQuery(bb, a, b) != INFINITY); -} - -/// Clamp a vector to a bounding box. -static inline cpVect -cpBBClampVect(const cpBB bb, const cpVect v) -{ - return cpv(cpfclamp(v.x, bb.l, bb.r), cpfclamp(v.y, bb.b, bb.t)); -} - -/// Wrap a vector to a bounding box. -static inline cpVect -cpBBWrapVect(const cpBB bb, const cpVect v) -{ - cpFloat dx = cpfabs(bb.r - bb.l); - cpFloat modx = cpfmod(v.x - bb.l, dx); - cpFloat x = (modx > 0.0f) ? modx : modx + dx; - - cpFloat dy = cpfabs(bb.t - bb.b); - cpFloat mody = cpfmod(v.y - bb.b, dy); - cpFloat y = (mody > 0.0f) ? mody : mody + dy; - - return cpv(x + bb.l, y + bb.b); -} - -/// Returns a bounding box offseted by @c v. -static inline cpBB -cpBBOffset(const cpBB bb, const cpVect v) -{ - return cpBBNew( - bb.l + v.x, - bb.b + v.y, - bb.r + v.x, - bb.t + v.y - ); -} - -///@} - -#endif diff --git a/ios/include/chipmunk/cpBody.h b/ios/include/chipmunk/cpBody.h deleted file mode 100644 index 7e6943d1..00000000 --- a/ios/include/chipmunk/cpBody.h +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpBody cpBody -/// Chipmunk's rigid body type. Rigid bodies hold the physical properties of an object like -/// it's mass, and position and velocity of it's center of gravity. They don't have an shape on their own. -/// They are given a shape by creating collision shapes (cpShape) that point to the body. -/// @{ - -typedef enum cpBodyType { - /// A dynamic body is one that is affected by gravity, forces, and collisions. - /// This is the default body type. - CP_BODY_TYPE_DYNAMIC, - /// A kinematic body is an infinite mass, user controlled body that is not affected by gravity, forces or collisions. - /// Instead the body only moves based on it's velocity. - /// Dynamic bodies collide normally with kinematic bodies, though the kinematic body will be unaffected. - /// Collisions between two kinematic bodies, or a kinematic body and a static body produce collision callbacks, but no collision response. - CP_BODY_TYPE_KINEMATIC, - /// A static body is a body that never (or rarely) moves. If you move a static body, you must call one of the cpSpaceReindex*() functions. - /// Chipmunk uses this information to optimize the collision detection. - /// Static bodies do not produce collision callbacks when colliding with other static bodies. - CP_BODY_TYPE_STATIC, -} cpBodyType; - -/// Rigid body velocity update function type. -typedef void (*cpBodyVelocityFunc)(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Rigid body position update function type. -typedef void (*cpBodyPositionFunc)(cpBody *body, cpFloat dt); - -/// Allocate a cpBody. -CP_EXPORT cpBody* cpBodyAlloc(void); -/// Initialize a cpBody. -CP_EXPORT cpBody* cpBodyInit(cpBody *body, cpFloat mass, cpFloat moment); -/// Allocate and initialize a cpBody. -CP_EXPORT cpBody* cpBodyNew(cpFloat mass, cpFloat moment); - -/// Allocate and initialize a cpBody, and set it as a kinematic body. -CP_EXPORT cpBody* cpBodyNewKinematic(void); -/// Allocate and initialize a cpBody, and set it as a static body. -CP_EXPORT cpBody* cpBodyNewStatic(void); - -/// Destroy a cpBody. -CP_EXPORT void cpBodyDestroy(cpBody *body); -/// Destroy and free a cpBody. -CP_EXPORT void cpBodyFree(cpBody *body); - -// Defined in cpSpace.c -/// Wake up a sleeping or idle body. -CP_EXPORT void cpBodyActivate(cpBody *body); -/// Wake up any sleeping or idle bodies touching a static body. -CP_EXPORT void cpBodyActivateStatic(cpBody *body, cpShape *filter); - -/// Force a body to fall asleep immediately. -CP_EXPORT void cpBodySleep(cpBody *body); -/// Force a body to fall asleep immediately along with other bodies in a group. -CP_EXPORT void cpBodySleepWithGroup(cpBody *body, cpBody *group); - -/// Returns true if the body is sleeping. -CP_EXPORT cpBool cpBodyIsSleeping(const cpBody *body); - -/// Get the type of the body. -CP_EXPORT cpBodyType cpBodyGetType(cpBody *body); -/// Set the type of the body. -CP_EXPORT void cpBodySetType(cpBody *body, cpBodyType type); - -/// Get the space this body is added to. -CP_EXPORT cpSpace* cpBodyGetSpace(const cpBody *body); - -/// Get the mass of the body. -CP_EXPORT cpFloat cpBodyGetMass(const cpBody *body); -/// Set the mass of the body. -CP_EXPORT void cpBodySetMass(cpBody *body, cpFloat m); - -/// Get the moment of inertia of the body. -CP_EXPORT cpFloat cpBodyGetMoment(const cpBody *body); -/// Set the moment of inertia of the body. -CP_EXPORT void cpBodySetMoment(cpBody *body, cpFloat i); - -/// Set the position of a body. -CP_EXPORT cpVect cpBodyGetPosition(const cpBody *body); -/// Set the position of the body. -CP_EXPORT void cpBodySetPosition(cpBody *body, cpVect pos); - -/// Get the offset of the center of gravity in body local coordinates. -CP_EXPORT cpVect cpBodyGetCenterOfGravity(const cpBody *body); -/// Set the offset of the center of gravity in body local coordinates. -CP_EXPORT void cpBodySetCenterOfGravity(cpBody *body, cpVect cog); - -/// Get the velocity of the body. -CP_EXPORT cpVect cpBodyGetVelocity(const cpBody *body); -/// Set the velocity of the body. -CP_EXPORT void cpBodySetVelocity(cpBody *body, cpVect velocity); - -/// Get the force applied to the body for the next time step. -CP_EXPORT cpVect cpBodyGetForce(const cpBody *body); -/// Set the force applied to the body for the next time step. -CP_EXPORT void cpBodySetForce(cpBody *body, cpVect force); - -/// Get the angle of the body. -CP_EXPORT cpFloat cpBodyGetAngle(const cpBody *body); -/// Set the angle of a body. -CP_EXPORT void cpBodySetAngle(cpBody *body, cpFloat a); - -/// Get the angular velocity of the body. -CP_EXPORT cpFloat cpBodyGetAngularVelocity(const cpBody *body); -/// Set the angular velocity of the body. -CP_EXPORT void cpBodySetAngularVelocity(cpBody *body, cpFloat angularVelocity); - -/// Get the torque applied to the body for the next time step. -CP_EXPORT cpFloat cpBodyGetTorque(const cpBody *body); -/// Set the torque applied to the body for the next time step. -CP_EXPORT void cpBodySetTorque(cpBody *body, cpFloat torque); - -/// Get the rotation vector of the body. (The x basis vector of it's transform.) -CP_EXPORT cpVect cpBodyGetRotation(const cpBody *body); - -/// Get the user data pointer assigned to the body. -CP_EXPORT cpDataPointer cpBodyGetUserData(const cpBody *body); -/// Set the user data pointer assigned to the body. -CP_EXPORT void cpBodySetUserData(cpBody *body, cpDataPointer userData); - -/// Set the callback used to update a body's velocity. -CP_EXPORT void cpBodySetVelocityUpdateFunc(cpBody *body, cpBodyVelocityFunc velocityFunc); -/// Set the callback used to update a body's position. -/// NOTE: It's not generally recommended to override this unless you call the default position update function. -CP_EXPORT void cpBodySetPositionUpdateFunc(cpBody *body, cpBodyPositionFunc positionFunc); - -/// Default velocity integration function.. -CP_EXPORT void cpBodyUpdateVelocity(cpBody *body, cpVect gravity, cpFloat damping, cpFloat dt); -/// Default position integration function. -CP_EXPORT void cpBodyUpdatePosition(cpBody *body, cpFloat dt); - -/// Convert body relative/local coordinates to absolute/world coordinates. -CP_EXPORT cpVect cpBodyLocalToWorld(const cpBody *body, const cpVect point); -/// Convert body absolute/world coordinates to relative/local coordinates. -CP_EXPORT cpVect cpBodyWorldToLocal(const cpBody *body, const cpVect point); - -/// Apply a force to a body. Both the force and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyForceAtWorldPoint(cpBody *body, cpVect force, cpVect point); -/// Apply a force to a body. Both the force and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyForceAtLocalPoint(cpBody *body, cpVect force, cpVect point); - -/// Apply an impulse to a body. Both the impulse and point are expressed in world coordinates. -CP_EXPORT void cpBodyApplyImpulseAtWorldPoint(cpBody *body, cpVect impulse, cpVect point); -/// Apply an impulse to a body. Both the impulse and point are expressed in body local coordinates. -CP_EXPORT void cpBodyApplyImpulseAtLocalPoint(cpBody *body, cpVect impulse, cpVect point); - -/// Get the velocity on a body (in world units) at a point on the body in world coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtWorldPoint(const cpBody *body, cpVect point); -/// Get the velocity on a body (in world units) at a point on the body in local coordinates. -CP_EXPORT cpVect cpBodyGetVelocityAtLocalPoint(const cpBody *body, cpVect point); - -/// Get the amount of kinetic energy contained by the body. -CP_EXPORT cpFloat cpBodyKineticEnergy(const cpBody *body); - -/// Body/shape iterator callback function type. -typedef void (*cpBodyShapeIteratorFunc)(cpBody *body, cpShape *shape, void *data); -/// Call @c func once for each shape attached to @c body and added to the space. -CP_EXPORT void cpBodyEachShape(cpBody *body, cpBodyShapeIteratorFunc func, void *data); - -/// Body/constraint iterator callback function type. -typedef void (*cpBodyConstraintIteratorFunc)(cpBody *body, cpConstraint *constraint, void *data); -/// Call @c func once for each constraint attached to @c body and added to the space. -CP_EXPORT void cpBodyEachConstraint(cpBody *body, cpBodyConstraintIteratorFunc func, void *data); - -/// Body/arbiter iterator callback function type. -typedef void (*cpBodyArbiterIteratorFunc)(cpBody *body, cpArbiter *arbiter, void *data); -/// Call @c func once for each arbiter that is currently active on the body. -CP_EXPORT void cpBodyEachArbiter(cpBody *body, cpBodyArbiterIteratorFunc func, void *data); - -///@} diff --git a/ios/include/chipmunk/cpConstraint.h b/ios/include/chipmunk/cpConstraint.h deleted file mode 100644 index b1a439f7..00000000 --- a/ios/include/chipmunk/cpConstraint.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpConstraint cpConstraint -/// @{ - -/// Callback function type that gets called before solving a joint. -typedef void (*cpConstraintPreSolveFunc)(cpConstraint *constraint, cpSpace *space); -/// Callback function type that gets called after solving a joint. -typedef void (*cpConstraintPostSolveFunc)(cpConstraint *constraint, cpSpace *space); - -/// Destroy a constraint. -CP_EXPORT void cpConstraintDestroy(cpConstraint *constraint); -/// Destroy and free a constraint. -CP_EXPORT void cpConstraintFree(cpConstraint *constraint); - -/// Get the cpSpace this constraint is added to. -CP_EXPORT cpSpace* cpConstraintGetSpace(const cpConstraint *constraint); - -/// Get the first body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyA(const cpConstraint *constraint); - -/// Get the second body the constraint is attached to. -CP_EXPORT cpBody* cpConstraintGetBodyB(const cpConstraint *constraint); - -/// Get the maximum force that this constraint is allowed to use. -CP_EXPORT cpFloat cpConstraintGetMaxForce(const cpConstraint *constraint); -/// Set the maximum force that this constraint is allowed to use. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxForce(cpConstraint *constraint, cpFloat maxForce); - -/// Get rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetErrorBias(const cpConstraint *constraint); -/// Set rate at which joint error is corrected. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that it will -/// correct 10% of the error every 1/60th of a second. -CP_EXPORT void cpConstraintSetErrorBias(cpConstraint *constraint, cpFloat errorBias); - -/// Get the maximum rate at which joint error is corrected. -CP_EXPORT cpFloat cpConstraintGetMaxBias(const cpConstraint *constraint); -/// Set the maximum rate at which joint error is corrected. (defaults to INFINITY) -CP_EXPORT void cpConstraintSetMaxBias(cpConstraint *constraint, cpFloat maxBias); - -/// Get if the two bodies connected by the constraint are allowed to collide or not. -CP_EXPORT cpBool cpConstraintGetCollideBodies(const cpConstraint *constraint); -/// Set if the two bodies connected by the constraint are allowed to collide or not. (defaults to cpFalse) -CP_EXPORT void cpConstraintSetCollideBodies(cpConstraint *constraint, cpBool collideBodies); - -/// Get the pre-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPreSolveFunc cpConstraintGetPreSolveFunc(const cpConstraint *constraint); -/// Set the pre-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPreSolveFunc(cpConstraint *constraint, cpConstraintPreSolveFunc preSolveFunc); - -/// Get the post-solve function that is called before the solver runs. -CP_EXPORT cpConstraintPostSolveFunc cpConstraintGetPostSolveFunc(const cpConstraint *constraint); -/// Set the post-solve function that is called before the solver runs. -CP_EXPORT void cpConstraintSetPostSolveFunc(cpConstraint *constraint, cpConstraintPostSolveFunc postSolveFunc); - -/// Get the user definable data pointer for this constraint -CP_EXPORT cpDataPointer cpConstraintGetUserData(const cpConstraint *constraint); -/// Set the user definable data pointer for this constraint -CP_EXPORT void cpConstraintSetUserData(cpConstraint *constraint, cpDataPointer userData); - -/// Get the last impulse applied by this constraint. -CP_EXPORT cpFloat cpConstraintGetImpulse(cpConstraint *constraint); - -#include "cpPinJoint.h" -#include "cpSlideJoint.h" -#include "cpPivotJoint.h" -#include "cpGrooveJoint.h" -#include "cpDampedSpring.h" -#include "cpDampedRotarySpring.h" -#include "cpRotaryLimitJoint.h" -#include "cpRatchetJoint.h" -#include "cpGearJoint.h" -#include "cpSimpleMotor.h" - -///@} diff --git a/ios/include/chipmunk/cpDampedRotarySpring.h b/ios/include/chipmunk/cpDampedRotarySpring.h deleted file mode 100644 index 6f60e86e..00000000 --- a/ios/include/chipmunk/cpDampedRotarySpring.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedRotarySpring cpDampedRotarySpring -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsDampedRotarySpring(const cpConstraint *constraint); - -/// Function type used for damped rotary spring force callbacks. -typedef cpFloat (*cpDampedRotarySpringTorqueFunc)(struct cpConstraint *spring, cpFloat relativeAngle); - -/// Allocate a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringAlloc(void); -/// Initialize a damped rotary spring. -CP_EXPORT cpDampedRotarySpring* cpDampedRotarySpringInit(cpDampedRotarySpring *joint, cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped rotary spring. -CP_EXPORT cpConstraint* cpDampedRotarySpringNew(cpBody *a, cpBody *b, cpFloat restAngle, cpFloat stiffness, cpFloat damping); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetRestAngle(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedRotarySpringSetRestAngle(cpConstraint *constraint, cpFloat restAngle); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedRotarySpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedRotarySpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedRotarySpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedRotarySpringTorqueFunc cpDampedRotarySpringGetSpringTorqueFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedRotarySpringSetSpringTorqueFunc(cpConstraint *constraint, cpDampedRotarySpringTorqueFunc springTorqueFunc); - -/// @} diff --git a/ios/include/chipmunk/cpDampedSpring.h b/ios/include/chipmunk/cpDampedSpring.h deleted file mode 100644 index b332fc7f..00000000 --- a/ios/include/chipmunk/cpDampedSpring.h +++ /dev/null @@ -1,68 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpDampedSpring cpDampedSpring -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsDampedSpring(const cpConstraint *constraint); - -/// Function type used for damped spring force callbacks. -typedef cpFloat (*cpDampedSpringForceFunc)(cpConstraint *spring, cpFloat dist); - -/// Allocate a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringAlloc(void); -/// Initialize a damped spring. -CP_EXPORT cpDampedSpring* cpDampedSpringInit(cpDampedSpring *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); -/// Allocate and initialize a damped spring. -CP_EXPORT cpConstraint* cpDampedSpringNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat restLength, cpFloat stiffness, cpFloat damping); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpDampedSpringGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpDampedSpringSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpDampedSpringGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpDampedSpringSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the rest length of the spring. -CP_EXPORT cpFloat cpDampedSpringGetRestLength(const cpConstraint *constraint); -/// Set the rest length of the spring. -CP_EXPORT void cpDampedSpringSetRestLength(cpConstraint *constraint, cpFloat restLength); - -/// Get the stiffness of the spring in force/distance. -CP_EXPORT cpFloat cpDampedSpringGetStiffness(const cpConstraint *constraint); -/// Set the stiffness of the spring in force/distance. -CP_EXPORT void cpDampedSpringSetStiffness(cpConstraint *constraint, cpFloat stiffness); - -/// Get the damping of the spring. -CP_EXPORT cpFloat cpDampedSpringGetDamping(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetDamping(cpConstraint *constraint, cpFloat damping); - -/// Get the damping of the spring. -CP_EXPORT cpDampedSpringForceFunc cpDampedSpringGetSpringForceFunc(const cpConstraint *constraint); -/// Set the damping of the spring. -CP_EXPORT void cpDampedSpringSetSpringForceFunc(cpConstraint *constraint, cpDampedSpringForceFunc springForceFunc); - -/// @} diff --git a/ios/include/chipmunk/cpGearJoint.h b/ios/include/chipmunk/cpGearJoint.h deleted file mode 100644 index 8cd80e0b..00000000 --- a/ios/include/chipmunk/cpGearJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGearJoint cpGearJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsGearJoint(const cpConstraint *constraint); - -/// Allocate a gear joint. -CP_EXPORT cpGearJoint* cpGearJointAlloc(void); -/// Initialize a gear joint. -CP_EXPORT cpGearJoint* cpGearJointInit(cpGearJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); -/// Allocate and initialize a gear joint. -CP_EXPORT cpConstraint* cpGearJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratio); - -/// Get the phase offset of the gears. -CP_EXPORT cpFloat cpGearJointGetPhase(const cpConstraint *constraint); -/// Set the phase offset of the gears. -CP_EXPORT void cpGearJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpGearJointGetRatio(const cpConstraint *constraint); -/// Set the ratio of a gear joint. -CP_EXPORT void cpGearJointSetRatio(cpConstraint *constraint, cpFloat ratio); - -/// @} diff --git a/ios/include/chipmunk/cpGrooveJoint.h b/ios/include/chipmunk/cpGrooveJoint.h deleted file mode 100644 index 8bdafc14..00000000 --- a/ios/include/chipmunk/cpGrooveJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpGrooveJoint cpGrooveJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsGrooveJoint(const cpConstraint *constraint); - -/// Allocate a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointAlloc(void); -/// Initialize a groove joint. -CP_EXPORT cpGrooveJoint* cpGrooveJointInit(cpGrooveJoint *joint, cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); -/// Allocate and initialize a groove joint. -CP_EXPORT cpConstraint* cpGrooveJointNew(cpBody *a, cpBody *b, cpVect groove_a, cpVect groove_b, cpVect anchorB); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveA(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveA(cpConstraint *constraint, cpVect grooveA); - -/// Get the first endpoint of the groove relative to the first body. -CP_EXPORT cpVect cpGrooveJointGetGrooveB(const cpConstraint *constraint); -/// Set the first endpoint of the groove relative to the first body. -CP_EXPORT void cpGrooveJointSetGrooveB(cpConstraint *constraint, cpVect grooveB); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpGrooveJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpGrooveJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/ios/include/chipmunk/cpHastySpace.h b/ios/include/chipmunk/cpHastySpace.h deleted file mode 100644 index 6de2283b..00000000 --- a/ios/include/chipmunk/cpHastySpace.h +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// cpHastySpace is exclusive to Chipmunk Pro -/// Currently it enables ARM NEON optimizations in the solver, but in the future will include other optimizations such as -/// a multi-threaded solver and multi-threaded collision broadphases. - -struct cpHastySpace; -typedef struct cpHastySpace cpHastySpace; - -/// Create a new hasty space. -/// On ARM platforms that support NEON, this will enable the vectorized solver. -/// cpHastySpace also supports multiple threads, but runs single threaded by default for determinism. -CP_EXPORT cpSpace *cpHastySpaceNew(void); -CP_EXPORT void cpHastySpaceFree(cpSpace *space); - -/// Set the number of threads to use for the solver. -/// Currently Chipmunk is limited to 2 threads as using more generally provides very minimal performance gains. -/// Passing 0 as the thread count on iOS or OS X will cause Chipmunk to automatically detect the number of threads it should use. -/// On other platforms passing 0 for the thread count will set 1 thread. -CP_EXPORT void cpHastySpaceSetThreads(cpSpace *space, unsigned long threads); - -/// Returns the number of threads the solver is using to run. -CP_EXPORT unsigned long cpHastySpaceGetThreads(cpSpace *space); - -/// When stepping a hasty space, you must use this function. -CP_EXPORT void cpHastySpaceStep(cpSpace *space, cpFloat dt); diff --git a/ios/include/chipmunk/cpMarch.h b/ios/include/chipmunk/cpMarch.h deleted file mode 100644 index cc1f5c06..00000000 --- a/ios/include/chipmunk/cpMarch.h +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -/// Function type used as a callback from the marching squares algorithm to sample an image function. -/// It passes you the point to sample and your context pointer, and you return the density. -typedef cpFloat (*cpMarchSampleFunc)(cpVect point, void *data); - -/// Function type used as a callback from the marching squares algorithm to output a line segment. -/// It passes you the two endpoints and your context pointer. -typedef void (*cpMarchSegmentFunc)(cpVect v0, cpVect v1, void *data); - -/// Trace an anti-aliased contour of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchSoft( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); - -/// Trace an aliased curve of an image along a particular threshold. -/// The given number of samples will be taken and spread across the bounding box area using the sampling function and context. -/// The segment function will be called for each segment detected that lies along the density contour for @c threshold. -CP_EXPORT void cpMarchHard( - cpBB bb, unsigned long x_samples, unsigned long y_samples, cpFloat threshold, - cpMarchSegmentFunc segment, void *segment_data, - cpMarchSampleFunc sample, void *sample_data -); diff --git a/ios/include/chipmunk/cpPinJoint.h b/ios/include/chipmunk/cpPinJoint.h deleted file mode 100644 index 45aaa3e3..00000000 --- a/ios/include/chipmunk/cpPinJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPinJoint cpPinJoint -/// @{ - -/// Check if a constraint is a pin joint. -CP_EXPORT cpBool cpConstraintIsPinJoint(const cpConstraint *constraint); - -/// Allocate a pin joint. -CP_EXPORT cpPinJoint* cpPinJointAlloc(void); -/// Initialize a pin joint. -CP_EXPORT cpPinJoint* cpPinJointInit(cpPinJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pin joint. -CP_EXPORT cpConstraint* cpPinJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPinJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPinJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPinJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPinJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpPinJointGetDist(const cpConstraint *constraint); -/// Set the distance the joint will maintain between the two anchors. -CP_EXPORT void cpPinJointSetDist(cpConstraint *constraint, cpFloat dist); - -///@} diff --git a/ios/include/chipmunk/cpPivotJoint.h b/ios/include/chipmunk/cpPivotJoint.h deleted file mode 100644 index 4a620ef2..00000000 --- a/ios/include/chipmunk/cpPivotJoint.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPivotJoint cpPivotJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsPivotJoint(const cpConstraint *constraint); - -/// Allocate a pivot joint -CP_EXPORT cpPivotJoint* cpPivotJointAlloc(void); -/// Initialize a pivot joint. -CP_EXPORT cpPivotJoint* cpPivotJointInit(cpPivotJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); -/// Allocate and initialize a pivot joint. -CP_EXPORT cpConstraint* cpPivotJointNew(cpBody *a, cpBody *b, cpVect pivot); -/// Allocate and initialize a pivot joint with specific anchors. -CP_EXPORT cpConstraint* cpPivotJointNew2(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpPivotJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpPivotJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpPivotJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpPivotJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// @} diff --git a/ios/include/chipmunk/cpPolyShape.h b/ios/include/chipmunk/cpPolyShape.h deleted file mode 100644 index 25f688b8..00000000 --- a/ios/include/chipmunk/cpPolyShape.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpPolyShape cpPolyShape -/// @{ - -/// Allocate a polygon shape. -CP_EXPORT cpPolyShape* cpPolyShapeAlloc(void); -/// Initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpPolyShape* cpPolyShapeInit(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpPolyShape* cpPolyShapeInitRaw(cpPolyShape *poly, cpBody *body, int count, const cpVect *verts, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// A convex hull will be created from the vertexes. -CP_EXPORT cpShape* cpPolyShapeNew(cpBody *body, int count, const cpVect *verts, cpTransform transform, cpFloat radius); -/// Allocate and initialize a polygon shape with rounded corners. -/// The vertexes must be convex with a counter-clockwise winding. -CP_EXPORT cpShape* cpPolyShapeNewRaw(cpBody *body, int count, const cpVect *verts, cpFloat radius); - -/// Initialize a box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit(cpPolyShape *poly, cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Initialize an offset box shaped polygon shape with rounded corners. -CP_EXPORT cpPolyShape* cpBoxShapeInit2(cpPolyShape *poly, cpBody *body, cpBB box, cpFloat radius); -/// Allocate and initialize a box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew(cpBody *body, cpFloat width, cpFloat height, cpFloat radius); -/// Allocate and initialize an offset box shaped polygon shape. -CP_EXPORT cpShape* cpBoxShapeNew2(cpBody *body, cpBB box, cpFloat radius); - -/// Get the number of verts in a polygon shape. -CP_EXPORT int cpPolyShapeGetCount(const cpShape *shape); -/// Get the @c ith vertex of a polygon shape. -CP_EXPORT cpVect cpPolyShapeGetVert(const cpShape *shape, int index); -/// Get the radius of a polygon shape. -CP_EXPORT cpFloat cpPolyShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/ios/include/chipmunk/cpPolyline.h b/ios/include/chipmunk/cpPolyline.h deleted file mode 100644 index c3d2921a..00000000 --- a/ios/include/chipmunk/cpPolyline.h +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2013 Howling Moon Software. All rights reserved. -// See http://chipmunk2d.net/legal.php for more information. - -// Polylines are just arrays of vertexes. -// They are looped if the first vertex is equal to the last. -// cpPolyline structs are intended to be passed by value and destroyed when you are done with them. -typedef struct cpPolyline { - int count, capacity; - cpVect verts[]; -} cpPolyline; - -/// Destroy and free a polyline instance. -CP_EXPORT void cpPolylineFree(cpPolyline *line); - -/// Returns true if the first vertex is equal to the last. -CP_EXPORT cpBool cpPolylineIsClosed(cpPolyline *line); - -/** - Returns a copy of a polyline simplified by using the Douglas-Peucker algorithm. - This works very well on smooth or gently curved shapes, but not well on straight edged or angular shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyCurves(cpPolyline *line, cpFloat tol); - -/** - Returns a copy of a polyline simplified by discarding "flat" vertexes. - This works well on straigt edged or angular shapes, not as well on smooth shapes. -*/ -CP_EXPORT cpPolyline *cpPolylineSimplifyVertexes(cpPolyline *line, cpFloat tol); - -/// Get the convex hull of a polyline as a looped polyline. -CP_EXPORT cpPolyline *cpPolylineToConvexHull(cpPolyline *line, cpFloat tol); - - -/// Polyline sets are collections of polylines, generally built by cpMarchSoft() or cpMarchHard(). -typedef struct cpPolylineSet { - int count, capacity; - cpPolyline **lines; -} cpPolylineSet; - -/// Allocate a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetAlloc(void); - -/// Initialize a new polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetInit(cpPolylineSet *set); - -/// Allocate and initialize a polyline set. -CP_EXPORT cpPolylineSet *cpPolylineSetNew(void); - -/// Destroy a polyline set. -CP_EXPORT void cpPolylineSetDestroy(cpPolylineSet *set, cpBool freePolylines); - -CP_EXPORT /// Destroy and free a polyline set. -void cpPolylineSetFree(cpPolylineSet *set, cpBool freePolylines); - -/** - Add a line segment to a polyline set. - A segment will either start a new polyline, join two others, or add to or loop an existing polyline. - This is mostly intended to be used as a callback directly from cpMarchSoft() or cpMarchHard(). -*/ -CP_EXPORT void cpPolylineSetCollectSegment(cpVect v0, cpVect v1, cpPolylineSet *lines); - -/** - Get an approximate convex decomposition from a polyline. - Returns a cpPolylineSet of convex hulls that match the original shape to within 'tol'. - NOTE: If the input is a self intersecting polygon, the output might end up overly simplified. -*/ - -CP_EXPORT cpPolylineSet *cpPolylineConvexDecomposition(cpPolyline *line, cpFloat tol); - -#define cpPolylineConvexDecomposition_BETA cpPolylineConvexDecomposition diff --git a/ios/include/chipmunk/cpRatchetJoint.h b/ios/include/chipmunk/cpRatchetJoint.h deleted file mode 100644 index 3ed4c915..00000000 --- a/ios/include/chipmunk/cpRatchetJoint.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRatchetJoint cpRatchetJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRatchetJoint(const cpConstraint *constraint); - -/// Allocate a ratchet joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointAlloc(void); -/// Initialize a ratched joint. -CP_EXPORT cpRatchetJoint* cpRatchetJointInit(cpRatchetJoint *joint, cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); -/// Allocate and initialize a ratchet joint. -CP_EXPORT cpConstraint* cpRatchetJointNew(cpBody *a, cpBody *b, cpFloat phase, cpFloat ratchet); - -/// Get the angle of the current ratchet tooth. -CP_EXPORT cpFloat cpRatchetJointGetAngle(const cpConstraint *constraint); -/// Set the angle of the current ratchet tooth. -CP_EXPORT void cpRatchetJointSetAngle(cpConstraint *constraint, cpFloat angle); - -/// Get the phase offset of the ratchet. -CP_EXPORT cpFloat cpRatchetJointGetPhase(const cpConstraint *constraint); -/// Get the phase offset of the ratchet. -CP_EXPORT void cpRatchetJointSetPhase(cpConstraint *constraint, cpFloat phase); - -/// Get the angular distance of each ratchet. -CP_EXPORT cpFloat cpRatchetJointGetRatchet(const cpConstraint *constraint); -/// Set the angular distance of each ratchet. -CP_EXPORT void cpRatchetJointSetRatchet(cpConstraint *constraint, cpFloat ratchet); - -/// @} diff --git a/ios/include/chipmunk/cpRobust.h b/ios/include/chipmunk/cpRobust.h deleted file mode 100644 index 143dd1b7..00000000 --- a/ios/include/chipmunk/cpRobust.h +++ /dev/null @@ -1,9 +0,0 @@ -#include "chipmunk/cpVect.h" - -// This is a private header for functions (currently just one) that need strict floating point results. -// It was easier to put this in it's own file than to fiddle with 4 different compiler specific pragmas or attributes. -// "Fast math" should be disabled here. - -// Check that the signed area of the triangle a, b, c is positive. -// Compiler optimizations for associativity break certain edge cases (ex: when a or b equals c) that lead to excessive EPA iteration. -cpBool cpCheckSignedArea(const cpVect a, const cpVect b, const cpVect c); diff --git a/ios/include/chipmunk/cpRotaryLimitJoint.h b/ios/include/chipmunk/cpRotaryLimitJoint.h deleted file mode 100644 index fac7ad85..00000000 --- a/ios/include/chipmunk/cpRotaryLimitJoint.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpRotaryLimitJoint cpRotaryLimitJoint -/// @{ - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsRotaryLimitJoint(const cpConstraint *constraint); - -/// Allocate a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointAlloc(void); -/// Initialize a damped rotary limit joint. -CP_EXPORT cpRotaryLimitJoint* cpRotaryLimitJointInit(cpRotaryLimitJoint *joint, cpBody *a, cpBody *b, cpFloat min, cpFloat max); -/// Allocate and initialize a damped rotary limit joint. -CP_EXPORT cpConstraint* cpRotaryLimitJointNew(cpBody *a, cpBody *b, cpFloat min, cpFloat max); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpRotaryLimitJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpRotaryLimitJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/ios/include/chipmunk/cpShape.h b/ios/include/chipmunk/cpShape.h deleted file mode 100644 index cc20f809..00000000 --- a/ios/include/chipmunk/cpShape.h +++ /dev/null @@ -1,199 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpShape cpShape -/// The cpShape struct defines the shape of a rigid body. -/// @{ - -/// Point query info struct. -typedef struct cpPointQueryInfo { - /// The nearest shape, NULL if no shape was within range. - const cpShape *shape; - /// The closest point on the shape's surface. (in world space coordinates) - cpVect point; - /// The distance to the point. The distance is negative if the point is inside the shape. - cpFloat distance; - /// The gradient of the signed distance function. - /// The value should be similar to info.p/info.d, but accurate even for very small values of info.d. - cpVect gradient; -} cpPointQueryInfo; - -/// Segment query info struct. -typedef struct cpSegmentQueryInfo { - /// The shape that was hit, or NULL if no collision occured. - const cpShape *shape; - /// The point of impact. - cpVect point; - /// The normal of the surface hit. - cpVect normal; - /// The normalized distance along the query segment in the range [0, 1]. - cpFloat alpha; -} cpSegmentQueryInfo; - -/// Fast collision filtering type that is used to determine if two objects collide before calling collision or query callbacks. -typedef struct cpShapeFilter { - /// Two objects with the same non-zero group value do not collide. - /// This is generally used to group objects in a composite object together to disable self collisions. - cpGroup group; - /// A bitmask of user definable categories that this object belongs to. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask categories; - /// A bitmask of user definable category types that this object object collides with. - /// The category/mask combinations of both objects in a collision must agree for a collision to occur. - cpBitmask mask; -} cpShapeFilter; - -/// Collision filter value for a shape that will collide with anything except CP_SHAPE_FILTER_NONE. -static const cpShapeFilter CP_SHAPE_FILTER_ALL = {CP_NO_GROUP, CP_ALL_CATEGORIES, CP_ALL_CATEGORIES}; -/// Collision filter value for a shape that does not collide with anything. -static const cpShapeFilter CP_SHAPE_FILTER_NONE = {CP_NO_GROUP, ~CP_ALL_CATEGORIES, ~CP_ALL_CATEGORIES}; - -/// Create a new collision filter. -static inline cpShapeFilter -cpShapeFilterNew(cpGroup group, cpBitmask categories, cpBitmask mask) -{ - cpShapeFilter filter = {group, categories, mask}; - return filter; -} - -/// Destroy a shape. -CP_EXPORT void cpShapeDestroy(cpShape *shape); -/// Destroy and Free a shape. -CP_EXPORT void cpShapeFree(cpShape *shape); - -/// Update, cache and return the bounding box of a shape based on the body it's attached to. -CP_EXPORT cpBB cpShapeCacheBB(cpShape *shape); -/// Update, cache and return the bounding box of a shape with an explicit transformation. -CP_EXPORT cpBB cpShapeUpdate(cpShape *shape, cpTransform transform); - -/// Perform a nearest point query. It finds the closest point on the surface of shape to a specific point. -/// The value returned is the distance between the points. A negative distance means the point is inside the shape. -CP_EXPORT cpFloat cpShapePointQuery(const cpShape *shape, cpVect p, cpPointQueryInfo *out); - -/// Perform a segment query against a shape. @c info must be a pointer to a valid cpSegmentQueryInfo structure. -CP_EXPORT cpBool cpShapeSegmentQuery(const cpShape *shape, cpVect a, cpVect b, cpFloat radius, cpSegmentQueryInfo *info); - -/// Return contact information about two shapes. -CP_EXPORT cpContactPointSet cpShapesCollide(const cpShape *a, const cpShape *b); - -/// The cpSpace this body is added to. -CP_EXPORT cpSpace* cpShapeGetSpace(const cpShape *shape); - -/// The cpBody this shape is connected to. -CP_EXPORT cpBody* cpShapeGetBody(const cpShape *shape); -/// Set the cpBody this shape is connected to. -/// Can only be used if the shape is not currently added to a space. -CP_EXPORT void cpShapeSetBody(cpShape *shape, cpBody *body); - -/// Get the mass of the shape if you are having Chipmunk calculate mass properties for you. -cpFloat cpShapeGetMass(cpShape *shape); -/// Set the mass of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetMass(cpShape *shape, cpFloat mass); - -/// Get the density of the shape if you are having Chipmunk calculate mass properties for you. -CP_EXPORT cpFloat cpShapeGetDensity(cpShape *shape); -/// Set the density of this shape to have Chipmunk calculate mass properties for you. -CP_EXPORT void cpShapeSetDensity(cpShape *shape, cpFloat density); - -/// Get the calculated moment of inertia for this shape. -CP_EXPORT cpFloat cpShapeGetMoment(cpShape *shape); -/// Get the calculated area of this shape. -CP_EXPORT cpFloat cpShapeGetArea(cpShape *shape); -/// Get the centroid of this shape. -CP_EXPORT cpVect cpShapeGetCenterOfGravity(cpShape *shape); - -/// Get the bounding box that contains the shape given it's current position and angle. -CP_EXPORT cpBB cpShapeGetBB(const cpShape *shape); - -/// Get if the shape is set to be a sensor or not. -CP_EXPORT cpBool cpShapeGetSensor(const cpShape *shape); -/// Set if the shape is a sensor or not. -CP_EXPORT void cpShapeSetSensor(cpShape *shape, cpBool sensor); - -/// Get the elasticity of this shape. -CP_EXPORT cpFloat cpShapeGetElasticity(const cpShape *shape); -/// Set the elasticity of this shape. -CP_EXPORT void cpShapeSetElasticity(cpShape *shape, cpFloat elasticity); - -/// Get the friction of this shape. -CP_EXPORT cpFloat cpShapeGetFriction(const cpShape *shape); -/// Set the friction of this shape. -CP_EXPORT void cpShapeSetFriction(cpShape *shape, cpFloat friction); - -/// Get the surface velocity of this shape. -CP_EXPORT cpVect cpShapeGetSurfaceVelocity(const cpShape *shape); -/// Set the surface velocity of this shape. -CP_EXPORT void cpShapeSetSurfaceVelocity(cpShape *shape, cpVect surfaceVelocity); - -/// Get the user definable data pointer of this shape. -CP_EXPORT cpDataPointer cpShapeGetUserData(const cpShape *shape); -/// Set the user definable data pointer of this shape. -CP_EXPORT void cpShapeSetUserData(cpShape *shape, cpDataPointer userData); - -/// Set the collision type of this shape. -CP_EXPORT cpCollisionType cpShapeGetCollisionType(const cpShape *shape); -/// Get the collision type of this shape. -CP_EXPORT void cpShapeSetCollisionType(cpShape *shape, cpCollisionType collisionType); - -/// Get the collision filtering parameters of this shape. -CP_EXPORT cpShapeFilter cpShapeGetFilter(const cpShape *shape); -/// Set the collision filtering parameters of this shape. -CP_EXPORT void cpShapeSetFilter(cpShape *shape, cpShapeFilter filter); - - -/// @} -/// @defgroup cpCircleShape cpCircleShape - -/// Allocate a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeAlloc(void); -/// Initialize a circle shape. -CP_EXPORT cpCircleShape* cpCircleShapeInit(cpCircleShape *circle, cpBody *body, cpFloat radius, cpVect offset); -/// Allocate and initialize a circle shape. -CP_EXPORT cpShape* cpCircleShapeNew(cpBody *body, cpFloat radius, cpVect offset); - -/// Get the offset of a circle shape. -CP_EXPORT cpVect cpCircleShapeGetOffset(const cpShape *shape); -/// Get the radius of a circle shape. -CP_EXPORT cpFloat cpCircleShapeGetRadius(const cpShape *shape); - -/// @} -/// @defgroup cpSegmentShape cpSegmentShape - -/// Allocate a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeAlloc(void); -/// Initialize a segment shape. -CP_EXPORT cpSegmentShape* cpSegmentShapeInit(cpSegmentShape *seg, cpBody *body, cpVect a, cpVect b, cpFloat radius); -/// Allocate and initialize a segment shape. -CP_EXPORT cpShape* cpSegmentShapeNew(cpBody *body, cpVect a, cpVect b, cpFloat radius); - -/// Let Chipmunk know about the geometry of adjacent segments to avoid colliding with endcaps. -CP_EXPORT void cpSegmentShapeSetNeighbors(cpShape *shape, cpVect prev, cpVect next); - -/// Get the first endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetA(const cpShape *shape); -/// Get the second endpoint of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetB(const cpShape *shape); -/// Get the normal of a segment shape. -CP_EXPORT cpVect cpSegmentShapeGetNormal(const cpShape *shape); -/// Get the first endpoint of a segment shape. -CP_EXPORT cpFloat cpSegmentShapeGetRadius(const cpShape *shape); - -/// @} diff --git a/ios/include/chipmunk/cpSimpleMotor.h b/ios/include/chipmunk/cpSimpleMotor.h deleted file mode 100644 index 811b0114..00000000 --- a/ios/include/chipmunk/cpSimpleMotor.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSimpleMotor cpSimpleMotor -/// @{ - -/// Opaque struct type for damped rotary springs. -typedef struct cpSimpleMotor cpSimpleMotor; - -/// Check if a constraint is a damped rotary springs. -CP_EXPORT cpBool cpConstraintIsSimpleMotor(const cpConstraint *constraint); - -/// Allocate a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorAlloc(void); -/// initialize a simple motor. -CP_EXPORT cpSimpleMotor* cpSimpleMotorInit(cpSimpleMotor *joint, cpBody *a, cpBody *b, cpFloat rate); -/// Allocate and initialize a simple motor. -CP_EXPORT cpConstraint* cpSimpleMotorNew(cpBody *a, cpBody *b, cpFloat rate); - -/// Get the rate of the motor. -CP_EXPORT cpFloat cpSimpleMotorGetRate(const cpConstraint *constraint); -/// Set the rate of the motor. -CP_EXPORT void cpSimpleMotorSetRate(cpConstraint *constraint, cpFloat rate); - -/// @} diff --git a/ios/include/chipmunk/cpSlideJoint.h b/ios/include/chipmunk/cpSlideJoint.h deleted file mode 100644 index c41f9a42..00000000 --- a/ios/include/chipmunk/cpSlideJoint.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSlideJoint cpSlideJoint -/// @{ - -/// Check if a constraint is a slide joint. -CP_EXPORT cpBool cpConstraintIsSlideJoint(const cpConstraint *constraint); - -/// Allocate a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointAlloc(void); -/// Initialize a slide joint. -CP_EXPORT cpSlideJoint* cpSlideJointInit(cpSlideJoint *joint, cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); -/// Allocate and initialize a slide joint. -CP_EXPORT cpConstraint* cpSlideJointNew(cpBody *a, cpBody *b, cpVect anchorA, cpVect anchorB, cpFloat min, cpFloat max); - -/// Get the location of the first anchor relative to the first body. -CP_EXPORT cpVect cpSlideJointGetAnchorA(const cpConstraint *constraint); -/// Set the location of the first anchor relative to the first body. -CP_EXPORT void cpSlideJointSetAnchorA(cpConstraint *constraint, cpVect anchorA); - -/// Get the location of the second anchor relative to the second body. -CP_EXPORT cpVect cpSlideJointGetAnchorB(const cpConstraint *constraint); -/// Set the location of the second anchor relative to the second body. -CP_EXPORT void cpSlideJointSetAnchorB(cpConstraint *constraint, cpVect anchorB); - -/// Get the minimum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMin(const cpConstraint *constraint); -/// Set the minimum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMin(cpConstraint *constraint, cpFloat min); - -/// Get the maximum distance the joint will maintain between the two anchors. -CP_EXPORT cpFloat cpSlideJointGetMax(const cpConstraint *constraint); -/// Set the maximum distance the joint will maintain between the two anchors. -CP_EXPORT void cpSlideJointSetMax(cpConstraint *constraint, cpFloat max); - -/// @} diff --git a/ios/include/chipmunk/cpSpace.h b/ios/include/chipmunk/cpSpace.h deleted file mode 100644 index 7bbabb85..00000000 --- a/ios/include/chipmunk/cpSpace.h +++ /dev/null @@ -1,319 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/// @defgroup cpSpace cpSpace -/// @{ - -//MARK: Definitions - -/// Collision begin event function callback type. -/// Returning false from a begin callback causes the collision to be ignored until -/// the the separate callback is called when the objects stop colliding. -typedef cpBool (*cpCollisionBeginFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision pre-solve event function callback type. -/// Returning false from a pre-step callback causes the collision to be ignored until the next step. -typedef cpBool (*cpCollisionPreSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision post-solve event function callback type. -typedef void (*cpCollisionPostSolveFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); -/// Collision separate event function callback type. -typedef void (*cpCollisionSeparateFunc)(cpArbiter *arb, cpSpace *space, cpDataPointer userData); - -/// Struct that holds function callback pointers to configure custom collision handling. -/// Collision handlers have a pair of types; when a collision occurs between two shapes that have these types, the collision handler functions are triggered. -struct cpCollisionHandler { - /// Collision type identifier of the first shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the first argument. Read only. - const cpCollisionType typeA; - /// Collision type identifier of the second shape that this handler recognizes. - /// In the collision handler callback, the shape with this type will be the second argument. Read only. - const cpCollisionType typeB; - /// This function is called when two shapes with types that match this collision handler begin colliding. - cpCollisionBeginFunc beginFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called before the collision solver runs so that you can affect a collision's outcome. - cpCollisionPreSolveFunc preSolveFunc; - /// This function is called each step when two shapes with types that match this collision handler are colliding. - /// It's called after the collision solver runs so that you can read back information about the collision to trigger events in your game. - cpCollisionPostSolveFunc postSolveFunc; - /// This function is called when two shapes with types that match this collision handler stop colliding. - cpCollisionSeparateFunc separateFunc; - /// This is a user definable context pointer that is passed to all of the collision handler functions. - cpDataPointer userData; -}; - -// TODO: Make timestep a parameter? - - -//MARK: Memory and Initialization - -/// Allocate a cpSpace. -CP_EXPORT cpSpace* cpSpaceAlloc(void); -/// Initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceInit(cpSpace *space); -/// Allocate and initialize a cpSpace. -CP_EXPORT cpSpace* cpSpaceNew(void); - -/// Destroy a cpSpace. -CP_EXPORT void cpSpaceDestroy(cpSpace *space); -/// Destroy and free a cpSpace. -CP_EXPORT void cpSpaceFree(cpSpace *space); - - -//MARK: Properties - -/// Number of iterations to use in the impulse solver to solve contacts and other constraints. -CP_EXPORT int cpSpaceGetIterations(const cpSpace *space); -CP_EXPORT void cpSpaceSetIterations(cpSpace *space, int iterations); - -/// Gravity to pass to rigid bodies when integrating velocity. -CP_EXPORT cpVect cpSpaceGetGravity(const cpSpace *space); -CP_EXPORT void cpSpaceSetGravity(cpSpace *space, cpVect gravity); - -/// Damping rate expressed as the fraction of velocity bodies retain each second. -/// A value of 0.9 would mean that each body's velocity will drop 10% per second. -/// The default value is 1.0, meaning no damping is applied. -/// @note This damping value is different than those of cpDampedSpring and cpDampedRotarySpring. -CP_EXPORT cpFloat cpSpaceGetDamping(const cpSpace *space); -CP_EXPORT void cpSpaceSetDamping(cpSpace *space, cpFloat damping); - -/// Speed threshold for a body to be considered idle. -/// The default value of 0 means to let the space guess a good threshold based on gravity. -CP_EXPORT cpFloat cpSpaceGetIdleSpeedThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetIdleSpeedThreshold(cpSpace *space, cpFloat idleSpeedThreshold); - -/// Time a group of bodies must remain idle in order to fall asleep. -/// Enabling sleeping also implicitly enables the the contact graph. -/// The default value of INFINITY disables the sleeping algorithm. -CP_EXPORT cpFloat cpSpaceGetSleepTimeThreshold(const cpSpace *space); -CP_EXPORT void cpSpaceSetSleepTimeThreshold(cpSpace *space, cpFloat sleepTimeThreshold); - -/// Amount of encouraged penetration between colliding shapes. -/// Used to reduce oscillating contacts and keep the collision cache warm. -/// Defaults to 0.1. If you have poor simulation quality, -/// increase this number as much as possible without allowing visible amounts of overlap. -CP_EXPORT cpFloat cpSpaceGetCollisionSlop(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionSlop(cpSpace *space, cpFloat collisionSlop); - -/// Determines how fast overlapping shapes are pushed apart. -/// Expressed as a fraction of the error remaining after each second. -/// Defaults to pow(1.0 - 0.1, 60.0) meaning that Chipmunk fixes 10% of overlap each frame at 60Hz. -CP_EXPORT cpFloat cpSpaceGetCollisionBias(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionBias(cpSpace *space, cpFloat collisionBias); - -/// Number of frames that contact information should persist. -/// Defaults to 3. There is probably never a reason to change this value. -CP_EXPORT cpTimestamp cpSpaceGetCollisionPersistence(const cpSpace *space); -CP_EXPORT void cpSpaceSetCollisionPersistence(cpSpace *space, cpTimestamp collisionPersistence); - -/// User definable data pointer. -/// Generally this points to your game's controller or game state -/// class so you can access it when given a cpSpace reference in a callback. -CP_EXPORT cpDataPointer cpSpaceGetUserData(const cpSpace *space); -CP_EXPORT void cpSpaceSetUserData(cpSpace *space, cpDataPointer userData); - -/// The Space provided static body for a given cpSpace. -/// This is merely provided for convenience and you are not required to use it. -CP_EXPORT cpBody* cpSpaceGetStaticBody(const cpSpace *space); - -/// Returns the current (or most recent) time step used with the given space. -/// Useful from callbacks if your time step is not a compile-time global. -CP_EXPORT cpFloat cpSpaceGetCurrentTimeStep(const cpSpace *space); - -/// returns true from inside a callback when objects cannot be added/removed. -CP_EXPORT cpBool cpSpaceIsLocked(cpSpace *space); - - -//MARK: Collision Handlers - -/// Create or return the existing collision handler that is called for all collisions that are not handled by a more specific collision handler. -CP_EXPORT cpCollisionHandler *cpSpaceAddDefaultCollisionHandler(cpSpace *space); -/// Create or return the existing collision handler for the specified pair of collision types. -/// If wildcard handlers are used with either of the collision types, it's the responibility of the custom handler to invoke the wildcard handlers. -CP_EXPORT cpCollisionHandler *cpSpaceAddCollisionHandler(cpSpace *space, cpCollisionType a, cpCollisionType b); -/// Create or return the existing wildcard collision handler for the specified type. -CP_EXPORT cpCollisionHandler *cpSpaceAddWildcardHandler(cpSpace *space, cpCollisionType type); - - -//MARK: Add/Remove objects - -/// Add a collision shape to the simulation. -/// If the shape is attached to a static body, it will be added as a static shape. -CP_EXPORT cpShape* cpSpaceAddShape(cpSpace *space, cpShape *shape); -/// Add a rigid body to the simulation. -CP_EXPORT cpBody* cpSpaceAddBody(cpSpace *space, cpBody *body); -/// Add a constraint to the simulation. -CP_EXPORT cpConstraint* cpSpaceAddConstraint(cpSpace *space, cpConstraint *constraint); - -/// Remove a collision shape from the simulation. -CP_EXPORT void cpSpaceRemoveShape(cpSpace *space, cpShape *shape); -/// Remove a rigid body from the simulation. -CP_EXPORT void cpSpaceRemoveBody(cpSpace *space, cpBody *body); -/// Remove a constraint from the simulation. -CP_EXPORT void cpSpaceRemoveConstraint(cpSpace *space, cpConstraint *constraint); - -/// Test if a collision shape has been added to the space. -CP_EXPORT cpBool cpSpaceContainsShape(cpSpace *space, cpShape *shape); -/// Test if a rigid body has been added to the space. -CP_EXPORT cpBool cpSpaceContainsBody(cpSpace *space, cpBody *body); -/// Test if a constraint has been added to the space. -CP_EXPORT cpBool cpSpaceContainsConstraint(cpSpace *space, cpConstraint *constraint); - -//MARK: Post-Step Callbacks - -/// Post Step callback function type. -typedef void (*cpPostStepFunc)(cpSpace *space, void *key, void *data); -/// Schedule a post-step callback to be called when cpSpaceStep() finishes. -/// You can only register one callback per unique value for @c key. -/// Returns true only if @c key has never been scheduled before. -/// It's possible to pass @c NULL for @c func if you only want to mark @c key as being used. -CP_EXPORT cpBool cpSpaceAddPostStepCallback(cpSpace *space, cpPostStepFunc func, void *key, void *data); - - -//MARK: Queries - -// TODO: Queries and iterators should take a cpSpace parametery. -// TODO: They should also be abortable. - -/// Nearest point query callback function type. -typedef void (*cpSpacePointQueryFunc)(cpShape *shape, cpVect point, cpFloat distance, cpVect gradient, void *data); -/// Query the space at a point and call @c func for each shape found. -CP_EXPORT void cpSpacePointQuery(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpSpacePointQueryFunc func, void *data); -/// Query the space at a point and return the nearest shape found. Returns NULL if no shapes were found. -CP_EXPORT cpShape *cpSpacePointQueryNearest(cpSpace *space, cpVect point, cpFloat maxDistance, cpShapeFilter filter, cpPointQueryInfo *out); - -/// Segment query callback function type. -typedef void (*cpSpaceSegmentQueryFunc)(cpShape *shape, cpVect point, cpVect normal, cpFloat alpha, void *data); -/// Perform a directed line segment query (like a raycast) against the space calling @c func for each shape intersected. -CP_EXPORT void cpSpaceSegmentQuery(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSpaceSegmentQueryFunc func, void *data); -/// Perform a directed line segment query (like a raycast) against the space and return the first shape hit. Returns NULL if no shapes were hit. -CP_EXPORT cpShape *cpSpaceSegmentQueryFirst(cpSpace *space, cpVect start, cpVect end, cpFloat radius, cpShapeFilter filter, cpSegmentQueryInfo *out); - -/// Rectangle Query callback function type. -typedef void (*cpSpaceBBQueryFunc)(cpShape *shape, void *data); -/// Perform a fast rectangle query on the space calling @c func for each shape found. -/// Only the shape's bounding boxes are checked for overlap, not their full shape. -CP_EXPORT void cpSpaceBBQuery(cpSpace *space, cpBB bb, cpShapeFilter filter, cpSpaceBBQueryFunc func, void *data); - -/// Shape query callback function type. -typedef void (*cpSpaceShapeQueryFunc)(cpShape *shape, cpContactPointSet *points, void *data); -/// Query a space for any shapes overlapping the given shape and call @c func for each shape found. -CP_EXPORT cpBool cpSpaceShapeQuery(cpSpace *space, cpShape *shape, cpSpaceShapeQueryFunc func, void *data); - - -//MARK: Iteration - -/// Space/body iterator callback function type. -typedef void (*cpSpaceBodyIteratorFunc)(cpBody *body, void *data); -/// Call @c func for each body in the space. -CP_EXPORT void cpSpaceEachBody(cpSpace *space, cpSpaceBodyIteratorFunc func, void *data); - -/// Space/body iterator callback function type. -typedef void (*cpSpaceShapeIteratorFunc)(cpShape *shape, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachShape(cpSpace *space, cpSpaceShapeIteratorFunc func, void *data); - -/// Space/constraint iterator callback function type. -typedef void (*cpSpaceConstraintIteratorFunc)(cpConstraint *constraint, void *data); -/// Call @c func for each shape in the space. -CP_EXPORT void cpSpaceEachConstraint(cpSpace *space, cpSpaceConstraintIteratorFunc func, void *data); - - -//MARK: Indexing - -/// Update the collision detection info for the static shapes in the space. -CP_EXPORT void cpSpaceReindexStatic(cpSpace *space); -/// Update the collision detection data for a specific shape in the space. -CP_EXPORT void cpSpaceReindexShape(cpSpace *space, cpShape *shape); -/// Update the collision detection data for all shapes attached to a body. -CP_EXPORT void cpSpaceReindexShapesForBody(cpSpace *space, cpBody *body); - -/// Switch the space to use a spatial has as it's spatial index. -CP_EXPORT void cpSpaceUseSpatialHash(cpSpace *space, cpFloat dim, int count); - - -//MARK: Time Stepping - -/// Step the space forward in time by @c dt. -CP_EXPORT void cpSpaceStep(cpSpace *space, cpFloat dt); - - -//MARK: Debug API - -#ifndef CP_SPACE_DISABLE_DEBUG_API - -/// Color type to use with the space debug drawing API. -typedef struct cpSpaceDebugColor { - float r, g, b, a; -} cpSpaceDebugColor; - -/// Callback type for a function that draws a filled, stroked circle. -typedef void (*cpSpaceDebugDrawCircleImpl)(cpVect pos, cpFloat angle, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a line segment. -typedef void (*cpSpaceDebugDrawSegmentImpl)(cpVect a, cpVect b, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that draws a thick line segment. -typedef void (*cpSpaceDebugDrawFatSegmentImpl)(cpVect a, cpVect b, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a convex polygon. -typedef void (*cpSpaceDebugDrawPolygonImpl)(int count, const cpVect *verts, cpFloat radius, cpSpaceDebugColor outlineColor, cpSpaceDebugColor fillColor, cpDataPointer data); -/// Callback type for a function that draws a dot. -typedef void (*cpSpaceDebugDrawDotImpl)(cpFloat size, cpVect pos, cpSpaceDebugColor color, cpDataPointer data); -/// Callback type for a function that returns a color for a given shape. This gives you an opportunity to color shapes based on how they are used in your engine. -typedef cpSpaceDebugColor (*cpSpaceDebugDrawColorForShapeImpl)(cpShape *shape, cpDataPointer data); - -typedef enum cpSpaceDebugDrawFlags { - CP_SPACE_DEBUG_DRAW_SHAPES = 1<<0, - CP_SPACE_DEBUG_DRAW_CONSTRAINTS = 1<<1, - CP_SPACE_DEBUG_DRAW_COLLISION_POINTS = 1<<2, -} cpSpaceDebugDrawFlags; - -/// Struct used with cpSpaceDebugDraw() containing drawing callbacks and other drawing settings. -typedef struct cpSpaceDebugDrawOptions { - /// Function that will be invoked to draw circles. - cpSpaceDebugDrawCircleImpl drawCircle; - /// Function that will be invoked to draw line segments. - cpSpaceDebugDrawSegmentImpl drawSegment; - /// Function that will be invoked to draw thick line segments. - cpSpaceDebugDrawFatSegmentImpl drawFatSegment; - /// Function that will be invoked to draw convex polygons. - cpSpaceDebugDrawPolygonImpl drawPolygon; - /// Function that will be invoked to draw dots. - cpSpaceDebugDrawDotImpl drawDot; - - /// Flags that request which things to draw (collision shapes, constraints, contact points). - cpSpaceDebugDrawFlags flags; - /// Outline color passed to the drawing function. - cpSpaceDebugColor shapeOutlineColor; - /// Function that decides what fill color to draw shapes using. - cpSpaceDebugDrawColorForShapeImpl colorForShape; - /// Color passed to drawing functions for constraints. - cpSpaceDebugColor constraintColor; - /// Color passed to drawing functions for collision points. - cpSpaceDebugColor collisionPointColor; - - /// User defined context pointer passed to all of the callback functions as the 'data' argument. - cpDataPointer data; -} cpSpaceDebugDrawOptions; - -/// Debug draw the current state of the space using the supplied drawing options. -CP_EXPORT void cpSpaceDebugDraw(cpSpace *space, cpSpaceDebugDrawOptions *options); - -#endif - -/// @} diff --git a/ios/include/chipmunk/cpSpatialIndex.h b/ios/include/chipmunk/cpSpatialIndex.h deleted file mode 100644 index a386ba9a..00000000 --- a/ios/include/chipmunk/cpSpatialIndex.h +++ /dev/null @@ -1,227 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -/** - @defgroup cpSpatialIndex cpSpatialIndex - - Spatial indexes are data structures that are used to accelerate collision detection - and spatial queries. Chipmunk provides a number of spatial index algorithms to pick from - and they are programmed in a generic way so that you can use them for holding more than - just cpShape structs. - - It works by using @c void pointers to the objects you add and using a callback to ask your code - for bounding boxes when it needs them. Several types of queries can be performed an index as well - as reindexing and full collision information. All communication to the spatial indexes is performed - through callback functions. - - Spatial indexes should be treated as opaque structs. - This meanns you shouldn't be reading any of the struct fields. - @{ -*/ - -//MARK: Spatial Index - -/// Spatial index bounding box callback function type. -/// The spatial index calls this function and passes you a pointer to an object you added -/// when it needs to get the bounding box associated with that object. -typedef cpBB (*cpSpatialIndexBBFunc)(void *obj); -/// Spatial index/object iterator callback function type. -typedef void (*cpSpatialIndexIteratorFunc)(void *obj, void *data); -/// Spatial query callback function type. -typedef cpCollisionID (*cpSpatialIndexQueryFunc)(void *obj1, void *obj2, cpCollisionID id, void *data); -/// Spatial segment query callback function type. -typedef cpFloat (*cpSpatialIndexSegmentQueryFunc)(void *obj1, void *obj2, void *data); - - -typedef struct cpSpatialIndexClass cpSpatialIndexClass; -typedef struct cpSpatialIndex cpSpatialIndex; - -/// @private -struct cpSpatialIndex { - cpSpatialIndexClass *klass; - - cpSpatialIndexBBFunc bbfunc; - - cpSpatialIndex *staticIndex, *dynamicIndex; -}; - - -//MARK: Spatial Hash - -typedef struct cpSpaceHash cpSpaceHash; - -/// Allocate a spatial hash. -CP_EXPORT cpSpaceHash* cpSpaceHashAlloc(void); -/// Initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashInit(cpSpaceHash *hash, cpFloat celldim, int numcells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a spatial hash. -CP_EXPORT cpSpatialIndex* cpSpaceHashNew(cpFloat celldim, int cells, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Change the cell dimensions and table size of the spatial hash to tune it. -/// The cell dimensions should roughly match the average size of your objects -/// and the table size should be ~10 larger than the number of objects inserted. -/// Some trial and error is required to find the optimum numbers for efficiency. -CP_EXPORT void cpSpaceHashResize(cpSpaceHash *hash, cpFloat celldim, int numcells); - -//MARK: AABB Tree - -typedef struct cpBBTree cpBBTree; - -/// Allocate a bounding box tree. -CP_EXPORT cpBBTree* cpBBTreeAlloc(void); -/// Initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeInit(cpBBTree *tree, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a bounding box tree. -CP_EXPORT cpSpatialIndex* cpBBTreeNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -/// Perform a static top down optimization of the tree. -CP_EXPORT void cpBBTreeOptimize(cpSpatialIndex *index); - -/// Bounding box tree velocity callback function. -/// This function should return an estimate for the object's velocity. -typedef cpVect (*cpBBTreeVelocityFunc)(void *obj); -/// Set the velocity function for the bounding box tree to enable temporal coherence. -CP_EXPORT void cpBBTreeSetVelocityFunc(cpSpatialIndex *index, cpBBTreeVelocityFunc func); - -//MARK: Single Axis Sweep - -typedef struct cpSweep1D cpSweep1D; - -/// Allocate a 1D sort and sweep broadphase. -CP_EXPORT cpSweep1D* cpSweep1DAlloc(void); -/// Initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DInit(cpSweep1D *sweep, cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); -/// Allocate and initialize a 1D sort and sweep broadphase. -CP_EXPORT cpSpatialIndex* cpSweep1DNew(cpSpatialIndexBBFunc bbfunc, cpSpatialIndex *staticIndex); - -//MARK: Spatial Index Implementation - -typedef void (*cpSpatialIndexDestroyImpl)(cpSpatialIndex *index); - -typedef int (*cpSpatialIndexCountImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexEachImpl)(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data); - -typedef cpBool (*cpSpatialIndexContainsImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexInsertImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexRemoveImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); - -typedef void (*cpSpatialIndexReindexImpl)(cpSpatialIndex *index); -typedef void (*cpSpatialIndexReindexObjectImpl)(cpSpatialIndex *index, void *obj, cpHashValue hashid); -typedef void (*cpSpatialIndexReindexQueryImpl)(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data); - -typedef void (*cpSpatialIndexQueryImpl)(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data); -typedef void (*cpSpatialIndexSegmentQueryImpl)(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data); - -struct cpSpatialIndexClass { - cpSpatialIndexDestroyImpl destroy; - - cpSpatialIndexCountImpl count; - cpSpatialIndexEachImpl each; - - cpSpatialIndexContainsImpl contains; - cpSpatialIndexInsertImpl insert; - cpSpatialIndexRemoveImpl remove; - - cpSpatialIndexReindexImpl reindex; - cpSpatialIndexReindexObjectImpl reindexObject; - cpSpatialIndexReindexQueryImpl reindexQuery; - - cpSpatialIndexQueryImpl query; - cpSpatialIndexSegmentQueryImpl segmentQuery; -}; - -/// Destroy and free a spatial index. -void cpSpatialIndexFree(cpSpatialIndex *index); -/// Collide the objects in @c dynamicIndex against the objects in @c staticIndex using the query callback function. -void cpSpatialIndexCollideStatic(cpSpatialIndex *dynamicIndex, cpSpatialIndex *staticIndex, cpSpatialIndexQueryFunc func, void *data); - -/// Destroy a spatial index. -static inline void cpSpatialIndexDestroy(cpSpatialIndex *index) -{ - if(index->klass) index->klass->destroy(index); -} - -/// Get the number of objects in the spatial index. -static inline int cpSpatialIndexCount(cpSpatialIndex *index) -{ - return index->klass->count(index); -} - -/// Iterate the objects in the spatial index. @c func will be called once for each object. -static inline void cpSpatialIndexEach(cpSpatialIndex *index, cpSpatialIndexIteratorFunc func, void *data) -{ - index->klass->each(index, func, data); -} - -/// Returns true if the spatial index contains the given object. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline cpBool cpSpatialIndexContains(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - return index->klass->contains(index, obj, hashid); -} - -/// Add an object to a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexInsert(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->insert(index, obj, hashid); -} - -/// Remove an object from a spatial index. -/// Most spatial indexes use hashed storage, so you must provide a hash value too. -static inline void cpSpatialIndexRemove(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->remove(index, obj, hashid); -} - -/// Perform a full reindex of a spatial index. -static inline void cpSpatialIndexReindex(cpSpatialIndex *index) -{ - index->klass->reindex(index); -} - -/// Reindex a single object in the spatial index. -static inline void cpSpatialIndexReindexObject(cpSpatialIndex *index, void *obj, cpHashValue hashid) -{ - index->klass->reindexObject(index, obj, hashid); -} - -/// Perform a rectangle query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexQuery(cpSpatialIndex *index, void *obj, cpBB bb, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->query(index, obj, bb, func, data); -} - -/// Perform a segment query against the spatial index, calling @c func for each potential match. -static inline void cpSpatialIndexSegmentQuery(cpSpatialIndex *index, void *obj, cpVect a, cpVect b, cpFloat t_exit, cpSpatialIndexSegmentQueryFunc func, void *data) -{ - index->klass->segmentQuery(index, obj, a, b, t_exit, func, data); -} - -/// Simultaneously reindex and find all colliding objects. -/// @c func will be called once for each potentially overlapping pair of objects found. -/// If the spatial index was initialized with a static index, it will collide it's objects against that as well. -static inline void cpSpatialIndexReindexQuery(cpSpatialIndex *index, cpSpatialIndexQueryFunc func, void *data) -{ - index->klass->reindexQuery(index, func, data); -} - -///@} diff --git a/ios/include/chipmunk/cpTransform.h b/ios/include/chipmunk/cpTransform.h deleted file mode 100644 index 4a6256b9..00000000 --- a/ios/include/chipmunk/cpTransform.h +++ /dev/null @@ -1,198 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_TRANSFORM_H -#define CHIPMUNK_TRANSFORM_H - -#include "chipmunk_types.h" -#include "cpVect.h" -#include "cpBB.h" - -/// Identity transform matrix. -static const cpTransform cpTransformIdentity = {1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f}; - -/// Construct a new transform matrix. -/// (a, b) is the x basis vector. -/// (c, d) is the y basis vector. -/// (tx, ty) is the translation. -static inline cpTransform -cpTransformNew(cpFloat a, cpFloat b, cpFloat c, cpFloat d, cpFloat tx, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Construct a new transform matrix in transposed order. -static inline cpTransform -cpTransformNewTranspose(cpFloat a, cpFloat c, cpFloat tx, cpFloat b, cpFloat d, cpFloat ty) -{ - cpTransform t = {a, b, c, d, tx, ty}; - return t; -} - -/// Get the inverse of a transform matrix. -static inline cpTransform -cpTransformInverse(cpTransform t) -{ - cpFloat inv_det = 1.0/(t.a*t.d - t.c*t.b); - return cpTransformNewTranspose( - t.d*inv_det, -t.c*inv_det, (t.c*t.ty - t.tx*t.d)*inv_det, - -t.b*inv_det, t.a*inv_det, (t.tx*t.b - t.a*t.ty)*inv_det - ); -} - -/// Multiply two transformation matrices. -static inline cpTransform -cpTransformMult(cpTransform t1, cpTransform t2) -{ - return cpTransformNewTranspose( - t1.a*t2.a + t1.c*t2.b, t1.a*t2.c + t1.c*t2.d, t1.a*t2.tx + t1.c*t2.ty + t1.tx, - t1.b*t2.a + t1.d*t2.b, t1.b*t2.c + t1.d*t2.d, t1.b*t2.tx + t1.d*t2.ty + t1.ty - ); -} - -/// Transform an absolute point. (i.e. a vertex) -static inline cpVect -cpTransformPoint(cpTransform t, cpVect p) -{ - return cpv(t.a*p.x + t.c*p.y + t.tx, t.b*p.x + t.d*p.y + t.ty); -} - -/// Transform a vector (i.e. a normal) -static inline cpVect -cpTransformVect(cpTransform t, cpVect v) -{ - return cpv(t.a*v.x + t.c*v.y, t.b*v.x + t.d*v.y); -} - -/// Transform a cpBB. -static inline cpBB -cpTransformbBB(cpTransform t, cpBB bb) -{ - cpVect center = cpBBCenter(bb); - cpFloat hw = (bb.r - bb.l)*0.5; - cpFloat hh = (bb.t - bb.b)*0.5; - - cpFloat a = t.a*hw, b = t.c*hh, d = t.b*hw, e = t.d*hh; - cpFloat hw_max = cpfmax(cpfabs(a + b), cpfabs(a - b)); - cpFloat hh_max = cpfmax(cpfabs(d + e), cpfabs(d - e)); - return cpBBNewForExtents(cpTransformPoint(t, center), hw_max, hh_max); -} - -/// Create a transation matrix. -static inline cpTransform -cpTransformTranslate(cpVect translate) -{ - return cpTransformNewTranspose( - 1.0, 0.0, translate.x, - 0.0, 1.0, translate.y - ); -} - -/// Create a scale matrix. -static inline cpTransform -cpTransformScale(cpFloat scaleX, cpFloat scaleY) -{ - return cpTransformNewTranspose( - scaleX, 0.0, 0.0, - 0.0, scaleY, 0.0 - ); -} - -/// Create a rotation matrix. -static inline cpTransform -cpTransformRotate(cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, 0.0, - rot.y, rot.x, 0.0 - ); -} - -/// Create a rigid transformation matrix. (transation + rotation) -static inline cpTransform -cpTransformRigid(cpVect translate, cpFloat radians) -{ - cpVect rot = cpvforangle(radians); - return cpTransformNewTranspose( - rot.x, -rot.y, translate.x, - rot.y, rot.x, translate.y - ); -} - -/// Fast inverse of a rigid transformation matrix. -static inline cpTransform -cpTransformRigidInverse(cpTransform t) -{ - return cpTransformNewTranspose( - t.d, -t.c, (t.c*t.ty - t.tx*t.d), - -t.b, t.a, (t.tx*t.b - t.a*t.ty) - ); -} - -//MARK: Miscellaneous (but useful) transformation matrices. -// See source for documentation... - -static inline cpTransform -cpTransformWrap(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(cpTransformInverse(outer), cpTransformMult(inner, outer)); -} - -static inline cpTransform -cpTransformWrapInverse(cpTransform outer, cpTransform inner) -{ - return cpTransformMult(outer, cpTransformMult(inner, cpTransformInverse(outer))); -} - -static inline cpTransform -cpTransformOrtho(cpBB bb) -{ - return cpTransformNewTranspose( - 2.0/(bb.r - bb.l), 0.0, -(bb.r + bb.l)/(bb.r - bb.l), - 0.0, 2.0/(bb.t - bb.b), -(bb.t + bb.b)/(bb.t - bb.b) - ); -} - -static inline cpTransform -cpTransformBoneScale(cpVect v0, cpVect v1) -{ - cpVect d = cpvsub(v1, v0); - return cpTransformNewTranspose( - d.x, -d.y, v0.x, - d.y, d.x, v0.y - ); -} - -static inline cpTransform -cpTransformAxialScale(cpVect axis, cpVect pivot, cpFloat scale) -{ - cpFloat A = axis.x*axis.y*(scale - 1.0); - cpFloat B = cpvdot(axis, pivot)*(1.0 - scale); - - return cpTransformNewTranspose( - scale*axis.x*axis.x + axis.y*axis.y, A, axis.x*B, - A, axis.x*axis.x + scale*axis.y*axis.y, axis.y*B - ); -} - -#endif diff --git a/ios/include/chipmunk/cpVect.h b/ios/include/chipmunk/cpVect.h deleted file mode 100644 index 8ec02bdc..00000000 --- a/ios/include/chipmunk/cpVect.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (c) 2013 Scott Lembcke and Howling Moon Software - * - * 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. - */ - -#ifndef CHIPMUNK_VECT_H -#define CHIPMUNK_VECT_H - -#include "chipmunk_types.h" - -/// @defgroup cpVect cpVect -/// Chipmunk's 2D vector type along with a handy 2D vector math lib. -/// @{ - -/// Constant for the zero vector. -static const cpVect cpvzero = {0.0f,0.0f}; - -/// Convenience constructor for cpVect structs. -static inline cpVect cpv(const cpFloat x, const cpFloat y) -{ - cpVect v = {x, y}; - return v; -} - -/// Check if two vectors are equal. (Be careful when comparing floating point numbers!) -static inline cpBool cpveql(const cpVect v1, const cpVect v2) -{ - return (v1.x == v2.x && v1.y == v2.y); -} - -/// Add two vectors -static inline cpVect cpvadd(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x + v2.x, v1.y + v2.y); -} - -/// Subtract two vectors. -static inline cpVect cpvsub(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x - v2.x, v1.y - v2.y); -} - -/// Negate a vector. -static inline cpVect cpvneg(const cpVect v) -{ - return cpv(-v.x, -v.y); -} - -/// Scalar multiplication. -static inline cpVect cpvmult(const cpVect v, const cpFloat s) -{ - return cpv(v.x*s, v.y*s); -} - -/// Vector dot product. -static inline cpFloat cpvdot(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.x + v1.y*v2.y; -} - -/// 2D vector cross product analog. -/// The cross product of 2D vectors results in a 3D vector with only a z component. -/// This function returns the magnitude of the z value. -static inline cpFloat cpvcross(const cpVect v1, const cpVect v2) -{ - return v1.x*v2.y - v1.y*v2.x; -} - -/// Returns a perpendicular vector. (90 degree rotation) -static inline cpVect cpvperp(const cpVect v) -{ - return cpv(-v.y, v.x); -} - -/// Returns a perpendicular vector. (-90 degree rotation) -static inline cpVect cpvrperp(const cpVect v) -{ - return cpv(v.y, -v.x); -} - -/// Returns the vector projection of v1 onto v2. -static inline cpVect cpvproject(const cpVect v1, const cpVect v2) -{ - return cpvmult(v2, cpvdot(v1, v2)/cpvdot(v2, v2)); -} - -/// Returns the unit length vector for the given angle (in radians). -static inline cpVect cpvforangle(const cpFloat a) -{ - return cpv(cpfcos(a), cpfsin(a)); -} - -/// Returns the angular direction v is pointing in (in radians). -static inline cpFloat cpvtoangle(const cpVect v) -{ - return cpfatan2(v.y, v.x); -} - -/// Uses complex number multiplication to rotate v1 by v2. Scaling will occur if v1 is not a unit vector. -static inline cpVect cpvrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x - v1.y*v2.y, v1.x*v2.y + v1.y*v2.x); -} - -/// Inverse of cpvrotate(). -static inline cpVect cpvunrotate(const cpVect v1, const cpVect v2) -{ - return cpv(v1.x*v2.x + v1.y*v2.y, v1.y*v2.x - v1.x*v2.y); -} - -/// Returns the squared length of v. Faster than cpvlength() when you only need to compare lengths. -static inline cpFloat cpvlengthsq(const cpVect v) -{ - return cpvdot(v, v); -} - -/// Returns the length of v. -static inline cpFloat cpvlength(const cpVect v) -{ - return cpfsqrt(cpvdot(v, v)); -} - -/// Linearly interpolate between v1 and v2. -static inline cpVect cpvlerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - return cpvadd(cpvmult(v1, 1.0f - t), cpvmult(v2, t)); -} - -/// Returns a normalized copy of v. -static inline cpVect cpvnormalize(const cpVect v) -{ - // Neat trick I saw somewhere to avoid div/0. - return cpvmult(v, 1.0f/(cpvlength(v) + CPFLOAT_MIN)); -} - -/// Spherical linearly interpolate between v1 and v2. -static inline cpVect -cpvslerp(const cpVect v1, const cpVect v2, const cpFloat t) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - if(omega < 1e-3){ - // If the angle between two vectors is very small, lerp instead to avoid precision issues. - return cpvlerp(v1, v2, t); - } else { - cpFloat denom = 1.0f/cpfsin(omega); - return cpvadd(cpvmult(v1, cpfsin((1.0f - t)*omega)*denom), cpvmult(v2, cpfsin(t*omega)*denom)); - } -} - -/// Spherical linearly interpolate between v1 towards v2 by no more than angle a radians -static inline cpVect -cpvslerpconst(const cpVect v1, const cpVect v2, const cpFloat a) -{ - cpFloat dot = cpvdot(cpvnormalize(v1), cpvnormalize(v2)); - cpFloat omega = cpfacos(cpfclamp(dot, -1.0f, 1.0f)); - - return cpvslerp(v1, v2, cpfmin(a, omega)/omega); -} - -/// Clamp v to length len. -static inline cpVect cpvclamp(const cpVect v, const cpFloat len) -{ - return (cpvdot(v,v) > len*len) ? cpvmult(cpvnormalize(v), len) : v; -} - -/// Linearly interpolate between v1 towards v2 by distance d. -static inline cpVect cpvlerpconst(cpVect v1, cpVect v2, cpFloat d) -{ - return cpvadd(v1, cpvclamp(cpvsub(v2, v1), d)); -} - -/// Returns the distance between v1 and v2. -static inline cpFloat cpvdist(const cpVect v1, const cpVect v2) -{ - return cpvlength(cpvsub(v1, v2)); -} - -/// Returns the squared distance between v1 and v2. Faster than cpvdist() when you only need to compare distances. -static inline cpFloat cpvdistsq(const cpVect v1, const cpVect v2) -{ - return cpvlengthsq(cpvsub(v1, v2)); -} - -/// Returns true if the distance between v1 and v2 is less than dist. -static inline cpBool cpvnear(const cpVect v1, const cpVect v2, const cpFloat dist) -{ - return cpvdistsq(v1, v2) < dist*dist; -} - -/// @} - -/// @defgroup cpMat2x2 cpMat2x2 -/// 2x2 matrix type used for tensors and such. -/// @{ - -// NUKE -static inline cpMat2x2 -cpMat2x2New(cpFloat a, cpFloat b, cpFloat c, cpFloat d) -{ - cpMat2x2 m = {a, b, c, d}; - return m; -} - -static inline cpVect -cpMat2x2Transform(cpMat2x2 m, cpVect v) -{ - return cpv(v.x*m.a + v.y*m.b, v.x*m.c + v.y*m.d); -} - -///@} - -#endif diff --git a/ios/libs/libchipmunk.a b/ios/libs/libchipmunk.a deleted file mode 100644 index d51015d8082b92c2a20ec0eec9e5070dc95efc1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839264 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�@DS}6FctBh)!|;i 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 z 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 z zJu~(~!t1-Z+zWYc#U88$ei5?&cgU_!GeMZGA^Yx-U3naY`Ju7%r-$t(ZdMxTRd%3T zA2^6v>jJ} zkz9>YS(`R>R&6DbI?eZo*49qHIv_O(1UQU?qukg_>K7Q~N##AZ5gUEMZbN>Ko}=jt zMu%`{e+sPDp(uFzjLKjt-_^d9W0}YQh{~5ky^^U8Q7=`@JjXJRZ)4J^_*A*HzfysR zDyErp7!=HXKUz<)CZ>v;LtM}#AF5&UIodp4ias=T&Q${nJz;!Do5yE@<9g!u>wp8i z%Y;&Sa{l7uN)y8z4M9j~5?$MT5#m^QP{e zO>`bz`3LiY&^(h#=8_Bs&-h*aXy`HKcWj-Q01quISL2{3zA`E=COfC%F8@K8jrZr^ z+M}*t{I2g~>HoCmO(zh_OgD*^_>fvL++V3+%*`_gKT!KDR~9aRsD5xukxo@|wfjNl z9T{;(Wi#zb#2bzf$Ko*g11^(|iAQi}^40j>ad#^dykX5Ti#WDYhZMYJ*W&6Iy&x*r z5H_H$IDV_4?g-Phc*ErcWzLtpuY;>mN5&RpSe3vD(c;I*QEP}%4vUva)f=}@%xnJ@fE@eRq>xHn-6?G zJTEIg$OMLY%po(68IaqyjR|%_YOLFC6yIpcvD45-oXiBPPi{ghX$AW(roTd^xV)+U zPns(_7s z=0ahgz_n$C2H|ta;}(+_0Ln$hlr>TMPqZwvhRW8*g77>wsK0$!7}?y@Bn?)7X0RqJ ztfht8MQykgF9lhK*?6Bg?NK)<{!>#c+Jrrv-^YjR?|%_vlr62%jZ}aZ>MvCloI2CZ zGC)?f#ig4~5t2V|(#l;nx88@n1O9;i^AoUX^idRNnrmK~y=A|rVaJMgQXXxE`kG?C zs}%9=D{FK=e{?~tc$+_ZY^?YNzow+|ztXN9)4y%jYE}k*pSxRzE9=wz;eABV*GZPS zZmvH(M_|4MKSjk(e9lpnEdNnM{%i3)vHIP1J;9n=p(2Fx>$fS9uaHQ){2{&cyY;Cj z6S^oaQfMnl7n&Co^;vlEhmZC%{Q8~#50o|B9IikVEp>!iJ3hns)8aDxA7rEgw2jXR zH@zQ&D4YzquT}nFUTM;Z8Von43xl2FC&t(~=JI!`%!mx{!=E|IK?vw2H>5{}qYr-l zZm~DfFWO0vhFUo0Yn8r#afAY%gLQ!N*Ydm1@C(<0HjWHgQ@N1%D;=8hVJp3Za1Th8 zk3T$*6;dW^8AB?otZn}B;pn(T6n7gXfctPI)1L0tU`O$XD;B=E8U+zqmQC?y4si@8 zc2?2e{%xJU8rAx} zWtIHL|7gduo$9hyLPNYU7{SH@$(2*<4wZj=d_<47{zq7pzY#0iOG(wJPh2$CkCs4- zZH5{$Mi8@pU;iVGL(;DO4+|q+fnPNJ(QM?ao?^DaWwwK1|B)vMd{jupS+E+NFXm9S)u znO{X2Ee%0u&!F!!!1)!suPw0EDkWF+FV65Y|HmKS5AoEgP-vtanMkPo6Gy5(k~z$N zuKf~~*vi#R{`jNW@YkE3D=D%V9}%t3F^nX~sQ1W%#!cs2;Y-log8rTHDIx(#kNAia z+WNOqwT>{rQ?=^-va$Y^s#oUId(j~?KqUL)*ph?&+thmm^~>}>D*Y(Qsf&0Of9hXQ zzeMldYCq=Veb6J1&loji2=!~p!BIn&Bx-*Z4E*3|xM22G`SWMg)F1OQJ+)x}ciSK* z^!$Y>6un%}i=2s`6$78_%uRIl^8c$df9gz)?{Yucna4TvEjo3%KPmkt;N)3%Bdxy1 zx&N6?L;jaJ^V2=qPR_hG2qz(o{5h{=Onp=SZpeR=b63Z&aKCcqw+Z)yP`LTPS`!3# zr@3%nbY>egDgI$+zTnJx&eXSF`A=}>XlLd-^8;G4{NHjW=b#MyOH3MBPtGwJ82!}7 zoa{{Lw@|#VI`cIG3+5b>F?G+C;1*|ULyBO1zm%EpOcGgNgI)YdX7LiQ{Qu(2pCRwi z+Kk8e&v)*lomuG2JZDmTW*w&@Q?#&5q~rHiefQKiTV!SCJIH@vYK`?-UddIo29g}( zblx1^GkDMB{Q|FO4dg4xl+3qU@u72Ir(&wk3{x2FO}GiS?E3a9S&r;l^I{k~Mw&k6 z$i0EG*?>Keb=)4Z|1D&HA!I)ivY!NwAns>F_E{zje>_+7Ds4UAL;VbC{{wBHc2|2Sk{7qb63WPdDV-ygES6S7NBNtGSV>~s%~vL#$VqB;b}@!_p^AA%P1rN3lR4?EE3u3o=cG&N{5r$1 z@<{sE~u5*m0>vm2HxWINgH{G^#ylT2MVke!9L^=iQFlq{#S6^4TXlkeQtaJMW zt()V;QET1m9fu39UNEDs>hi1SPoIZuaB_9++{)UCraZ=0SEFv*+)!4lcG>NB`g6Lz z4{Tt;Kqn5=`Lp8bwKHZ1qCKJO^4!_6$oIa%hXnOiGS$E8Wq32svB>uZx%l+!X*ba6 zepxZQlJ7|<&C~Haz2Y;Br$vcN*O+{SFL;h7BP;}mWI@xw0V~NTj4z3!8y(yw;E-IY z1{~qEH5LTV(PV_vz@c%e0UY56{+0<=zJ8I{$gi}^h)4AH=6!*|N_jts0jnG{EZ-9! zdKFeU!aM@Dd-j5-EC1yDGoj#7zm$n+uD>MDujuC&7igBKsiKya5gm()RIoQQQkfHP zIF8(4a@?B*YBnqD2%@A+WL#R9%`|K0KDm5XPALC_$z*WT{Idnr46 zQ879t0ls$$^OisQVOyJD zbn}q*RU`Hx0V|dF^SukQoVF#r@}WO(_{dp9+EcRs{!ckiZ+-ksZfY(ME?FaLmXeWUrM<4)S; z%%=ZHWuE0fQVGjC3=-u~lXR6%L49vIxfCg-Y^8CyjNR#NLJLJfYI&ccmfxFB4oOnsh{oa=BELa5zDU zJxF4I^OjXBu{tG|{j!(+3fu2F?@_)L-mo_J01M}UYMzi~qxSyiHJmF(we=lzcx`9b zJ~fzwuK-OtD*_Q%bzB4vz5F-pPvQiTx2!*j(C<<%R7_Pw+y9zg%HA=Mp4+Nbu4Nl$ z%GtF)1%?8iIhCc%{Q#Fr@k`|r^GTjLp)-Xe7M5qnYNXULFP=AhdAq!2x`4Y?%R;Dx z+3bTHCGfJJBsm-m%bbm=+1{CDTz3WB(!;dp79Q(ADV9kuQjx3rwCuka9xcnp86lwf zcFi)k^%=&)po}@i(M35ET89lxd!mxSwmndyl15gkrpB05&Z&hd6lLQZ;g{tyX-ZE*U zY}Jx8s6#3v&fe*Wm#Ge`)h9uctro6V5|?yF;hK?0{Ykbp6PWTa-Ad5Rq8m-)dC63t zQY!buLG^JtFw;&uK<=uKMj28u-EchVeYZHlw;rqY#j%E~lzX_ltKM~c-K;1PX>BBED&+*@{p(W14DKU%4p_>1b& zvj1UEP?{$G7(P$_Z<{!Ua2fd@G;wj?u8FILFzC0Q9WEptTcSn&FDpc{GK2?@U8e1* zs?y&!Ge}#?Tz~6kPL0 ziVVnYmGCE7Crmfixw}6|(p`_G>gz+}Y3DXVWq8i=4pYfJGpCZ|g;3<-u4atA2?+MA*4D5oh03}oyz5Aty?0~N#=erJ}h{)JNrHtM+$0a!ZHZ zs?P?l&K+jOkO~s64$2UtYueVC9d%vRxo&8gr%7hASc0Z-LMkE44-KdF1$rVc|3ydc z^XixEn!*MNXBn-f*@SkLxGRD_s)UjRxx%@+V@d}u_45Bs4eWCccQ{9bg4ZZu^m4Ag z33i%zU*pv|wF`L{@Rm?xf5(gN__X_I_vpk=yO3^W5${f3`xFdEs&|2X(=hcUVFRVU zfFi>?HEsQ9WPv>E?q$R7T3(XsdG#mI$F2>$xR1kJoXMG77fxMS;*|Dq9kAq*3NQcd z+(Qu#f0^#32>BPB)ZV|Dv$^5$U+Dn9%JY8l%l0Jt!P8F6e?Cwv;mS3kYG?EySm{X1RF?%1knlx z1H!tlrLDHw+E)G1@7MO*i|tQa+S)c;BtcQ*9fWF7w2Q$STQ6Ao>i_+jXP(V$*cj}$ z{r>;|eeLtioVlDibA4vcoH-*0vlU`u3No=tBe*X!s~m4HeEtz5hvTE4`23X%7WGgv zmrahhoVJ@&Xv!|9oxErJNk!6J!pUTMV;-hE=65)Jeo1U9zN$s%d83M%jn6;Apge@n zAIR~}g;6YWgC9*K{p*WIAA-3)jL;3>@SBGpHIqlrzEZ}yz>+aj$E1_UDF%o5@9Qlc zBLQ4o3fY%DaV0puN4R^z;r`rw^|e>f2@dT)UqD&9Kc=0l1gp)T!XsLH$^zHps4a$C zHoeQKZ+EXi@$`VcPyKQc@C0pu;OQT8U8{$?7Pmmu^J!2vZ^^6PEPWsT8Jv`&MEvtT z$XzlJ=S%o5*>pT%ne-ZEYj-=(WK%2L@7{{i0=5WB@OVVTOcVAQ=r4NKs0e!48}P8V^EG?H!>D zlu%v7E7<2n_IDoX6{Pk2w1KaMm2fP@yqHOs^xs7G`MN3KGob>xwQR1+$UXK~EPXFd z`Jq?b9B6dQ`f_?(e5=mSF=aDFy5@0OMo^?xctg{2tp*xZu4WeC-@rKHf3HY&4iU+v zbg5RVR3q6+wNj-zGow_?RjTvCL=3BctPv{( zW40T7{fHqor1ZU__4xZ#eZsdvmE@Uvp(-J&P9tRMcwXISPBZnd>Cn+3`U3X|tDk@0 zru_Gw(zi_h@i%ur_LYBzC^!E^3-XUOoqtAzp7)AMM$6{kw<-T%>m~o+HTfrGip!{a z&%emw-o~9{N}9I}tlpelyGJPf%=uIHxI||PO{LI035JX5?cwPf*k=~v^dbmmVKExk>j&eaYa6e?@s_)?4u93sc}&ZQWio~cwPh>!@Rkvu{Q zQ6mQlz3g;eFgrt+Q(PexmA0;<2aKw&h!mtn&}tSMJCN6fbIq4ScR&6SwdOP||31#e zRD0xa-Zb#eU{|*qGc5IHv40Q(?q&J{$9C-6@6nx50!Jcexxf)} z5B~y3X;q6Zq`E|X?lULvGH_ojPT5M@GJaRtozy4Jki15$-*$?;1_(9 zgJ1CLM>zBXKjOe`z;`kjDP8Hi3i7oGx9hC?WEzV6$Fj5y{D11-=U8|3`#=`D1^RJL^I|4g zdk5}~ft_-@Gq95$Qe7r|A?9bTeI`g|SbHVmHMx~cbtU2Nwf16YYsDV$dLD7?PdoOP z9s2>tekAyUxZ({3qg7gIRp1cF$p&y1byb0vizlr_$|$M|LLe>d+_x9Fro$SAQ-Nzb zY=$dgOBP6swwq)E`c8+OQI}xwm^lp#mLj~Y7>Mm6ZmW?v$W`}o^nbyP3;z@!?9Abg zUaHCkOY0gkIAQ-RA8ab^SbQv*G~Ex)2b-cXpZMxO8|YMO%K%L>^y`a1=^% zBOJjmlZW-eXX5KEjwitZDd`_wBK?Dh^?`h_CW~WlfP(?RrALVR;)AUNhx)9&!!(_? zOH*Hbu;J9h$;7-x1C;Y)C|MOcPUuJq-@u={_9&wZA!^Zum}T$}Ria|5{Q^-Hv~11+PB%F84A;aQH44 z6T|Xdq`Os_&R14V(=d%B&37un-=}IHII!g=o3_Z7ovQ0a)ltMrr3lm;-{}@5eRPAWy9?)-}{Q*0W^3=J3@;*@56bn^3BN~?>N(+^|ybit6gsk%1B=dGZ6 zIwE=3@^W7Fl|ZjkQ%ixuy3nrs{s1)bgJFuVZy%3Y@?8K^cE1a|y!tH4jL7KRgUU>Rc5ggGg#%t+Jf{!WWWfjD${EUM5aumk5`4XOGDiLl(Ft9g7 zvXy?jH*!n?bEjKbdouRR6dY7mXio+6`Rm97vh!+cp1|Nk{BPs0IOnhQ5qqH4Z!i*`3 z8#&3y>{?#k`r+Z;MJCo$AA2eC(B(9i(Bha^@FtB1N245mHjO8A^-Kx%Mc?rvv~Qz4 zKXmzgqZ0lNm_r18gxe9+^tH)Ddyl+BuuBF4RC7~69b#+IZQjs#x|OyQZVK|5k(-K{ zmk{=kCB~fo4!95-jJ}Tfs5KwqGKe}5hQ*2st3r*c_C1-Z+M{$nE4CR$dM_eIStNQo zG0aP#VLa&~gXnH>Ag|R^ReL2k)H9KCS1*i6(SD>-ILu3+uce*B??p>{p1JHYU7u;b z5_v42PplRmGS8(L)3E9~s7wv*jEnBC3BY;My4&Ua6|L*mF@{$19Vuk$lCe-((!D15 zw{nuY7aqOvk_d2k+$19+f?VPHYsd?~J4Z74C;?vPz!$?8(rrKTuO|Nmz?!xNuyhCV z?;nRh*)0O0!^I3GCRW66I%kK*sK=Hu`ynw;>z zux6*$G{!EbW zP~5gy_jT5cS@SU}Lg62PUlWA?0dBvt?vt!p?D(IK+u`zaw4UsZr(<|Gv(wHIRQ2&mkZ=Bd`c z4)bf)Eq^UP1tK?-R{GHJTz z>5r-3;mA3Sw(;o>IR`kHTd9a2g1=Kt{9>ZaB(87-zYoLTX#&S!BHjTGvXcJMCDOmX z_$uqc@dZL}0f+nJle0>&%A_xSg^z(ld3e1C4u*#u|5MOAZ{`jJ?i8&BWgGX>|6JaT z@}x&BAC(IXm0o|#z?01%-c0qrdm*rUZ6!TJd8h%r=0qkV#T;GCZ8OKpijk5pY0LF) zZs|N~c#Bjcd%te+)yEym%kcHDT?+5Q3ysgy4ME~4tcAXS|8p9N#<#YX<%*5hsymuF zhrtoFu(`+0ETGv6{)j@o6P&O0rZv9+r%IEd?TLQP2afb^l)&$w6d7WhKTBwNwh1`Z z0$bwMEgZ%*)um7k@8l7tu^ns4JNXK}BXJVIq~|nOu6>R*Sg3%7Q7HCYF7rQ4lRF8u zkYi23@=Nkb>^SdbX2wb^w4C&`_6n79QZmJ&WWPCWWKNlBSrp^KuHF7xjK!SRV-ePV zcubL%x%hOFGdEFHJ&6O4rl8R$yrEUwmsTXl^)rgS;}5b29B)q+>K;HiQfn!~vvbF_ETbINhabNQVgmpeHR=PHB#@!jWg$0z!YYV~gH z(8<~(DXr!MM|d|r;+N?dHGqxY>OWafjbLN0xB3^riK9R=Y3l*rwOdte7c1TAlxcUV zu@ucHwM0b=Vea&6D)dWLl35Z=F=a|oXoq=G2o$dfVS!(IEPdfpnG4m39$~pSMdlX5 zcj3N|M+F^Gv2m1)0R({GWWlO5)PVfJ;Js$UG?9b_zJX%Q|FCPPNL%_bc8%q@~9%3 zgWM&LnohMl{%&Gea&o_TUZN5r?fBx;_lTiy0M`H{^L_fn&ZN7K@~JWfS|Lg&bt%K5 z5^H|qSP_(H?2_gL=n80}ZHSz&Q=Vw@6gdwWa#F@>$l2=>(>-4GLC=rb#{-AqYnB*N z{4?=g`TO3a^6{$7i!1es`K>xEz*r^LnS;MAnUC(Y6>n3+qgvz7EFXPHr&YN@Xt;{u zM7-BWQfH8AoMn1QMG%rZ6i`Ki=z%2Z9oPzX0bMZzOWE(_<-q(^hz zjIT@QS7|B1(iANvOHKTO=5NyFWdfS)n@Y$#wBA+{x?4M|lYhQ1rhiR}KM{WvZSipH zlDWgt!g*S0{%vo+*ZhwoQqY?d@otpXED^QcoE|lDC|Us<rJm z0=6+dS3d3+u+su<@Xh0r9SP-1CS~f|xx5EG>J6!8lu)5?`JY$N!2wXOpwo-J1Xm4C z!v1~?AsW}cp$lQRb3(Q&{x>LIGBN%A81St8+*myhSgKIRyO(^yZ_;shBz7!hY zjRfmo8KpF;z2pt8LDZ(xD|&nBpW@YwF#D6m{fO>Odv(-<@xLbwp^a_cs&y2FXKsR& zC@j}77ICOlx8RB2M{Px3G`HqWp*uvXRTMQ8fw}N;I|1}5s=nWwCN_$`AsfAE43x1= zBtsH`K8jF*21qgV4AtUsMA~_t@TM|qKIM(4gU@)ys!5ue4L{^RCyLN*zyn zSs4!)=IFBVceq-DFr{6o5Z@1!@Bx@YpY(QaVxUH;yhM3!946kUONbwQzf`l-MOaro zEFU73AY(E{oChcU_2g^t; zB7$zM2vq30-xKX+DZHD&c?xg87`>qUWG2e)`Iva!>Nicx^K%+LE8T^k>ZyNJL#HkY zH~I^8nFa9kz|C7iKJ(M1FTlsv(AhVX=5wvdr-XE%kiy27zC*?TVGn#?PvhISDs9~y z^l$Vp4^+kQy=K>nm&E@#Zk-sJsL%T?SH-@+`u!D!!&?&h*C)c>&_Rzi9_q;Nwphi~l_fm+&d$5}659)NT7#>8my3 zCf$(Yaa~K|sD5o^VH#J`q~@)QKb9;wW>nj?Z;z@-G2y!)3m?@ux{NF3L^ zH4p6}Y^&rM{n=FG3(We-8eb2Z#pqk#KTb8gyvtVd@8rv^F;x1>cMiX$Ml1jSGKY+s|{Q;M$1GM$MLeL-r7+9rLX3}YCD`$^*YbY{YU0}K@n>`InS>cE!zJ(KqdNYO^@48f4)SfrXYw12 z4?V}QtA)GOzs{v~eAZ!cnu4H_cL42hBHPnu5>uL=Vv?T|Kad`c4w)aU+`pX=khyvo zV?q4s_@gNm%B6{Bb0_%f5x6FDDE;`JWbT{d$2E6!4cQn^HYoV^=KY0s>TFs*g-ZoP zzA7mvwH^Ki(!lZ6^%`foyj7BULaXmh;w4Hq_z-i)G!sk8t@&+2i;!9Z3x3za^DX>@ zh36{e@1M@wpeSAIW756ZzD?JJ&+}e;ytQ<_$QZuO*MIwck<3Aw!F;7dwGU}tlKaq@ zctzVNhO_wVMw75tvNf*n?g&2Lp-GzwW4@Kz#Eb3oZ;0MzFUaM?y%SkfW*Xp&BrVn7 z_o=q+kEiCav4Twh1U#y2L*-jASw|O^4_^lnNuCr~Y^loNg!S}3meX=C)eI|c#HkMWldY;w2 znMkh4=RWq$UI99FYS>_9YP#9mx-m>@EqN$T-@ygNUi2?sqyv{N?4oIc*Uo(H%Gt&q zV+uF@1+_OwlX|w;7DZ)iOjK{d1gW3v$U|PVLiyXN8j&KG#V2_~t2bOZkW&7;_jwv! zq=St7$Zt&H>J4K?J>sn%Ynl!LLZ+2*VB4=duNmHZPO_Y<#&$Hn6D*tGiEp+GXC^Q1 z@HisZOiO~v5X)zV$M{aZS_;UAEAa=@snv=3eCY}@#tjzoN3)D)d5XevxFHP2pGZ#Z z7xxn5b4P7j-XAsRohP%>;sc3B>Wv+_HdWn}_Y&P56dISjc*EL*2|JveQ`*I1q~;AX zF-(1jP=EJM-x)U@R6G~cRLm^hmWt5~W6E|TrBI;VKT17X@_a5`h!P8_4@eD6lztHB zey;UH+WPHKRo|k{mAs^1ylY5%ymalT&0Yn?^MI7+Le&OtgTs<2-9TaHwkC3)NlbkvmqHzPAbt_|gtf(wY~CDd-grdwruQ1#65m$> ziK-n5lg6kW@g0fkyW=QzxyC0YUbQ3sAXPAGr&qBvzGF!HkS7}Qn>+e79vy#-Xq`+5 z*T<{clDS8as8W1J$V%HtFn3e)yGJCd*DoG1Z(TC?*tCD?4tcgEOO6$x-Er<#%|Dn2 zX`?n?^9TvkK-qqcY@g??*by(i8)I9%VtwNKD&=^|vs?o3Y(5jGi;mF5*{o8i9P?>O z-T035gM^xwug&ppl2C5K3=uZA*?Z-MMOmDd=9xH-02}x8>WS^1Vg9i?l4&G>Z0yYvQjDc`V*GWXF)5 z4gD$0hEMxltY14N*=Yv4@u5qywh>_WkDI`|r~b^lSQ{2ZFA3 zpF_i%=wHE|C$OhYxQ%2_I|h~+Lr4D?VJOMG!&)|k?{MIAfNyu;;U4?M4*VHlH+~rSX2<_UaGG?{VIcm0kj^~ZX?6W4TmRFn`97;Z zg@4qVacf>^&4bJm<^O$aUT)0`tjWFP#($4BTdX<5n(s4}R{S%q`FU%eXw7Gte#-wr zYu;eZ%dB~pHIK69?R@MEz3i*cwE0^DLv#~xr2`{{wtk%h-wk}D1CJ+;@SI>xT{NNc zxdl`1x~E*`!@T5|Ig0Z7hP(KYmI9=noswQoF={C~sR zn~3~3`2&ZrV;DPzxewd8W53k8cTpFAuy&m}D6(?rH}5 zwS!&G2}{P+)-9=^2S=T z#~k4CT}x`_NLBcf1q}=8P`Eu~#u9Xce|5&3`CpxJS));~;X2KmwLmy#+3eIUnWvO8 z@k@#Jghg}x^6|BDEUZ~Lryf1wnEow(DEszNl+-m|Ry%7+WliH8v~cIlK)?Fpx@8L% za^?Z7b7n2A$t3Wf)7LR-*wCi8Xk z&|S>$aQ3ka*?g5u41GN34fbIFOEEvhKDOfDL6m&9Y;aC_vhxTuRZzg;5duO8+za%f2)L3V{l)4@<-Ahl=s(q;9wXwd+Zp!o|m|td>7(B zXfU!k5Y8v|kn<86+f`P4o_qb(f+w4QH;;N4BVoW-x}RL9dDQHwtlYmF%qd|<4S6WB z_HhEllT(>(C60la82?K$|0%;N+0!-T(fGmDk9#-ugW4pF$40Sfhx0_WUcX9QqA^^Q zd~GR=g3ts+F|Vy?!#1U0_%5QYlCTv^oSHV)ACIyA@K))ni+FM{X|axcMC;@Vrs3D# zC+-0*j~bU-arr}$@6u*mwCda}o8dM9Y%zcq=>VGy5CKR|&re>EN0N8E#)mTAZYJGn zo&%IEImqj4Z}2+*fLEY>m@~YBN4%oOyOC{WC4Z}SKO$SbNaMJs|mjF02R{NVGWe9zv{u&+=%?nLJUP1-Zr{nh;UvK} zYW03yPX{ZpWbh!>eTOPI#cGJN61?HZ`ubwTX-GCnPC@JoI1V~)bBVxz#NUozJ-_+= zqpt0roLJv^LNfO&J}1}kspC(l!V2{__9rIRa&qUUdm$k?o~<#q#5cZ}%N1G@ya+Y< zqAa1cFEc6Z40rDtmnA0F(sYs~XR)wkji}CA(8Vj(rF~0yJA>JsWT!D!+m6GVRQ_8= zC$$l&W>=97$SG__M%Z+uu}r6Xn6vdX&=m*Hgcu4oTyO%f*a^A1Gw(qX1gbp&X8j5I zqZ)U6rhf*7I(9BS&~Bi0-$~HC|8$yBVtGE7or_iMj#VLYq_Q1s3basG$~II%fm6%_ zjcZ8gPdBw&6r3vxHZ4wkSF22WEU5duR@@jFEia{1L`+-`b+eU`$6=&1p+Xn>n8!nXZu{TBvG-5ijT(sSu>P{lm@Q znfPVR-%EbJ%s6MH8_ZT#&y4(vt&AWeYKCr3$U_C6Y~$236N4xq2JT)mG3OtLW&%ct zIsKKnN0X`Ns0M1J=O-}+H7iEX&tGw&4WQ)dX5W^ZY`RLe?8mzLGkr+ql2U39f#{EP zM=pBh7hya~uG2tD0w>duS3kb&(!>?>M?Jk_YQLuw6KXfUoSVoUo|rm3x7i*kOZq92 z_8Gp7v@ zK9AtymrsLlgT|_kDdu;6 z@zni6g)#~SzE{(*?Ho_?L?KP|;xJt4wUUV;zyIF(USE^FMi@M1vZpDTzhOUUa7wHo zSmlYMGB-*-PvFcwz+iso%lt+;mzG>PmW9ozBfQl=R|`U@VR?S@)$@xz1)I*~x73 z04qmLNvrmnSy}wC?rAU6JqB)n+G}+eYPuXudmkp|uI1)C<%jg=(2YxuwX#B&6Dg35O|E=M#ZKbMl~?$-+~mrO zWy?NT={m&JSzt&N@bdLkA!Efnqm@LYQ;AAzvQjfZR0EG&ft{phIZ5+|`81PAn38iOSmMO?mN0 zXre*?4o>3}t48%DZR4T21B9w}fR=g{d(Bi`=YK=hh>GikBJ+BqP^+o~fLVWZA>kux zOSuDhT{D2jEH4f?BIy~GJb@1VN48^8DpAR$N~po8@zO#t(zt`y!Y83%F<|&|k_%t0 zJahIRW$P&9dKuwAL=UQ2RnGWx^QO=QZ}qv1Vx3AcTV9Q%c`x605kJrQd9t_jKgdzN1_MICn(#Yvyz1OOIwNeM!#KZKO`&@43N zv1pI#T!Y4rm=5@>d%i}fje>Q<&2>8MhzFsf3z_NHv5=28vL3s3`3|6e@G!`{2#)G@ zZyGYiyKxau;ID?x$UaKjNAwcSnT&Zu4Yl5yr+|sJ@E!uEd?_Ncnpzk#SI$SP3QSuf zG3Y@)IP#`9q;W&Clg08zR!!jiT$tr zyrFMG%$1ixxfoWGxsJWabre@tB}xlvS#cI;DxgsHAS~o13SX^mq4Gy_FsH5`(`9)? zquGbcgN6}arZzBNZJ@Zo;g>XT42}A`x4HodB5L#pEk=%o`w5XzA(7<+z3VqJ9bVOf zkSHcjrCQ0C{#3SmNw5WkrS~?sB9nJFZcRT3YF9u|)lk#j2-XX@%Lco{G{0_o@Vh|m z;nO@dP#mN68)Y%Nmnu|MfD759)?-xPcG5?f>i`DbD8j+^x(BhVK*ZST!i_`jz9I-r zx`sIy{*ccT)Lns*=Xoe6$)9tPA{GV(@qEB%E+u+i`aXv~zvQg=@+affJ6cQIHPR)j zP5uWmL~_miw&4^)sA9wL$Dw7PKBO7>S-#$z2Kp(CMC#ttUpM*>U-zzi5lo=9IKggO z+&wBZKLJX==y@a6_FJWDc>gA)-wE{AJj&a^VCKVPPC?NbboW#AuVjpl5}~!KU$uBe zY97#lf(vsjp7M;8-a+&lYG--}o&=A+rU-AaL;ayByTtZ(9pI?wz{$z7&C{exRd~fyL zhJ_U~vPz8AM)o2wDZwW93EX=#-LSIv7Opq``~ZFv|tjR z^O5skTzlVvy&MT=KZV6@i#Ew%66mgjCG%(1*L>l;ud)-lr10Ex3s0?Qi*THvf3?ob z?ybihvjthWU`gR3bQ8=fRFZ{;kfAxl3P+z?xS;UVQ+bUpoKx4xj;`5KEv##7D6E@T zxOmp0%W8(^9EQY7wje5woXrDr)~DFF<9Fv|%HZyg=dAB?;O_z7-{1ko*_nicED*O+u`x;CJ?*3Y}DcoD!YqHMb`3wu9&jD-SQ{^Ez zpGV=2w&q`s>CV^hS_2|@O=-rKL7{$6a0UH z1AKz-1P<^CUd|(Y3oupAAH%=NmhU5Yyvig0Cy(wfXSwShG`X+mrFawZueb63%7*h9 zz%w2A2=7wKUfFo(;#TE^7c4bl3NIDz3jc@x$THdR z3;AIG2kFuf;S?F zpm^W2=8gCVwda5yKqzZt=9Z8rqW+!VK}?%3oZWPH1e~M)e7hp%&we?58qbt z%mFQ#RHuO<+nCz7S6DVMbA(P!RNV%#2P3xdDa@02KFz~Mm$@tEIP$K5yFe&;E`7UR zvvz&U`a`4K^*tM8?fR}=ij!E%Gl~CIYad4aTx0DW*b~;?Lgs}+;r06-kL>Hnz!q!2 zhrV-%)!$p#F>{A^3Ovm2j*uUl2rK2~%|5L~Q2gj~eTM#A?r81xE3^^|2;!1I)9WI=8 zWkxhduFHf0wn4_$ElbBz6c;x7Oacds!U27CC&7dQl_cZLJOLz<@G@9&l&D$;Ex27c zYwm)^wD6hDud=$uqSMc`G~Lc=T-aEP+*bwD zuCm2-3k_X{pm9jFEv{QI*NKuTa+X$-g1(eG$-g-vo#OR{(Yoh$Zc+6Rv@@~B&6+d6 zres#btc(JztV0Fwl*XFHhW2z>Tgf}$gZ3Ke(;ZpZ{Tn{w%rn3I<&j_hGPg&aIgD4K zuU}>Ouwh>wF`}^Wj8Vge`Jr{M)P=JeNIz4fuIUOn+2qv@=YA=^4Ms1nO#bF!2r$3H zkyjf^;6Sgg#)69#Gn>5Hhydr*(#TZbuD8Y>je|Ecb}&q&e+U zGLaLMrTYWrD#04|PvH@*MiUip;n#QLc4*djWIgjY$+W@%KSWN9q1DI%tFC+dHTm?}}QDx)~Y)MG3>_`&oL$B<| z6~yf0j^ufp8U6ze3&??0|fHVz7Om!f^}yqd6Pf%)0%z! zZ9ZBy!_770CV!>9C!iTf>K^=4-{Ey={+?vmaPp_i3T*y#UqL#5Y3;c4arN_etZ$=u z_kyFB{N1JGhZ8b2kk_I4t5WhNf1_>w_6eD(KPH>D0Bd?r;Kxd!9sksCcpaL*H|Xk4 z{3T=0`3o#29> zcx!4k!FN{gCyaJSV?rI3_87Fl;`a5imW-4)4Q}WR5LRP`CzqJbmbS*DTg%ER95yX| zZQ6kxh8X?jD4Y?J;&S1XZ2}ZZXecy=!imA!4$Bf9E9%E$3y&R*9xIja#c=xwH=A@` zg<PwPmur_gPp64X}2dlk%&Tr*ewB|G6vH#tmLBQqO@F;mX9`yLz_UP z_E<@ViBVi`__1wEKkD~xZ(7rM0ua9R;LcJ`w&zxFRt&>$lO^~yVL9xF^<0kD2$eiJ z49ywJ@Rqo9p?{+$Q8$^PbF%6ZUF^@wK7=;WoSaXwR-Q?o_}!_qNWWsOTWR5+k>6dp ztd%YN9_4U90}f#SB<`9sDW2S?T6f)@BLA1Ixs|nTlMSakQ0@o*PY3=LaIQZIxKsWb zN)%t?h)iwj;ouki83&)>V|j$@4`QzSN=Cz_chkM%)x&SZq*Kc!52CB1&?v?2|kTS z>78m#^v9*?y`Oo|L3jZHy@LM+9MCIxH;>{!X3b6b2lUEc>rVOqr#08$--Lt8|5DtR zJNN}JaqtVC<=_*{*{C%Bk-&REB>Zg3rQLsy+a~Ki*_vY=|Dm{PKB;(230eOh%DceX zxWjVj_59gcMATh0%CF9Bi7%nPJ>J^Y$3?T;)z=qTyAnPZyy6e|JOJOWG^5tN62Ev5 zhPwH!wTHkj+7-7D^Yhkz2j&&leh+?kTKhWUK4Ieu^)8o@PE=_PIBzh z#~Q>P?%1_vbcd5P>%eskxCgGAUFoyJ4X%6182x(UHM&SIt2I}|xM*0Uk6Dz(o$!_O zXD!JVKC8Ro7np@;&y)=t!1^4r#QzYt*UYP}t6R)LvVVn!)9!V*T}YedbYJW4Grz>* z+x*PByKZ*ll7{r*Fxo)2^|tz1PNC@!IW1VT{pxX?N;sJse)Z7w%7;5q4;OB~Ud5UcnwO z_N1geqHKBAZ$dVpU7|A597@C{_c@iZZYB==V7>cvYrHT&`s%p(HFLgt(Spks)yx%p z>YwA^d})-JI{f^0)G%xDRg)GhT+ow;ldU}+4*%u_#!K;EWCrbtVbjmT434BWSOB9Z z-$Xutq!9%Cn{ox+NW4uWBX9sv&F3Vv>z z?2CUR#)#VNTuX=Uv~zI@XJ7mqeTVKPT!RYI`MLS(i+`ibWW}p5QiF1SfU5-J-E03^ z3(ex6*V3`n$KC#=czT2u_KrS{z5eRKlg*$0W%)Pd#0~g2zW{BTe}i0n@Ao1-Nr48e zl4fGj>wLD&2-)b5FmPJSN<>#$QJt&1g7l4UMt?mS+=JxOaxz$Z+=H~(NmQF2O3H9$ zOroq)G846z9R=&Nl!!4h{!KdB(g*+LC0cDJ|7E38H|zI8-^K#^O+xjufL=ptsfC10 zXh^{e^CP2{7uH1&R?4U zViP5Q&lA(n-@USBPyYK#URoAXZxTrP)48fbQ^_;H?z1O?%X!AYcZe193QZsB4c)vH zsoU6&PFf7t_89iW#wADN)Mk`kh7E7P+$dbEAYa$T04$VQYKJFl1@5pG;7z1i3#nC5 z;#@4V#*Y^jm%;KD{%$aZs<;L@gSSxJ&08oTV|2noqdYNv?v(sx@E1y0ng4VAg-b|_ zi%uSDxR#vs;4Q#b@P_VWy&tih1$YC|iOTXNBp7*U$uWijGh=(FKQc`BrhWUnkPA2A zL2nxBpA4sDB4H&w*EchvTh5F81^fi~AJF%2<|k+$@*Y}`)*kEVZ$0=4b(!DhevbW;M;AyZ&>p> z`~!OBUu)ejvnFfVH2zQG#yuQq{DRML@C*KogHP~#%tZtI2Po8yJfinjm~~$HXvp zj2sQy#vR86)*iwx8HZqf{v~T~!u*Z3SCVeCwbv8=G3>#*dWU20aO{5CN}c&AMiBm^ zj@_(Udvw9>wRjJY^m@F9d$u)sk09C7VeMS80Ie!;0(yjI?c9rx;>=psTO9fPPuAN1 znl<*x!@n3@3}RM0eXXyDpLv#DVQXDv_SW6yb=LK@+F?$i-?nL5 zhwNRmBYnS~YrA%EXgzd4INY>de0{BlI>7M^`QHu>_vhxTuXWjmBGy7gUVoZj9)np& z9_1p#-q)I{0|cW9w;derk9u7tSf81`^sfxEWtpcz()o#&d<&m~sWJ;FR6YmttcB+B zn7a}1x`xEubs036_NDRbY#xoPz5S+wC!4?Kd1$KF9vDXz;_N3?433u@Wf5sD2IbNf zQJlZEcvwzrak)}xEuQ2XrUkSXgItcqzM=90s+3H1Yq6BHV3hcdrVX?fM|>zIL)WVG zoOkA|ZfW>PqBsxZ$m;hysy935+x+u(_oNm#HZOqP^Lfoz#c~=yk(iRV`tgSTqbAlj94iGGV>tJ2wv5NnD*Yu( zCl%(e8J?0Y`8}kXuT-INWCrxR7LVvozk8i)7B!{$SDvJuVqY`-iJ(fC zW?HtOzh8T-{XRc9sK>v_mc1TtR6RaRoYb#)=>*In^o%@AdTszgnx6Dp^d6rI==tu+ z0X;wLogOWLQWHhbXS30x`WT&d^Ait=Chg#w%$Sp)r$!wh^=kAp{$z zLCluFUy)OUbNZzC3Yup@yliUomV9$SM75DwABt|Wi~!JhrBFPT6pZeh;u64eC0HS? zqNVK#H0_4u6)usg7VZn;W&F^=V_c1nog`N_>mo3YAi*F8nVj;x%6FyxVOu zX@-yTb(ds2?#3(p^e@gz&vi#;PBQoy;HGH|4N%+!4Vrh;+dl$1BLbo-LA zsK9R+EY4!dU~y%vb|w*IIFFoEmlc=*5=<~7wsI;&p~QKev*YKrmKFF^<7-YH#-xvi zSVpCJtQrQ8J?$mV2WLQ?OHd=tKSAo6(21WLQ~V&Kn@0i^la=np`KVmFMH>vwTm0iv z`abm3m)1!44J9_5^BEXoMyr4II;7%^{%I)W!$BdN|pJ_!3cAh;^NT525< zNuy2v^@h*I{~)ao)W+|~Ra4@=Yk-D7eMVJN{FY*@@%u*e?mQtKjIv*?Fckl4d97}V zzvtbg$mdk#H(Zu9%CwSIw|C$1L3YRTX$nm|!0W<;yttVyJf(}54wi<;;2xfUyUt(7 zU>!wo5n{~mivkLelfvN>#y4*)Xx=nzRO>ZA@0{!>GyHLlFJ9Un)QJb#$qpw6cUN%gbo9Sn+tVnm`UNs(QlWoqVA8b+_IY@((pzHPK~1W-ShpHkG_l`0Uy1PAZb3j z=})Jd{vNenz>X!2ZMW%GGm+`wz<;Jnrn{|W(2(+V(iNkK_a)n7@y z#LmJl9jXqRysw{uZ_wTNB-cF4n`_6W=e3rZ_`4RSP{p9&be^!32v|0~R5ENWV=C!O zHMN#aGRc(rQ%PSav$d?)cl4){W&TvM%%4h@mH2)>d1d}ovdl~+#rpR(X*u&nr#z&8 zNf~p?ZttfcTu12rPay?kNv3q{EKEg2AMdM(Hi5|&kwzBMF@;AFt;Q$W{Gd`gD!$^- zBBGpZ5t+jJ-zp*slJUZw|0dV{Y>?s8ADb96H!&qpc{B+}JMTTw*kIKc$u0YQNsOt~ zPw-D&$E)Y}IWxU;3E}SxG}uY@ZqA}Pi&DA6PDD+d71o}I=-7$67&xp zWy#t4vkr{^Z#5BjeU~|2-AUdVuQJESML7CH)d_A#ABPjdPp>vHrQQya@4;&K)4MdC-cGq?Pw!}@ccRk!8-YGJ zy^VzM(`!gfS!UC_DV<&?^I1QC3wlrQIHmU!{8QKQ`r!1Y5JKtgT&V%jrgxHXo2}um zrPF&yInAEGk1M^imEQ4L)AQ9KNn2#{8+$-AD&(#HCaKY6HLJIZBWb*$Y6N{W3YOCq zLo?}_q51QTSkG?SarFV_i4XNtt3SvDu0r6pkXJyz4;9yY1t~9vvX^jG7w(%Btn>|n zl?s%K#=39(2nh>RHEy!n4R@hUq?1l`?OKiB=m)CaoLu>HWs?<0a^^w(FWYf-7Lri~#m|Sb? z9V%D>7Zm>Mfte`*XBS<9n}m_d1b6}#Un&@N!hW4zq5_lmPr9)s~u z9VB>nd5Hf|Y?lW#kTs9uJL)KJ^$kp-QkJSqjo+3z08*`g~bixAI>nQ`3$1gM2exhCq!k-;$@V&tpo}(WTr+W zixh)&T?JD!sfTId>1BRIghS>%pCqe(ip)Gy6G+>X7iR}ae9+$ZdWC1Bv|tf zq?wUm&6RS?Ufm_C?lVD<`Y11F{nN9)p9h=jTRP#C8%iL2{mqOHh9}{ayFVMZ)j0HwuO|C+5po6X|l>vAIu#5`6{6gsgDGt>{_let={1kF{MU3HQ_lA z5?XU5TTWo4HHCFkc&G*qU8)a}5qSk4LWURO9gIF9V1FK(=IP+VJT%|bYTh!_L_^DqD)W^s>;bgqbeC& z1)m4*TvJ}q)^x4W%p`qL_1jcK^C|OCy*@_E_!zxu^rD64^TCl`wpUO_^_mya^sA!K z#6Vvf*)dHPRF%X8}P0==tWrOgcc6Q`PCfs4)Lj~(HHH%_2pVf zA%~aypD#01MD_hz#>$=$d!g1>I?R`B7y90e(&0`T^|dpv0cT|cubInq!#&ls2~G8F znDhoI=~mvPt_nqzUM~M1gka}me>r~F4c@Dd{C>OLEHxoQlVSbNNH#^ zshE~u(umZ_M;#=3q)shdEZcmTj1j~9bmh?W{RfNB3{m;tv&!HL-Mto*f?1ftv0OR0 zwFwtA4)Wwo*cN5TE5aIm)sq@JU8{^rG98RJ>? z^uYw<*0jgDSdc{4sW{?CG`mmq3E< zn-5=(>b9Y`y#%F3-P~C9pNR#XAE6->H^7)08#1#ovtV-P!-l_jKWVco02wR&`U}PV z`rG4i)%1Xk+~@ZKo)c7>xA~=MuAd&T)7!cepA{APhJ6=ey=|`T`#Yr+`Mb2R5yNn; zzG22Bly??wH%;&o0#w19?OOT~ujq#U2%37+wtGXkL2yXLT3-zo?XiB3+W3!_!Ca%j zNJ)ywq@oX1UZLAm;JoZvfJG=oed0St4K{Dz^FM0!B@V3720!2i4T?QU|iLdZm zYNp;$qK1Bj%9|XoxsWWhmTsV|a^h%33!57yhPMpg)oPfZa&I+PZOVqf`g*u=ZR_e7 zH6S;%zwNt}u@EJ9Xfoq|Z+iI9Czc+KT6xtWL^2Jot0I~-Chmip$5o6B&JpMoD@LOQ zYW_BR&EL*ddH%$&`)~Tur>ieqCt?YzA&r(*w1+4iveT%!9iym`1_CR`zYe2_0R{1W zd>BchDossyq@7U=<;ZTuqjsb8y4Zs_w8d%XzGl9NdQm-tM|hdK%lv|UM?#VUTyL^v6L;l zftqe(H2Osuoy^KUN@Jowg_f(Z&~+H;U`)hHFNrWPuAl~e4RcsxjGHU&)3u6128@nA zzv@-tm6*dOR~4ucpp>pB z`utBzj8T^kCvAHS#^%;}GDRa`L^m5VOgAIUbZr+?>6$JEqMz6fNO_9o5mD=bE3=T^ z7GtJD;}bengehtc*e>}@+*~gkUw&)6^xk;mj^Vq8KaNs8(cQRqpQOb60N%9g{H8sH zic*uFzIix}Xp48RtMPF^R#W9pDLSmj0CP zSkeS(`qUHNkXuwe_}4JNu6Rwkrdr|^8#+JPT^Ob)Y)=AB<62(J+q|LgE#cYbcsb&iW;RRHBvelLdVqeiq;B4gTIN0N=-^PLQgj% z79qnR@@GIZ^ROXb!q$;5|KiWzd}X)6j&Bu#LYD~TY>=BzAn3=@hq&dD~K8?`>P)b-$HPi*d^Of>46|F|dOSrIS=xtq${7cDK=(cs(h^s!t z&?04>;RtyR7l*1hw-y&@lc}|s>9i3Da?6j%QqyXbiCX=4Z1jr>gz<&+L|o|x>OZQ7Pi9l{8p&3aqA&x;>zFUASM;N5W~oATZB}>+6&jup z;4Rv2f0;MN*(SXTDTo7BU=ngfQKd3B3xe4GmwU6#f=G^YlopbZP=ENHl@ z@Vs*ihYcMzFQ>HI$snIyQ|RBPND8wS%|*TEqAy%sv$$?(&b-A7pa;r=sAYkJ6H%qs zBc7qrRZq%Uh6Rh~)Yh1C7-#g98f&*U(K*IH&?lM&fmK)4JBB6xO_Bi$HIbZ|$V%zg zfqBPZUpBX%tpwx7-qWx_+++AZ_zBOZQ@A4)88Uu%dI(Ql2i)Yq4L#rpaEs$#0DO%D zUp_cz{W1&dPO+K5I~@3!&*rReu<(CD|F+NMtgm(8-}ivO1ALF;e>QNv1LqZH;(OrJ znfU5^z!w0!_}Wg&41Yhc>wjMlczF-_lRe`9_EVYk{dQ0$zJ9>%mi|uaaM~wx*3Wm~ zFPw~~ zC;VsPKGl}H+)uFXb?70kblfikp5(xvC9LAlKCT<@d$1j2aD(N3JnrQ-yxiYHs9o-5 z=n*b)+|L6pcHox@t8m+`*=o)IM89y*Zoh^bcaEpaQ}DNdgLW%;C2-IW1kd0R-b<`` zwuA3j+=e;$1fS~Q6C8H%3FiED8vkEmkIaKTC;XGFd4x45px-#4<2lyu;|Qy8x-mxP zR@`L%A8Qum`7pOjtk-!2eb4p~;77otZ8_a^6!{0%ITHB`);T`msj}v4NBXeN1k3$* z*8DDK_TK%RA1{X6I^dvP3cemV-;N)G>utO*TJ!VP{0QOxXz^@k#lQiQG#B`K+rhXk^>VVeGe$ofgeUF*>t4t>q54&rb=c3d z_8i8yY1Uq^vChWrBJPnv7{-J9t-XtHk=l((m+(6RJKxX~f^=0Ll$}Wn6RAXFzX$VP zYad3~=dHaGyXr;ZyD+y{dok{tag+Nna9(5GrMD++-R~jHo7P@W7|vaq@Ws#-v*C4i z@Gff)5&qS{9s6n4-ho+TK4ryhD{T6;U4 zBiGPPKz^?i$G6cQ9QRK-_EQ}DmmPb#W0$tX;5_9r$KLGNZ*uHEaO}Ty>^jM4RvE$B zN&`6Rb`2cdXm0?HKwhMESUM^W(kGOLIX#&Hn=_MK)(|A6)0MisA%O8OsaeDw_ZcX9 zIth!>9_+?5x?mhU(nVae_=0)k7tdPi;uDEu-G~>FU>!Hw+uTD^4;Nx|FCE=*SzHMl ztQFmmhqw{$qQ=GZD7%YmYU{L2b%XcjMXahNHH!mH$EFUT_YgP2jjOAzU9f~T?9{93 zyX%L***!$}f?5j9C8LLn(X#B6T~+;Dv_PjLWU5=Xv|T18&uJaZ#&L!OHW5vXSf@>M>}@#*ih-_>{LaD26D$e6Pe?Yfh$Mnv_Fjg@h^?|@-TCt z+vu;lXu-nz+M0^GhPuTWr?s=|LpvP(RsZ1IG?(v|Og>xY;d5$!hjU*0J>n`ppO>7O zL_Ae7b90(x=$AfgJtBZJ^^fO}uHw$+`w5!#59jnRjiVQxY9Rs_61o8#!WH~92MT_D zos%904$WI{wsfr1H#~@J&A!fS7lY$Y!mbC0`*ZWv*IDa5;9yFdQyNr)Ma0r&m8?R2 z3Xf>*c}{u@G|PPzfe&J`OgcpWxX{YI2Z^|J|Ly@#HvjH(1;qqL&QX(^)OILNpDRGD zu6O-axrCI+khG8AfgQfPe=uf5YnkSsX{}Y=a(YHCJyTy*F#&_LHDl|cuj*Hnc96(9 zHWBgc%iKhKEmhqF>YHtFjM;lyIAZyD9|W_McZk7E-@K!@}$MeO3EO?{8`$5w zktO&wVd?eJnnUXyt*_d7GW8ufWBI>P)sd4*FItZ37cA;ixe;qNcn*bhCw_PCBQLby z^%{2tM}grrtk+mBcqjROh=;MJKYD+R`5*Xee3X9-H}w0gpXb2vCf09qVCnc#{41;p zuVTH%=pgptF^G}SczcM0?<2fyHtIrs(lbMOgf%QB6B2kl>Uz#_Z7H()4FTD zDgR=}|8(47SsV9!Oi0URC^n|PC4w=GsWDh#q>sX^)iM7dJ0Xdlx3G1LIzZS!C_?m|wN_N+Pbr9;`9fI`(yr{SL?e zE5~kTz}+*H?%8*@TYB={?G()O9p$=CqwRsyO!e(jq#K2q>B{wgqKC&^HHgaF#Wfc- z)YOBkzMdNgHFumlVPSn^?GoXaTN=8orXjGKd7Yi8ndw?z`ghJ8KFm%7jsBh51#@dA zY8D?%>;74Nq_4r3(tJ!NpYabppA#Q7n9oh6ab5`yT5XdI{nB%>UgmQh#8;ayp>ab- z`sa6DA57!uWj@yhj$s6y3J%j@ES3*5pDQH)A>ysFbmYTxb8!h}U-P+P;JA};H>;yM zKQ~`}&F3Bihxl)2s-rtU%4n59&9hG75v^wA;4S>(rItW5Y`vTae7;rm&1~~Ikw!3$ zIlcZ)CqOoTzJK-{bvjszsxYsc^FDHA z9zR?8vSm-^Crak?N+!(f(DlPqCD5(k_ANl0-%hOQ{F1t#OWgtG=Q8fw$mLwwvM2vb zCI4Uer@qO{Jy&45z`Cax&HVh8+x*q|XvyD4d>aY8M5ta8_^lF{s04=dIy8S;;XC;o zKp>mHW3i_5N9un5a&h(ZXD@Oh`Bl9q-=gFn!av1zAl>?HrKcuPYJ0I3B)U;2R>=St zD`)TsMHt77TxjtmEG#&5DkEB1&a1o<2qENf#eQCsfx=}33e8iKn_ditSwa&Pngv2b zu+S8tK_okZ)M0d%&_so1H<71DcwIb|K(h*QV#yPmi6z#d_zYS)q!pWwCAQBidV`n< znOYIO2;#?~rR6E|m@@;xxktUBk1QQw4on!yO|%fCz9fk zZ2TIVAH)m8I@0B;69%P!_>rL(Z*(_348^WaVL!6D6v^roR-TAfwZDf>;o4?jiE!}! z(!w^lNNDVQNHgo>i7{+#JYy+|kmL$O(IQ`@n1!q)i9-ucCqK%QsK0QMb)8K+(2eP# z#WVrQl!vaSK}6qyY()r1i-f8ULoo9Nz1~Q6DU%w;N~SzSII}~6{lWt z>bV}tmzxzo$G;+JYz#aTXPT2Y?cU8T-q6Rqn>Vi7=&inpsY#H@u+FZ9CPHTDD)5Gv z@5iRgm%>#CNCI)+*fOOjx%Am;%QbIct7plt``@300Qo4tp-ZOXU9CJSYn;m>fU<@p zwvKhgX5t!C+r$IiOITRrX&4Y=gIv zScP+-GaZZPgAQWU%#=nb+ATmDQZ{0Wtn&qQF~78xL(}%!aMeiz@jW8ufa?UZ94ZF` zIaYn@KtZIE@R4%J4x5+2sJc#6hmB*hxK+@+rNC#oxN^V&zheF&{EG4PA~5&hSKw&m zP1VQrYx*!xA%oydzB7eZU>*Z!}$(A!ACgw1n=ijJn_C|K90Og zK(G8I`yhAS$tUwW_y^_jRos%mL3s#n1`f(Y@D&a|!GVr#agT)$eoGqPZWdpsI`{++ za_|X0$fJ0#Tk{3+#%%e@|4-Kach>wa{%Lw~TL+w`7x;SMG`+ycq@?kQ?_0&A^u+Tq z^g8$?>u{=rPw*fIpWuT$hF)vF0PibJFK&Ob?!U9wwer0$&fDrWY6< zT^gUlPj=vP;5{@vrT-MXvLM}`9Prxut z$xII6>Fw7*`F%c%Cu`{qsv0)&g0+eE^W3?m}Gt$Tx~*B!2(HLYC;G2e+~> zEQi#?BpEL&F?>bzKL62x<;ldCs7>)l;2fl+3ltJf_-~m2GXrpy0fz-(qX9<*;5-A4 z4!~&!`1nnTiQK&o-Ww0eG4LW36RVm29&4Leb->x4G2#M}pu7Vfx0)CT)eS znP@(q1{%M9E%DGR(EJe~R0~|+WZ@%xxNMm`{{iDyS~BaC&EM>i!aD|KZIHru1zx`n zBwMe)k#|ngsKE0%D}JQ}W%?ZjZMCHg)|}MMxFn3i6Lg4ww0T*5PUDHK#kE2c|KrVi zUs>CI!FRIRL$sFM79^X;C@&yRHoqcUc1F=6+E8jTX{3IRzDKLm*zOgNDN6i5REor)<~B)C5&|R;ln`PvKqQcu%m`=_Lnl$*z7A4v zM|*l&@lb1zw#94lay;Q835qrrF8t6EQZb!k)Bp@YtS2Ea_*7C;~e?Ej^ zhj0IScv$h|tvXOGsQ6=2~R`kJT$aSC_ws;b|4oh zhz_2H_+6iCpZEs#(M3=``)8wI9N;8C!7>&Q0~|%UQW=YByh0f>X#69{xL!Dk#z&NK zDvj%vaSDz1DC2Y*b!Duiu}>MxX!I%Ld>XG)#)VzodfSlqO#SxLfqIjS%r^WOET2X- zm@pn(k-^eJehm426{#U}2LhfMxcxB>QiCj^hHBUar!q)s1Cfypqxoia1pYvejrNmf z`>{$k!#~B=?#ldp(K@Y1wa7-OEtcemD-yJWh1nUc``Bu}XIaBbVC^La z-(y7hfDy{3Y88X}C}@iI!k#Qp%N0UvsUVZtcAo2J;K^fPwU zwV-dok3o-3`bC}ccF4(~DCB)pr<4A?LLb9)P^dy3)>*JKF%pd zuGlFg%uk{O!SCTGvOSRU9$rK@*9R(F$qvqu{lP3RZbHWj59iq7QRrCV;T$`><&6bv zdEgu?yq@CZ%aPAA+_vB!vGRq58_*d513}xf7^Y2)>1X76p z?xw1(LALt5?Kw;0^q-Bz!a`do^Z)9@SkGaK@901PO!=!nH|#l_|5tx3mZm@s5{Z}} z6up?L(&cfBUg6Yz3H68HyS}=o{w@Ayeg%aZTE*VLx}P9vt)f4$Zi_PP3#=Q3hSw^B zfpy#%f)ez&hu~$?r!@pRAX~#JJt5%U4G<5-=p5u2#cDkiY{k6h-!|3I>tN0&Xn$26 z^*TXYg4T*Sn0rS_~>9i5LL-L4&ut`7kH zH)4czC80;@3*xn8EC-O7=HBZ+ILfQ+Uz`d%GlbtiU`7*iuFDA&$7wTiw8Dj`V?H0N zC{T}4c2{WpxB!|1q4 zi|AKkj7R65O}E&&|CZ6?7`+D3!}BHQALH#!C^=OxkCZlK9r8}?+TmN_znRUzhT*8Z zgW1lQ6quWVW^fd|ibz>wxCuusJorq#uQcZr5UKn46L2S{%b6*gM%C(2A=?#*n-C+p1HO(&MMV< zj1S7-xPGo3%jfJl$-d*W3lqJGSX4S6jmw_n^3BgKO!C^hx_z_Zc8P17KJG09@LA0WbPR&0mb?Se1(k|LhkoN*vSI})Wpqfez1JM0n6BE?=#u* zu^a4mHrQVgCs>3Z7RWmPbNpunnHiP9s{$2+4wH%o+(9H6d=#Msyc?Kf5X$bJqhWOlEWOk6G~iSOwQ_uIw82Z8F!uddc3v>N8jeMTkGaoXQpotR5iZ zW20Nuf%2Wf-55lXeWY_KeYT^+vsKi_ zQ^it&f@jimE0zhm8X4XcY znhLZ^2ndQmuVp`r?vltxz}9-^LOmn23_uT^<23ejhHf@)vsiroVHG0hIbpvtboX`m z`tYfP9DsV6N~z?`WX7l>S~tZ-p^uDduA&TYjmu1 zTMLuE@bVTf3SZ0Hyf9OL-1K@VZM*C;S82uc>9%RSfWN$^!R2mlZfw5Pl~2uYrk1uk zPfPvc<+%S_=Q2_;w85=dQr}?cduwc{gKjtveCrz;TuW*YjybfrYP?=`{Q{++19E0z zTxVV8QU;}KZb=Pwvo$n(YM^1RrmhaTc$d_-7)iLijbc*>3TvCAdO8Gl;a&F{SBs~% z5lZ2_^~*fzwzI5ReX|^DklGSYvr(vYm5FG;lPpjQGZ$uHU=+FlmU`-J6ieSDivh%_2|3Dp#Ganb@p>H!y_caO;_=@S;lUL|0>TIK=fnPxGpDSDDXC6?rYt zn1?7WF5E0(A)p1%dtnP=Dd%fzYL}+lt~DCNyz6)k8866d|X8PX_uV}*-Z*vVQ z`mOp&INEoqQaH9`den-ALo=^$SG^i`dk!|&dFQ#VH7&OMP_3zG&>S!-c_TEDnGVT4 z)n5?W3kuc*h^TvoH{TF(^|Ri|PhC1c2A%nnfyBje~CndS(j0-7H!Sw>eT4>dIF!rDeB zTw~Ci?^=^6)P)gl<{56)BXbV>eP>Ks6lyN3S?u#D_xD(UgxRxwz$Hy zRJ97bfzBjradE##U@QDTa)td%#eJHsS860m!Rq36)dpZ0&iey`w*_P^s}`hOGnBK-NlC-b3ycU1hRV5j7U z>HmPlyHjANK%c<306mCiIsXZs<9o21<)r;h*v)d%{wjE`jK|lK2p@s} zOAu;cIq3gDRQ!8kAGG-2A@KqNsfV%A;$IsTe;(|2TKwG-?*f762z&u~vpn4b!Bq~` zs~wy}>Sr|TMf+{AoAsjIFY($1E`a}GoQtzw^vC&OMEomZKTFC*{{)HmHOwr>5cDDT zb0IA8c@nAcCJ_1=l^uE+6?{NowZKw=mkE3oX)*q0floq@qM80$xZNl2O#+t+yb9sE zr5=aDFUp18!~^Y@!2YJiKU3nR3B(&YAv`ktsHpe{p{LQrBmF-G|BdDRNZ`xxudt-Q z6?SX>Ps6^%;{UkB`@O)m@PCg-O~515?~ICnBkW&W{AWqL9D!2=_9HIK^|rugp)b}I`aUoY`~A+Qzxe8iOHqJMK#{3Wzo{Gqo}C%M*Au{GW$Z0`bB4U<*d%e=_X5EdFmG4C`^XKuzE(foTFyN`Txo z*gQ=4Hb8L1HlS;U>;teHR>S{A*s1#$e=7WcM%jNCW&c%_{YvD)a-AtKQQ$||x6*x| zz$XR%MxamNVu9HLlcA5(EdMKDbsP`7?0?tOZi8LziBVqKzc?OxX%Uy@r~PBt%PjVX zU^nY`1N{Fr%C1M*+oJ5`PqQ8g0tb(?ZJ;0<^LrM|fcIfH`wi{jYHS#9@&75@7=Mbu ziv^yFaFjV^I=okTyd@plhjE|dzb*dHz>VoV3J5;Sn7hU96L>#3T=ZWdut8wu7~ltC zn9n<-ZMJFRo-GjiEjRqb751MX?ui29qx=sd6Xx@gK-?Qq_BRFc-U$Aydn1HTiTz=L z_Y1sR;7T|J;Of~ zXM2Eh%BCH|h&+a&J46?h-~KXSn$^_dI<)5`#47HI-g1*QnZvPt=q1~DASl!6#e3SI%2gD)3f z9=?2h1^C?f3h@=;E5%d<*bZ6LmEM|^Fjb^x!CT$RR(yPbJFfeZwGwIx)#Y`Ibp_oY@zYsImG$#R>EF0I^=Zcwo z6HbThr|fs10xI1un14(iwcVhHqcAq;K6J9pcB_P02>18IoP!42F6Iv8OB9%QQ5qz! z3yloD#mYSgWylwEAJ%xpx5^i8OU1knw53PFP#5i!VqOSyl9)SCuT}|vKk)W2GG;m( zQNO>4xgX|LV(x%hy^aNY2Fm}o85ekZQp`Cp^GsfqAK^7|??d{$-$M5?xKsI-3WIdc z6tfLxERB?V4j|QPF-#8J*#~L9A7wva)(iWf<1s+!z7BgX(q5Vu!X30onTLR%)nd*8 z4ynVLVVbap-3CZ=H_AgAL-P>KcZhi%%pXg>)V0lI$F?6>|-9t%5cvxeU zd74{r{^D6)YbfQ7ju^`y@guYcOPnLz5H3bvVD1L%koe)bL#U3^TBaLE8D^z(>*@+T zi)wrgVWddU3&lZ@P%UHl&8=^!tF39Si{YhM*Vc3*dZ9|!JO>DcGPE1#Hebs_xG<^> z&UIvh5ghVR0!GM)oXmg`jz&0m$w@>g0W)+AFOH<*Jzwj%BCy1^)Ve= z3LBdv3W*lSVSu;3rlGi|Wr>Qz$Y|lbu(oVN<8z^Jd9AJ5P`-PFYBj-UJ~+~5d*yj> z>Zh)Lj^wFwh~Zg=gQ?k#4L5j3iX93tVhYgPcGLvKf28=cJxw(@p&hXRroT0Q#d0sG zOpPKjxy{Wrs|q~iq0hMXI-*s%m~=5@Ve5u`g~Te)GM~{Jd3oi{9*_7K77#>JdAQLe zrsCzWVr4e5dfy9G2zL?XT2~k9U$mp4O-!WrA~?YZOV0CTl_oZPj8>LnLG? zlTI0SFvmg2#q4+1T+5qlmXnSVHFYwYT1MBEU`m>$GV5yhcwn80{3IqKNKtU zcdUEJm8d`WwJT8v>mSP2NjsLm$GnI9N2EbKycv}SmY7OM0>Fqm2OF^8;okE(>>+|! zf@0gK_UMemdhla9#1*zZBmN~Loml>+oRA?GyMS`BxBM36)!h4Z{0vdnx)k=VZb#Q2 zkUwOhDEj2RK+m6|q@N(jGXeg%R?@YS{$b}+;Jm+1xn-C^dDli?(KK+0Dd(d@IO>S& z0f`i(I>Obd-%#20x$k9tg?Hd2GroU&nm)Pfb4TZYqUw5Ka@IlPy4uf?5ryl!?x6dE zNqYMfLv}8BJAAalDNA3q$r4Caz*&;-BG2`Z^YK7%`en>)j4AY;Q0{jLi!(ELiavRN zHca}8l>=kf`L`#sKHiHUn2EZaqyfK_52hHhL(dP%ZaxXOtoC@{pZwdM`s9I^b+%Ww zdkBJc+tSq4px`P53ETqaxgk?_%f}cF8fD6E*+NrnnX(B$SMVmp3|@hsuv{GF7K!F9 z@TdIZrSN5+cntQQThve>qT5>`Ft?DMW;_CPc6-b9>IMjTwGEl~?lyHWMu!=rCx@H~ zIMA7YEFoK<7WWNttMMS(JAbNPGDL|!BIA#!kKXPbIMKML=kH0=uRxv`>eb0vpZP}X z)h@>VSA+t}yeIVd&787UB>P_V_oV1o4E!l1Gs$~{7CF&skz)9iossIrD>lr{2 z1xP$1)>?^mJYyZldyZ!KH%$q-z^#vil?5y%25tp|-e}QV*U&9?i~bT-2>uo=9$bbW zv%bc7$35j;kgtP~A5~?IE9ujxWx&$$BFKq)9R3MJh6CYE#{y`)dw$S(3Zh#4gR zr{gLm(s1KF+RZR}kB4Oj6YOP?1{v}VgxsTakGY2&>27Fw>t1mZg5Ao-MV3l!rm_@f zU##tEy-zEF{3dRPlxgnWq+|QgSJ&2%7P)sZuRce*QOVAJq=37(COy%75Dng~R9d2ic(0Pz3+MIBx>WlM4$vx4JO#7Vd)6EmZ*?X#gOWMG=$o}QulA>L0*Q&ipMlbVbm~iVFQ|<}ywkGslD#J~-tjUXjPRA-!YtoDN7scQECUU!QDwY={}c7=ll7S{UOsO3 zYO7Mvwa2lej%Am#uS0*+X4nI{DWH3SnQ2<7%6O$WYrD4HQ2>H>DIz!-VGJXTHo_yA zf2)1CWS{R>Q3ysWI6AY4c-+)+5Ar_smAJef8b8FeeUsi4uU95;;J%M84Ky1<(l>tv z)PmSRQJ6R)#C32i0yeUzv~GdatR9EEeJ%&sgI(JH~4REwK=-h!&N(^ zeHq*e16n>mQ9EcIzvu_-Ln~J39UXw^jvs;En6ttRWIS+&H9YQce;NEC>+@eK{IKt% zfpaYMK;=b7xh0k3k%}s5)^^8j*RVw{2=zA|g2uMOo+5(^-pVxjm$e-c9Ji%&h7fvg zw68gS6SOz9KM^;NVyKc3Ylww;;{<;@t9=t}T6-(>G@PQVM73Kw==4Ya>I=LB2||zk zThsJ2K-bRHXD4TU3i37Er5y_1gM71El6~*_x2EW447{r^SUGTl>OcOiiDvkCBYXnF zFH+&-8Q#h8N7C1+D6emy_L5fBA4Cys)%vYhpyZUZ#?KIILeXH>q>|Xp&k(Wu;C49c z?M(xdjQ$%-#2V{`7$VkAL&W-J&KBYIf-zq>I`1VSNPLYs_B!OkIre(JC{dp=(ySjj z;|Fc?1eba~j& zoSXJ9gh_8-8J^z~)%Ob3RQ# z+)&dlXy8CU4^CV(cA~Xu9|!xMs=Xx6dmZVwF2};w;pat9h=B9D7-{f}SZyOt=PQg; zwVR#hkIKngo!Q;>`O_?nUXcI_S=tKXI9ktZ&D!kfd<)KjTW>;0qvF3r+H8lwt>l!C zP;oc%2sXn%I2k|sf+h@-)IghY4IoUvxMn2vFF_#Q0Jx^I>uulP^tRm~1fK>Eljy7R zr|3DYT4AfcrUQl1*77&JY|=K;K5(9PLu-#3r?6SP^`fcfV0az~*NZ}9<3C_EZx94- zg&w{mYS_%W#%@|3(*$|u5G=<};MTWdMCTI_BSg<(bf_ML>H-zL4ZqR&Eu~xR+;bWI z6h?moc?53#KAS@I%W(4yjT}9X(O*Z*AZyLPj+^-zoEYJ$q+Saq%0!CA=a*II%_x{x zT|TeOU0pD*G`D10{{M#1zhw^|mcsWKQuw)EuV-14SIOZ++?emKgE{1?QO}>(ty*5Q ztiD#s#!^0*Y@VanVs?3MIVus!dNNo|kU^)IIfR4x#=A2EU&p%aAFadw#f6UDx;+AHLex)-X)DdMT^I)nhX-y%v4=V zfatCqW)Q*Q#B7V38+}dYH4Im4tIKGeX)R`1QdNkMV6qPv0;GMII18&Xhk$pD%Sa6B zR3Rmi=H^kekjI?qvi@c**tu^RE*#)3kO`A>m-C%F`xYy7QWfDIAfN&XssrX6x#8&+8S z{SvQT-~#wRf^DlA9`9X5#J>`D%J7-~d{cw@Um4w?S%1l|jOzEy4JuZjCAfr|vX0a=do#eS~9F^F&0kJr}l97HI8+CPE) z3^0wDKJ5coH#7fUflmlrDUh-i^q(&9GJ){|A3z%P*9G1L{letMndxuFx`qCA0xJMn z?jH*rFYf!XG@<)r0)Gw2c>gAL%A(LdA97~oTQdE_qjAR!QySx44M_hh1@iJM-MO%! z`$U0X*(2jW2v7RA3Op^!pL%-f|5t&K1K9xCOO^l0aQjc#&Gx1Jao9Io{MW*b<){>R z8X(hq6Ke*-M+M#o$Z&jDitbYc{y^aO1mfM{Q2Vl*55OMEANKcPzsAfT_P3EJ)1x9p z!VLmj1TGOs{jl_>l5oO!fuAA`+II_V6i7K4x)%sc5eWWgsQpqCEvW1wp;+;aIM(Mx>D^Z zLdXw4Pt0UwQ>KctA{i(|t(Yml1SjPV5Pk<5;ctW8ls#Cb%nV_(k;7xU|Jq{yoyGjT z#oT8x|HWb+w3rWD%%`G2X8LIsGZ&Did#S}d&tk5(m~XY1@3okJXE8r+F^A5L%!4#6 zI+TP1q3OmzR(trc4X3KLp0eh~T2Bkkm1O2r$IT3{W@Iz6vdqPdU&IL<4E<`Xmui<* z*DhIFz1WA7??|UbHT5`kig5yqBS-USnMsdu1{pe8L@}aI|3WJTvuIb1Cc}wM{5zVMAkM9ge^nLYNOlD+sL|RC{6!;*aNF-$wuLk2A7jIgcUW2a0?)O+ z#ikP8?|SZ)fWgmkN{C_ntJdsww(m}w#&|6!ROnc8AvhYfczt4=ryr)JIWR3Fm!qWsCf{zDZYqYU zZI^zPT>}IDs_9zEPPpDe#ZT~Xcaw8&(|o;r(__-3{`N^W$JzrZGy;|KS&KP2j#Mz( zo$hY%%#k2C?gj^5nfHM`4)*%E5-0$u#A7VuDh4x$pXGE%Mst`CTR258P1fhQkWemu zD&0Z+6eQs#4Ck~I7)zMY^dvs+F^m2cOs_oYYuK-*f7Kv}%UH^VQ^bnuG{{S|#kr;V(6g%X7!Pk)hrYeshaB*$$F$P^<| zbzd(OTRLw02nQwpZS&PZm*NYW?KxGoXC==up?0X_eDooc#|WiTI+UNdajf7hVyWCf zkh6%TREGjZEVY{jDME$DxpzXHB}1<(C{Yus^uQfXn(}@$JJ;8_?_oUwkk}clRQSM_}qB^ zww(Q+vA-@@qP-We|Ang_fB(?L&05JeZ70-kttCH=dQ*4%`$vQOH8%4#Fyaa_U*j>z z`2?f9)U+3;ySG6foQZfUlCj5-cJqXh%7~=e!UH&aO{_d}Re?nc= z!$KuQbp=t)H))(6pgO}qHPKtA&^w>#1%iNCAdX1o5QLFPEg`C*(uYQ(T4B~%LR3#z z=tUPnJrp%a24bNJG-LnIfeJD_?*K%^{3-Y;_2Oqv1AZ1X;YZPfWh|JF1#1iUfea*l zMC+rdY@ubcPsWMCNcncxrRBcGl#dzAQx5Vo=C7^J*X~@GpNE7Qo65`CAL=&r-3nYw# zLM@Cc9^)Vx|28MtxwjcqG9MwGvlXTajMG2og6S~eFtHN!t#Uy*;#cj2OJOm7=9Iw= zD5#uM3HOR#M9!azpV}P!%rH}EWC|!z<$ipPOkvqBxD+vk#Y~|e-(sfV>4W+{y=^bJ z`D$3f!yHy9y)mqCNU4lYWWjpEH37c{F$0Rh^@r#>@SC7*S4v7;Nb}n#Xb$gqW`p7) z8#8G$RZ3K_Ke&xzsuCN;Oron%%*1dpRf&Nuqr_&aDuZ4l1BTtXpLYW^-%hO!*lfz z2@UEmuu5Swq7f-1B#n5H(TM8hJk0v45kpVr6%+qRmJfPY76bpryLmZ8{T6&VK)rL0 zwdq1pLrsSVxhzem-rZA8hu6YlHeCh#aJeF6B-Ah_B9n@sGCFBQhk$DWenD*Ui*>{Q zUqfyG1}-%e61C5Qf53WHp;2l0-0SGPf#YR2%9ul(EXmQ;;_Z5j3Fow8{P68S=e#mU zDqlwHcckJuwRv~|P(6uO1N72>#UEVpPT@Ra4%K$9SP3%xR!VZQIPc@ii32Jf;mq(Y22q=6KF)` zq7WRBDuPs?aPv6;omB`tpL+|?fqC7IR8WX{*jZGfZZmi2TpKx8PsXhNnPb6bM=D(B zz2r#6%YE~Louk zU8O=4o{}6_z8%d!E@gX;e{;P5pu_hp;zJP0S!&N5)~mKftQX-t|8P8lb6?`DJDdQc zCm6Un4$D6v*ab%}89-HlYi9)!B^1aYM#PyABj5}Tzyyqiw7F@)EI(XE%IhCK8KKon zi|#>R*Z$@&l|Hg=?BcJ$`cM76ymR{HhN%NEC+Fw)-3Qp+eeuPQ6XxK37G+a;E0DtS#F=g=n zeVxVrlAIr0B7FQIFabaZ$Naaz3xrR;8gc1xYqefZRUPQ?34%uJiS zWb(vWZzf4TEdS2KXYw@3_Z4ULCX(q+28U^Gw3u(TnAcm(&sxl{S8#Vb_IIaYB5XKNxYsw&kt;68%lEPWULVAiA~_=Dt+n(V=ta`Am+ zxVelrucSG~-x@Ie2jNG^erNVQ2K^@QbNv?>f{f3;>xE$Vb&U8e_=DYu&%XW$4j!yU zBtOjj3-K5;Co89D+4?@DL7v-lNQ31t|BRt%*s80K{!Umw(nv$lol=f%6GEyL&E$ZO zqw^^f!002N@?cb5LJ7cdEE)e!q`|S)#6uX%pA|R9;&q;jwyZ|nacB?gAMo5sJL$-= zc%7X{gSc#pN`v%?bcBEB;)})WY;YNGgw>smw?I*FE3cDr`7v#vJd_rUNBkwbMwIb~ z%vKNf3>k=n37$kP=tPPA6xxcGfu{0ms0ju8%$=y0Bth^xfo!nAt&gDqip_!j#F>b_ z=}e>(xcwbCN6fu?R@S?1#s1CqV&4HsZU$$nIsalMkeu`kr`cvy81EaJ)Hr)h9 zfoS$7D0M?^lIivV4vO`{R5Z3~-ABa=pY_U^!a(=HXv*|+^jLVE=ue_cI!C3~se)pp zhIOr5bUT|b&+wh7iUazziKSSJX`L3;10x~QfkZ*RgwAHqIDckGm`X4KZ88A8c$>O z1$KSLk?DR21oOTJ9++6c@$?SHQ<0N#qsCKFGCBjE#u*G~kKyP=;RtW-n zciip9?rZ_rBWb-jAj9pGB&M*#k=~0GvfgyuJ`ObdY)B11)wiZsFX^86DiU#Rb3C<8 zujreI#QX3l&g~R#0I}2DJJ)G#+vn);LG!I!2#n$6GF+4CmSP1!!*XaX7LYs9&^>)ZW$+o>{3^4>I4N z0O(9dhM{AUG!K)POwDJ=Z0_7*h111K_w>ksf6P=p(#AJW>X#eJ<)rSt=jJJ>9 z()O(0OcMth%2Uy+mAbT3^^)D%RdzI@mb^xLJ-e+BTUy6$m-2k9ZCiHRbIN)KrOCHV zm(#H$@BHBU2-39l_kG`N{`efLml5WVeG&6V8z}^?(%=;l65qmPc|rs?R|1;(G6FI4 zdzB(@;Tgn(LmI1#XW$$n1R?q})wqP@Ry%fX&^?^{mvOEthE;X4f2v-HerEK-e}p<& zk47$=>Zy<~H@fM7BYiLw0KI;v^ukXqUGPKI1;O$#dSGPt+n)7qJ1+Rd`@7Tj^R;SM z-fwP0W1>NKrtNHg!mW%W94cOiDYdzaBG z`@y!e%m=uNQ{QcL(SCN(-Ms8KbscWU?QwMOV#h?1_I03R`&TR5pq>P3v>op_l?)lr zL1}wH;>u67JyI-~0-oZ5~Mad-QoweD2{Da3cbc>rFu5Us7Thxc>_>t^y^0Pr2SB zt{9%clyMnw*-qr+Nd3Tj98w-|r2aSRM(<6$9XJo8ah!XT!oRb`#fczwv*VUuqf(fD zHTNTW5k}c__3no_Xf*c|QR^$jR;Q%yyhMDEEZ6R)Q2n3zE0+%*rv`3R1Ozg_EhyVf!@y? zRXmqQ@_JDkdcA&)eZP)uWPN%u$4^n3H>i)rg|vHdM5AZm3D>ROX6+NM@8k6A)%Y#c zE{-*RUFM>%5If0O#Zb?|K0R={j2DjQ&$X9)518W@`GJ5qx>{5pGs+9}J4-fUBs9Cg zYaLy+(UFcCRDR(2$?q@N;8W~7an*)?}}U;*ZX zU6?a4FJoJAD5}45e&|Q%u6I9T%nzG%_d^zZV@+eu51ZJFpTK%bcXwloz_O5cs2!b$ zjLy{wfPG|!qw{7CmK-~}*C)e;cD%6Gbqjp;p>`f$e`P-yB%KIilBZ2gjJpw~{_B*QH$ou?uXy*)k>1X;ateB^xoa zWqzBY=C?<(-5b>W214|Z`nDsM>Yt#?>G>G! zI}LgW*|+-b=6cKg6MY+qmC26Mgc>&^CcE32_y zH`g$s_4-upO$`?b)ydjCwjEA+({N>cANEjKT_{rYu_Ha`xOK4EBdrflnyR_^{1?^EYfILU<92Gl)bZS%yYFlq3_i7W&Fk2waLd)}de`w( z4{oi;qhF(l?kt@hj~e|Az-Dg?13DK5dJm^9}T(xb3{EUon*RrFIy%=p7|r7ES!Z z|JQ^5o`akJKDtOd?EmmMwE0-jpDo@i{D1J|HG z{{VCftOa+Uu|9X)wjY#h|81;OMc+UMim$izqoocyO19*neftl_Z5~}RI1#Iv0_^lQ zcl*8qUJ*ZTYu4-Dx#$vETNqT^Jn>ckd&f=e!xND^yyyB4#d#YH-GO+R5?W7(Vp2AJ6jK$+XRz-;>pVdy(on{q3KaL4StFy z*0$?Ksbqw3r}`xvGT&C^MVvswcuYmg1Gidi{;dhCzf#-w58%mJ95JZASj*_iQCpmz z96PMosU#S*+*&@xk5elj@bZoa*H*ong=gKJia(ENJk#a<*3e%EOrekGRvXdaefXSq zoCxFV#>aEljXb4-zz(YEj7#5E2V*2drl%!#%Pq_q&{Zk$VW#3Aj`Uc#BFR_(3*BdY4;96$=jl5I21c!YtFE4x=kMAhw#kk%GrBk@E zS+m@gIXN?9a^{aNnUv|8QQi2z{mcq+umZ@zN@C0cfo_451bzn2EB)UWm_ zHWKX_0#|`cLi-^!DB=CMU&!-8{H@1bKif~E>?>g3X7O)?oo9h&csyYlVaI(&mG1C~ z2K?m2$n-ah`!57)QT}72>{%!i%lR1kBH_OZydC%Q?l%q}*PjfxY2v;bff$bZp9wEu z-vm4b_w1ZfZtAF|5CGlZgqiR@fq^lo4{*i$jfdMjac4(mxOXu|2!9KR?mxyS_8NOQ zecoVC7k8dIG5kT?qq|@7-#Z#(3m@I@7Wh+vHw$bM=s`T56S6$-V9d@J_lW|Zgd5X& zK;XX!yhC6!^rrK?lkuNNftSF()?!}(`}-DqG3-2JHNzh->1=}>M!$(aq_du5ANl?S zKg|CefhP$(j0EWZG2}0D;KuaQ@v|Er-Cq#+jKC)a-i`2Pc^O`Z-7GKdt6?|GOM5l! zW_f8Z$H(-G;ck|f?l@^t?x}z%4rOi?bP41UEZtdkLU8{T#Bfm%-C99(GX>GC3IZrd z)G#ia3P;oGejn51LD+bF6Y#n4orUjgeCOa}8P3Ib9=;#qW7#IkSB65Ij7(UExiq8y zv7Xg5Bg@(u#fi&`@}*)PE`soplx^slZ1_ zH>iQ5MYv4ZyvSC)v;o=)Y}LkE!c@R%YW}GqWE(O(l1szNF#!Ws~*a8mWN?&)y)c4FF7(}BLq~|;w8DL z)YKz$Gx?yTty(=8XM~NFiiEP@WVUDVGH8-8JPduK-{!vMq|6Kn9@00ek}?IVV%@i# zf^lJUahza|#24!?fVD$80uX}Ms}E#F{e2U8sz!+qvS!-{!cKZ^Q>Sq%3CQhS=UdiP ztyY3`iN2%A_@wDuIVo8FK;AlO1t}a+Zf7UfT{!u+Z2(;)4M0+%JBnD6a9N^0CQb85 ze@`HtSpMcd#W)APM)#%aZk~9#!3%JfIPp`F0M2LyxXeoO81l_j+v!fmfsyWZ@m$-T zf}J&we#qOb#%Twbmh-_z06W!@N}+MZN(V1sJ_T%f3y)WAaB+iz)x)6cx_Zplo01&3 z^GB#6b|y(0f|^psED4VwAj!h=$Ym9jDkNGQsMxKxGjCu^G(0m!=i9-0MJn8Qn60V< z7O^R%eAJ|5D~41=3WyymNKGH+VW-;YhW35HAK#qLk;{NZ)4@o*dvkVS0v@RE>@_%^ zQ1W?BQJJ@0FDmaUbb4<<$qkWW^3w{G)UP4j&XY;t5OolC>Okq!-4w zTmexj*ep^FL$G=dAO+MA(!=nD^e|9_iUK>3HIBzGcaT$YeIp5S4Y-!YhpeOah3Xuu zHOQWWN3&D(5|>_)tXC0jB?|Y%x(6HC_#QWxW40c5zX3S8f%!kKWM7Ya&~Q@8K&D{= zuFF;69^JS(PMUV(r;0b~7R2M{w1Lq9AA6K%6Mo#!F^O)RlYpm#i>W>CKBncE3$9Z2 zt4hjyzT)mbp$^b0dHPYc5#8y1rU2eK#plOWJfhDi*2kg!k^>#H*p1u|32M|`4?&G_ zU#$+JX6{Y!wu1qUP4FzE&oDCh=j?!}vilJvE0XQV&g_0qD5L6r$Q!Qe4QuInWBuD& z=|^~iMD^sd(&cW=#}iT<&r^DWc+nqX*H zq{=$u-FI9k3*33OF~pONA&wkO93vkS$H)yvg=1Enl7SU{YKXrHM1zllm2Jlr!!uL) zj5~%pAMOs_P57os3MbZ*8pHy~qftYi`sl(#{+Q!EQO5hP(Q_e-fbs6=ypLv%`6NeY z0A}E^ka(md{~SAh7GQun7bO^EAXMxaH!+Ms9NdbT0_r{s(3*(oK7bz!IT(c1GbDXp z_1h6s8lL0Y6AV)W3m?mz4;oB*kcJaTy&^@g3iS#fd&M&L3J;3`R&^)yekwL zxE=+|C5mw#?VQODGmjmnCcz*Hp`wk@%pekcbqyUR6|vk0FpDG}gG}rxOk}SBnJ~|_ z%>H1~2VWZIekR9Gpr(fkqZ0sSyu5?cb^NHC%Q%U0L&^ke1gsYl70StkBb z233%WKUB42VBMq&krRI!o6wy2ziCpjCw>psi6#{Y$@TdMA+wwSi5q>Ukn=L9LC%Z8 z#Xe_dnKwtDS>9Ea=$!&2LCJA$>WXxjav?^L6Tbpd7tm-7*R&NxVr~jt6IPt0S0pM5 zhv}#+S<&l6v_mBRA*Yw9S3qt$0jKwnN4yNfC#M`E2fdZX0{j$DhaDHlm8(Uu0Q921 z5xfOxhKQv0skUbz5rGR`_$f_AST!iI9s!*#*|i-LJ?aPX9tcX!M;y>u6qOf&BPfn8 zbU8WjFV>YC=2{NGay0;rxeFv5OC%w=T%#2h95q3s`C=y&PQ^;FpTRJ4JmubPHkWaZ z5yGF6o2GIGS)ff<1lw1u7nXBzc8wy`W!~9YUwCJrFHl^}9;oW(HS#$~8A$WDb=$lb zYj3d)pb*%b2=O84)1Z_n^d6un!+qMGj+--VUVCQuz;PYz88+mxCKp_Hth@|KxdTW2 zLp~{3;G@rtc@Zm4!fDWF)(c@tE3vhpB|_REbI041OdT>GUTbsTLpIpT;mHd}9>i!>s(_a2GlS-Om$v zJGLk}Fe`ujbl{^u_a)eR*sy(x(0Rpaf&3oE`9jQ0pK_LTXIc0z8qF*>yO(lD9kazu zyi_q=*j=bEK!`s?ew?~*g+h>@r_88RzL=fB!7?%5k2E`AHhC>~TFehw%zw0)doAWa zTg;*DbXjA)xf3>7G-0PwPYq5H!h7$Cjk6it>R4FcYzdy17rFOV_npE{OYpQ$I4@Nq zI$6^TIU0}tgskDmQDj>m^KBI=zBP{{oI+KM%+_j?N`-1;sm6EH*L2CGX#N3TtuomM zG4Es9(LZc1qwi2hM6ACn(1BeDN5~<>&loD)>w7&bz2R8V_n_!=ItBsbqx;zwLfo;K zjuHHWqrX#!h7HIo2JfY~YZ1xCVHz{*gBUcCz|A7r*4An;Z+4k-Ty;Lg@D#n7{YJ(aH;97=Cm^ z7Djl$Sbz6}53SOR^2A&*cMhlZjqBi}pNzX6JKE2LvS0k&w`Dc*u9+P#G-RtI^n7>2T zhWihoIdp^SQdqj)hU98M`w5&K?w7Q9Z6yxJ6SZRFb^>PTJOtVpH!v#GxKAO+zm#d_ ze$TphL1~6_>bSfs2*1;ijOQ7Kr`0*S-eRFRY~jH4Sn4)5N#`3S0a1%(t!i&4|}0-KUSm+=V}&{`-2VU7y40R$T!>vAKEg(`O)e zZno5`A&XI_{Ok#>n|suBhZ=A1Q2B*!K^)OulnJ~#Rll(uq7dgncuU)JL45X=t{Y}) zNtrv4?`R4O7Te{RUCS#USjl!8#A&(Qbkp7puET7^)BJ_9k_|((Uhrxo7CK2zC}N9>$Z`~h<3gq@UTZ4%%i+H4E#{OdG5d18I6g3Q)aoxE2ELn5 z=BjN1#3it{fydGv8G(X$s0_06W{w5F=pVSFV{}$5Xd&;=b~3wbPI+8$yr0){0&6y4 zZp0ENF|g)b!(g{a82MoKE9x5LyRA5 z!a}T)^HLqR@|9Cq^I$E6^=!jhh}Cjln&Z|}#TV8>SV_jQB-U@lgEo%NR${xPTQ8m7 zwF81i+p@33YH#yTmu>6Z@95eIDz9HzeoiTN=seZZOUt{igqf$E;6dqSD+f+B){cRz zo&GI}(C%LFx_%0-ePuv9TE~qkHs6O?n|))lZcOl=n03gvCo2!n6Zl?(=qYNn|3)SW z*i6`#h-GC|+knC6hiVDKL)yl;9Rm(gf?7`UUQ9_Z`ZmUzGuVROL$&Yjy?ljYo1=3K zlJ*}Q?Fd}WJZ6-~af#VW=1a-WBi|7!s>D(jnC=eT@hPx`!IKb(cvL8uj0~VkzK3}S zl!h?HhQw3pNWDNWs)PjRL_IeNr9noCiU3Sa(MmQA&y4Tv29pO>TF<~m5Le#R<9-g= zPl~wVS;@72wv>$iH}2-TS9h|tNDivytyaWX!%^#@?@Ok%tst03sr$^fRLxQ#-iuy&Y_wY z1MVTTQIPtO{o4{b`x% zpEHXO=%ZLhY06*14^`szYD1A*Az4c$jExZZ1qS~OVel*ykvfn{noFa?;Au_<78>2h>&Wn^^G$fkOQll@_vTvWmRoL=>~6)VfzWWXy?cedGIE&VC@0UAwZ zK}@`_SMAeBW6d{_9iW5FY4ksx1(Y7Bn2_#Zp*}imduu;X#Aml^ai3MKC$$RZMM(%- zdlK)EsP^D6Xh%-WXv5zIp#+2dM&jX0TX>xl8A zUlp$>JgU!3!`#e;i|VOZ5Wc35h62yleiR1n)BZz5H1bpB(TfZ8nMsN^8doQWX99(n zw7!Qi%GDWra`3$ayxnL>OT(_-{kY;HKAhZgQFHzE7d16EE^fJ~wz0Oc7?DU&a%T~gn)%(r~$MatJuZ*1&O zZM77Ra7|Tjh?L}3R_D(sEziv_pIu$%o>iSYD{or4dsg_Z1h?_lhY}yC^}4QATAE$Z z!O{#Nh81W1Z;KhmVqvk(ZFqYCJQV1n#|j*ybPQ#72&W4)b?yK9c-w|#gvHBFY!JYW81(zzZvdz%wbG-sz8UpgK(t#d*IzIL|ilczleK1An|Y`WCFSGHvLPG zH{%rxOohK$&aXhX#=~xwllDZ|&2rNIGCroe29W7^1b5{+Z#&pw6cGG>iExiMs?Z;=-USC^kI#@_TT^R3_FU`9 zt*aZ+FD4_?qGTRIZXr$chTeN-DKz#-MfghEic0n+gwpx198Fm>vRuQi@?taOxy(14 zkvD@_UtO2ta8dvx?K{2?pkBPsZE9**rJm8Qo3^aU*U+M#;g&)u&m*0uEneQ(Yz=1$ z4@xvXT&+sRM+a0ck#C_JPEFA1B#Gdqg0dI_fz-%<)F%l9gTz0j>LPF^4yKgcvELgo z-*8ax0GO=x7%w&$PYX0Pu7C`n*@-LT(c{HGA^bTd;GE0TA8EMD`EQFhJ+FGr<;DZG=(VG0~k zW-bQ>XT9$NByDH;%kc3JMN=P>g|{s#dANlCCLus9f5kTg%Yi4bkQ>0Qp)uT^jq^j( z)&B7)I1O9F`x3=hhSJR-lb(ljUPRR)4}kN~DO!_VD~rbh_IN+0VBZN^9vF2lvXuj? zsqEa~JyaPc@E(+)Lu}r|M5G@4IYI{4;m5KsLjH>HmZl28_qW04ybM=5As1F==h7Nn z9cq9f8x$JS`?a=x*b`EYXOtmo5Fc1O3#qFO5%=q0u%wBYQ$d)IJe9mWTz9IrlLbnt z7GULcvaYc3o}qSQ-0@gNR`gSmW-=TfACFEGq*A;m6F0;TwTE8n@{Us1fx=8q4=;};~&o-KZ z1h}@1q^n2QhggpIX^1k2#s!tJ^&t&Ko0*RM9gD7ZAdT?|o5TuO{=N}iMIhdbDaJl* zA@E?Ot6aPDBfaGMo&9g5zf`0X%io}@+=FvPFDEO(MJTZ%s65Z2j;QBc-a^wsC zXE&%nXO0|a)cKua-ZnYAK5svZxAj+o_tL>w&_Nf{x;6Z|zbB#8HyGvtE7>&TytA0v z?9St1Oj8mLI!*rHCg91Ib(;6&BLDUToOb>lVl6mh}P0r z-MA=e=}YADlA#mC8*#+iiX;RAmmUxr3UJi%CnaM8@m3zY12;w zKj$=_dJX45d?t*phO8t=;rBv~FpmanH9DI^Nv710Bs6<>*^DFW`$2R4`!(JjIha z5Uio^m(1+HU=2X|ntNyFjvjX}X#@N7(#@Q6r;jBAuVim7MY zSKBNd?*ZAt{oRdQ<+^Vt7;NG5-oha{m|_Py9_#oQ3IbGZWj%m77rqR9P53s_j1IC6-~IT=^T+_9*@!O|V=wH6doKvXH3sgc zD%cOckSR0vJkq&H+{Z<^??#@C$8`qb`zRLSW`R#)EyKADf9u!c=K*~5UnX$6z#L0B z&V!tb7%mkMN&k=E(d6tAix1TX_mfdymbsH=WX=NIBWB|JK`|5WsGkZ${P&8P?XbrT zgS7r8X12@MVrKg!A{^6aJ6#}V;(W4cMw=9xVPJ+aw6yvY{x zY>RoZ#msgv!*f4nn$=p+SY3s09vb%0640<3w+_LsX{?Q2Kt?SLBUjyWHBVgzyuPKe z84`22UT-8L7xfUq$isRe&u|G}$208al|zZ3I5+jn4IYgVBFt8hFqZ3eMu=G+wVtq;p9_3O z;9CMe7I-2CCgX#btYD_VB7xTkY!v7h_zQu&m(2Lw{}X;7@PI&`MbbT4AZZxwc>=2i z^1eOY*9v@CAkS&(zFXkm1pZSX@l=*+jDJFx*m=gJ5flmm0S>S-ccx?U{kMDjHULtTTmZtrG!}vKe?ym2%|^tQFWL@b?1wb~wxbH-V#358BTW=oYwK;3I&nC*Qm# zd|M#jP^aC2gD1i?fu#bk6WA{BX96D<_=3Q91%54XJn+c$W(!_D0&f&}yTJPeZWQ=} zz<&U;9gfH1hVX2G*#gT2E*41rFAR5wz=s8H1MJO=v+WZ2fxrU-N28tTe~Q3!1ZE1% z6F46*{_;56a)Gx9{1<_L5O}Aw<7U`xKiL+fzJZ6|GpydLxG0{I>Fqb|5*Yr7I>Aw$7S5VAn+}LLjvs> z7o-#46F5;|mcZ!(uNAmLU@g+`?ufJfMBp6)9~AhEz&8bcB#?)!jCZQQa|K=@@EU;+ zBOi{}Zh^Z64hcK~KDSdV0Z83Hd8SSHXT&?j)M!1V(EC~$|szX<$D;IP0SoMGgbF0fhX^~5DrohVu&K0;q;5va13w&PSs{;QnuusZ6W`dE=IRdi; z-i7ks+cnDepuj&0>=9TZ;jR`qDCsQ~``-|b`1z;6$~dE5OJL{v^N@r;`5a?DT_N#q z6Zl(!|0VD>fdc|hM|`HACXhOah__+!PjVUcnj&zfz&e2|1l}$1VSzgYzALa$((jb? zFO>3LD)2K2Hx2ggouh1v1l}lcEnvrMqinwv_&b63NqXI|SZ(Ta3ek^zQOJ`}1nH`do7S2GjDy1}!u z*w@g&w5B&UHmTDuL)xIk)6!D2Se31$k=j@gF|TnYLt5=Wif{E#3AKSX9OpnXufB2lY>3<$FO&(s zzl$IQ~<+@cB!-BsRtukXl2RmW0%op7SFea(w%YCUs2 z;6c@UWw0ud6{JqV&Vm|mjiqeIl7^YqqOLCrVyqEc6w@f8Qb&r;0Er{xloBsTVhgUZ zYYdN(YX{F5wJUG*)-)U`0;HU;a$9P1Y!M$-4Pm1x#a{)U29MVRewdLAq=3vrV&zSX z$%#`AqLR!|8Wu}lD6bq*LLA0CWi=U$hE0+%EHj$C^~<24li3?Cz=7HBg}&vA1xY%U zTU+Z}=4-$RDZ%l5VRPfMaK};pb#?zAZ|?#hRdp@?pP9*H@&FPD5E0Hy9zYTpOhS0d z=p+FQ5F$cUw2vetfrNyFr`7r(K*T6$6GiIEang0vrMv6cHLC5W|Lt6puXmtTMW zEg;n(_EzhoNiUTDcb&7(Yj@3q(7XYaMwHXMwEB)qkLX?Ti; z6|xnrv-RkfRn!|C8VqXly}5C1J$h;MoDg4C`)0AirUSIjZ&HRL@$g?yO{_%QLW4uf2Zxb!#hbQ@u&WF{;ECQmWRD8e@{p z0V!B(^qx-k4=^oOyFnvgSn)pENiO*%)6Q7Xw1h==RpdsyvLwI}IoI+I{rAqJ&ZAo#k zwIpbGOX6g;i&ZH$r~X-(F5y&}uHgw8O;g%vG?XN6Q$*~ma$D!?bF?~Ap9}mWB{YVy zey+wq7UHV1B8nP&LwpU5|AN{IqbG&<*kpK!`@)Lb2MmvUuth^61ZN|bgbejnQ;h*V zgPk)ZioN0bJgk1x=R)g!N#XImOyThvu#l$v0ENWkOA0Bzmn|fomnqIV^JZKTS!?g; zyC1i|YjE)B?**%fqmmy3`pdu{?9Bs)F!MHhlhsNC2V7sfe0c+33Buw1Ls$*e-$%)+ z{vOnhI9`^1{J(;JLVP{?C7_-DJ~o=CS|Yp+OgyaiO-JfIzoD|Gajnrw&2okL7#%gt zr(aovaio;R)eS4msc%>`GnB!Xq3sil9#S%U?9etb!-uqn=|tsRraVEPe&xaEGUdVN z^5wzvE6O7wF4t1mVg4j|`*RQpwo%Z923mwIQ)6JaJ1&;#fv|7T(W;@KgQ}h&4mtgk zk|J73**PifMr#||M`Pcm*FiQiD%Tbm4-+%^YaoyC7{OxnrEV3Z&jqT@W)6>y$H4go zJ&YJig+91Du5fEkuF$??3PFee5evO4HAtFWy}V*W{ra0K>dl!PKI;*oe56^UX`c&K zSz5!|OO+wD`rK9R^f{33fB~(O3kzjSy@(HcVIKoo(zx81nA;h^es8(;JJ|G=L$KYA z=I!Td)V0lZcCBf_$8xgT+QL;)ER=%SI&(kQkkq9zRqCOou-~%2sMf-4C9#~s%hJzX zPkmlAJ_M=X5a zy2AR#b=5|@T5giC_048;lj#PQk8KNDHc#91&gL4P8z~2?KoNwKRR@+!?W)!Fwaf1) z+_3gGb3rATqVi$Y3iCmsex;3O$*uK07VnICy_KIGH!9e2P`TSsv;LvRNFbyt3>R8G zC@F3LO06F3+Ifjy9IjSV= z+>Ru#tf^if99Qgku;_M2gXh%;Z}AR>8xZDa>WE5FaxOa~V36S#54mdHwR`>&)fHQ1?FmvAJ6m+ME<|HWzXq zFj3t55>=uilrp=c@RC$tn42Nc!rb~+Ji|N&&dw@?J+LZ;-3fB%G*qpYRVJgyg!z?J z*RH5p*0^>cKU==CsBWAZEHEh-+$Io>@>`jaTtRq*SCBA6{|dr2tb)YFw$5x2 zi(5zqfrnLxxLl_6c=ap2xzrM@OuL0ayZBxrLt^#9#`UV=`_Q1&vIT*Ykf6qgfz35o z(S4DvuF~fMjaJl<{OfD0s)K{ak|5TXd(cUkzVExSFKE!+>^%1HO7w+|bir$&|JB?-?VO2tljfttGmC9*bl>r2P-vVGoLPPSEh%V}N}>dC9CtE=SeXEXntk32Ka0 zZ^?4NIOf82NIeoKL_A2Tf=q89>sWiOGbiyz-c|E8#%d<%B1n+Q!DNM6u4+OaHRtp?ekv0ag$Lxw&?I4J#EJuyUZ<#7ZfI zkO5BVtKhS%mu*-vd#(AYVKj=6)hDWjUBo4Xxx~TFPlB_;rFII9RFqCbkgTx5T9WN^ z3R<{TMD-iSCAi%&)QGRa$H6h*kW7{92QV}tGlbA>4TID#vvr{a5DjS?@P!(KZ@C9a z(hTX!#=`hOCN-o#_EpC~_AbN-26MuoC5%4f83vsp;^@YP`o8pn=Y=h*?Ae;97QmmuVb@80+!m+ zlOz)$?ppD%*=`WDtnAC}4O{7WB`{AjI@O9q19ut!`~H2EJ&5&+u5uM+59!$-d)ne& zR`%uRpiipwP~kToIYlTmxzUjxsJh4EhgvcZhZ%S#@d}j6PS|NvXjhr>@C#Vx`${+nBDw7?HaaE z+)ooH;AmPbza>6t_EImcDVo-1xqZGw>#(~WIi|gJ@y{z%vgRqLR+{1t_|g*c zebvww1#Qoe$9>TDK5!t~gifLBC3n<-ba*1PHE|JIX-0z9cFtA)yz8uX{fEE^VC2!V z!%_DJ4nIR)uaL)ri{+2dC)aQmdgp}rxNR%)1HKRNOUO#q6Jy8fpS(QI^E`PC%NnQu zIb*E;N>P+&`KScXGs)4Or{fbn=~?Oed`HZ-z{N{b90_UqCTN3QlO#_EZ#m`HlFhmo zx)!+l=yEE$B%BMnBA_drp6V+CzTGVm)Vs@5Ieo0&Jbj#ANn31*kMLAdrxnmD`D_2Y zG)4G9+DY=4v?X2P1s8na+Mi~$O$2RI5fK5;XddAQqpoZ;VHC@#D~T&LIorX7Ft zM4IPRhF5<&BTaufBOTswc}|nQ(By?CN zlQZdjJL&Jf=k7;Nxsvvsc8%C4a^k62lc(KU)8ZK3mj(xXujXoP=P5%zd6z>2GAV@4 z*Bx5vIal01i%u!WY|1&uC}*lFXPUn9pO;Fz3AY(~pN8%_$}pd@9C60gZNksvh^adb zO^SCbwhmv?|8>>*3653g(wx+*3t1U~9FOd{Sm;bi#I^;A zwC&x2N9Iy@D|lalC$F16UjKkNuZ(tiy1eOnG4(z1le>Ta;L7@*5=WqSp+oC^XywEn zc;c-;Ib-U4)TOjhmv^jw{H2yrzb+c9zZ#{riQgBl*nPjfaH&+_ajs6ipE`9@XAi8b z>3M)Uy?FCzI5q_HE(#g#bs)~f4e8} zNXr{jxBbaEyv_klv6OKJ`D(y9z`88WCv8{2?|se@3l>DeTTw>1-^CNgJ7a?Gn31JB zDO)P?x`6s9pgu&VEu>#RIC#*upHd%n)W;s`;@7;*(nRs;Kw(b0Wh&p}t(1MlWXYBwx9VZt06j z-SAPWoB05Kr*R8tp0@`MH&EREZiPl#&VA+IC>_^6G3f!VmXEB7aqJ9h$UQ0Qw??s7(!c>eXkJlyMnLQjne z{pG+ZxGz=irOI8--cH6nTe(kE?tA#)Van{=&wzV1P;A9*JVjQ;awY}nmoqke7ZnFg=>LeiXGUM# zZ9@O!KxB?@2N05qTTSS1R_;wevM#>Mg#OjQnS`$b&H@$#CH`z6Bozlt=*LgKD~f4b zfqv>*z9H%-n(#XSv7~J`p-Hwm=-{pMS>2#iS zzQh0HuGd^n=Vy^Ukxpk%)P*Rg^YQ2>qVbJ>Cpy}>KjA<^wDUy5N&a^ye8m3?2~CO7 z&LP5*RSG|$aIrxk@h>R6LgCX@`gaJ< zYt>Ja!rxH-ErP>f)_17zi`dpUVdSo9+Z8T$apkGy75`FRdAfjt?^pRhtnkMb-k|W? z6~2o&65dU|^1RC{_-bg7=ihk+|48}s)4;_~o}coHzkJim^DAD#_bXhanBWJ+ljlxe z!R0KKJU8+R-eX|&70M-ef~t?tlz)bzm*c#Kf0e@J?3{#Or0{NqcPU)fOvJxi;ontw zx=Mem;I{gXCqIG*pFe=uaTz@A_@*$tg!JtG(P92Khv5^$@QY#i_^|ZWh2eb5hvb(P zhJO@>d&6*9e+wS#60@*X3|_3AF6WZ+hV|Ghy)F1_`RWbp4ejyZu`P3}TaxH^b}bl2 zEmGP7*<6C5M9sq%#6kx+pcagRE{Z|C?I4<=lM;4jjm6L4fwooEt14HUd%dz^Y3;?> zj(%BAlCrVH7~F>m3lzFjAfftJ_``zsc}S|V3LTbch?6}`UraMeD`20yJ+xYx4GpRs zgXQU4VzyD)=NJrUUt6|?v^xjG_CKu`zSiBh9&JxcR*Hj*)S-v$>esJYovjs@P2!YE zj)DqIRxnSKK$Erl!bS6P%d!nPS;0I7rzkj8!D$LkS8xWf>;}<>T3lVVLH5JUeU8Sp zrW&nOc&JNXRfW3SD<;e*Sj-T2AwGASD$5k3EV)bqzUeyh^eJ|GzpAxu3&{hmBX=QV zG!X;OLw6>?5J=2W5 zR9bG*qOFo--NfT?)cu6@1$R=QH}kH*BeB_mUM+HtuRCr`ZpPj2T}2M}Hs_##FOcCi z*6uFedDK|Prny>q+h84I9h^FDeFpqYOw(d)OXZ&B#eavq--r(C{ql6=e{DKmioHA? zM_pfDAKb@Knn7K}P!}Ik5AM5TcV$oyT4cUY>cYLJpd)?w9ADI!IX+o0*H|;vSkslY z@)XvWQ&>}S#xL{*Xp3^q;rXgM+a1@R)=MtOTQTs*wW`fxRh!8g$%k>;p%~gjMf=7bDTbY=6LoUy!!je z4$tyITIWY`fkX4*@wyw-x~U_+ZX4^R%+ZoU@>z5Fe3p;7#+5$}#{GBTzqGUF&Zg?i9;9v8w+05~H3b$vda}^>!oz_<8#V_PZX%t8&01RyZ$XpRcA_<~@M+*#-g|NT zCF_$@a2rYZX@tL--?x#@W2Ey7elLG5uVnRWQ%W`g?*+d9#-5Uj*QS+Jzc#gGdy3Zf z6GwF0pB(Y$-^BfN&m~zVO0w!0^C+?|`a63)xZWODQWek|Do>=BR7J#>2z=^9N=Z6y zDg5Tf(-MIj9kJ)zk?rTH$9ZGpc4g8AZb$5bbjmsQ-onFM;x*6H+nt_G?6W)-p?QQK zGcH}4;--I;(z_*&(XI(w-!C!vg7y~P7)v`w@p|#oXnzOp>A+~(-+@~Szn9@w2%L=DdfsKY3oreQ zI=d14E!ws9c%koSwC!rzJCgPv$J#-gUSg{LVc-_-oKy@aKv18S!`E{^-&IU(UNZ4Z@RuAdQ4~ zvm5?^|GIZ4H!OZPw;^FM{P}KbLk^Hl_BP?g1n_Kr3r~(DY|cOP8rFc1z;CLg@y{s@ zi%fjsx_?eFVRj+4&luYPUMzwiI=b#=T*HJB3Xd>x;phHyrTmb&k`+ey)x~^j8T>BecRn<7 znUK#&pEZ7gj3EY;IC~jK+zEl+4EDs_`xbuoYudL61cKxr|BXh7vrm;t+?W-vW^wy>p%#iW_ z9P`N9ROgHs72fN(_U#({B(HA#YVf;wXFf9B?89zJd(bybTZR8xX(xWev{m@8mG=Dw z9bdaX2>VrOdX{R3JlTxX5d*(D<(%|5)Kb&%=p~4Bg8VofOeWk@n&ftMvu;1?9zdU~fixprdB6);okY ztG&kAkp)~iO6$!Y9XRyG`4<;Yo%PUKk5gMSh`Go_`0PXW3Ku>&=fwq#8%Jo@pG0b< zgBTzF6B#dadPygN`Q6WQ2JiAl1$<|0^AE36>r9E#IgbU?$SYCud5(FZ)K5L%V~ZTxp)BZKIaTY`^3iYM^~zivnzcFL zyarBPcq8XAr=J&`qor;y@XaP{RRa5;O^l7rE>C%s!zb-D(iiBR&igMfIoq0U3iST{ zJ*}hro)NoZHjdbp;&8uuhWWI7?|3xrlbD2m*;zZ2_N5+~OaAP`=qE>Aa=OoVyB;w5 z;kAw{&R0;E_di@PL+0etN8Q7IxKq--LTh@s`va}RefNl6|2Y5R!~Zze_BV%P)T>v* zJ9oOscj)6g?RmKqcI~XWM(Z_bBA(DB;roRt(0XegW*$69Ta!=T8z0sVbq@*j?sd9< zo8i!2I8x|9XQ^)=wWq8Ap3d*M(D;h=&9~$HgkP~=?^q@CK$#=Q#mF{B)8g3u1s$%0 zg}xi+&GD_fVUF**;epOMV*;J4fy;r>S?DS;pI9?9M}K%`u72Y!bA3x_2l+Pn-VJko zpU<44zg>VH4Brvo!#x=}d?akYNuO;>vU>pykRyM(>_k7GO!JeThI(SN0RIw$1m7j7Hv z855JC7sX`hot{X~m<>^$OL5og@5WuDUjl!3W0dFGNS9~h-4UKk-{XxVVyMD5V7#t6@yaWi#n6nDzEkom3Ru3PXAzE#rl*^7S3 z*oT&RbW0@Tg{r#=^j$+2WN$%-gZZ<3GgP(}`tD_Htlp90sRV9`cX+DMACf)!75VwT zN?;Ckn!9kWFZb0*PtF?*hI68PIn;48W9ZARV?E=jzw}WNp7c3d=WN2xoio?BH96AL zJlo}&n;7MrP1s2EqAGWc_sk*emL!*_kg)O4RR{gd0~0-bYduHbHO4JP?>3p^(bh50 zYkYfd5BMVD(fyb=*H=n9agj}nWu6*OIkr3Ew%zxKyL_#4?(}VSeE0D5|6SsnwuZL+ zbBXU(;H(XEeb*4@uIaP%M+gJ;;CXmLuKw`+D9?#^6FqrL zqCGoi&eZ?7EWtD5e3WO#)mQ5~V!isUyx;#Y#j}g~MBWmIXFcuvFU&7?EFbRKF@LPS zgLc}*{9;{$=2=|g@I1o&V(}ZpJ&W;sINx*l#@JMS7ku>ue0A%(D?N)JNYxiF$ki9$ zIz@kYljrcmGiT_fI;U*lr5;Dd=IYbl&GWo)>qyU( zJG9Ol33tbZ%qHxl+n!tOv%Z}IQOc}njHbUwd$sAnzsKkglJEECYo6z4=IN73H}A%|zV*ag_x4CnUXIo|c?vJ-=0HQj+-aU1 z>N8>PFi$pZxrp#L&@RK~j_?efKhm>=@QVq*i15FGj`x2w&T}2%lk_N0=>Tni{u8t9 zk!PB<4rr}=ikmzR69m`rWPMZ~=0L{7T+w*`yYaK-Cf8c;xN-cOna|*LoY5i*kgK)@tL( zp|`T4p`nqxXsf-IH5Cmjs;eex+U*Z@U2N=4 z!TqoazvFhZ&nio@CiIIEfan)opy7c29w0%BKQp2KW1#34d}KoZSsFAJ{FDj(?*Q3S zEIw&M{|O*T7Qbmi|7$>^79TgEzX~`Ny2^nwfQx|q6&IV(Uj&3#if5b99{|Ej#p<3` z|0z5r{yRX4kJ(8>|3EHifj9jx1NkfNGNJ!45FRal(S-gypv2DxN_;Pnc*Ubl=uZan zSDa)*zwDz*{CE@k_k&3My+DcoI8fs6FrmK{DDk(O(BA^&uUPhd`SV9Rn_VrgXy3g`|4+uf!~aupXYu`L$Y(5TUl`JaOLIa?g4=ocimof%&Ym$B#vG?mgCW>@-VmJE+AsKn!iOiBA^vZL zHz@qi3KyHq^87{Nzfm|kl7{|*wV&}{VR!_MF8U2kYJXyo!dn$SLgDQSNB`9be?Z|G z3hz>Qj>6wm_)LYLQh1@@(D1Rscko;G&tH^{3Z9=Se08FU4~I7K|A@{Yk4(G;zo76R zDBRM^KcMh~vJt`~_xeisB84|9e5u0UQn++Rc|K8iyuuv{e^KT40%0V*v$)HX&ntMh zf%V<5J6-vI3qSD}+x7C4@(LcoD^Crt;LHh)=OKlo`)53vK=Dsd@&BUm7KPuZ@N9)2 zRru`+xAYf8n8?HZHb#1-s(ivGlKyeSmyV|JlM3Ig!rz7bljnE52EDYSJgixpxJqB{ zcohF+h3`=~N|na*9|~_$_+N3A@HNOEdBoPS;LQj#dH8AI2EsqDqGyMqe>J#-u^zdr z!;asFhaF!M=07_Ozbh=fY(lH?X#jJQ-^h@rHHO-f#HsH{y~+kRV-wgolOI%_s1RMi z(3nOjrCrsOxU2Qlntxm9uG z2$=1JcV8g~IKkZ))GQX@@Cz2DSg;ZF}_P=(5`Q zwZA3WuWupQuJEChA}qa++yNCorWpz!IoV2+gC9ATORn|9R1V3>vBKn7VRFh;n4B`g zh$aSenc#iP+1|eAtIqM|E5ba_57h~}=hkR2jLBb~U7872E<_o}Pp!{CM zE0543uh7NZSLTD?_z7RrJ;naWY1e3D|6I;HJjuBV&TOpdcImk_Lt93*M6vdb-u`LV z7$Zzm6lc~rt6^W;4Nvn^^byLV*r#KC>J)2;R#@;P>$iOC+v9zPZoIL^JT8zad#5R) zCvb;nNe%f+S`N-ONP6YuU*j}&3dB9>WJZsyA;@_Ud)jXHVR65KdO8#nVV;ff*4Fe~ zTbt1%dB@r_ecG7+ldKO%|R7$-kNqTb5 zqL#GgvHmA%TWNlAbEmO~dGSup2yT%zbMp*I3-rqR)db2kob}Tdshc}C^prcVeftH@ zbBO;DCu=z5aq-Rq(vZEcW5zm|l*8B`Ca&z;#**KHJ8FA2LLom$`^F7n`qew=f~ka9;73 zIh{P;<`rCYzvU4ixb!7H-KiOJ;mseX{+Mp-N9=R1XWoo5dka zo(1*E^2D>hKADw{`pnU`la8ckJr-RS{#ECQyA)kZRfKlZlQi63Q)XJ}STJ1PPQpWI zDfja21r%DOA0(%k`eZMrYg&K=?ebUBkXPCyi`Oa(Kfm@PebRvr4iS><@~@jcn{!GA z(sYKN(;3dnsB<(sHV$Qff&Ojz5r0Sd2(5SHJ+2OMH}G-bi{-pspUjp1pP{iYfWBBz z_X`|3V4O!r)}GI&3p*0beZ$MiFdN-FT%Et@{eMk1MLg?j8=K4{{ei!4+2y>hfn%X(XW{p#F7W<26tylbmw5mN5 zsh`u(Ei{|IM{p)-xPh0mA9hNep*+G~S~!gwdN{;Ok~&2gu@}qO!Z?8}GxlBWZEDGX zp}&YdkBXsk1}tgc-#JHC0bTO@Gk&+|fnM2{dqmfI?PJ(quYQqpWe(Q#o$Q0SR`rxc zFfK$gK18uE8_gMXN89J{jWu>2;mqez+VauGfsWfq^NUFB;PJtXPtdzJN?TKb-(%3S z5d3kVdwjkx_NoG(#H(X0xj$8F%eptv6F~Q@U{Hb2eT!GmyoG&|d7S;6$9Z5GPtn;Z zo{^!invtpR{k~_(NMmlG=bmznH0n?4y(z_~zaFiXN}k-sXYAQLK-$dBl9rNwW(-#Z zl9m?7-uWLh4{O5$o$OB}cKva}VM(8J{Ki?))2>8g&LL@*j|=o#XIocNw&O3c_i-b8 zL4%~d-1`^@-*O+-+RzKyS9|Hw3+^v|u=u#sy{(2i{gYGcZD$X1_uv9w^N4)kR=vQd zEk(y^=~%s>i1X1!)*hBf< zFX$Kdzmc)+L+Z&*dre@DQ#Cx_w|q>2@6Dnty=`flp1@w&Cq)zV=a;7HIqaEb$7XYO zopY^AGxV3y2YbKBt3R_eQ~x!3VS6~ot)-^x=iw*Xu`Lt+pHKUhIY!h?U~kk-`@J2d zz4hwf?*9Gul`DHD(oeRn%PTo8IwyR7sdUrUK#!D3&ZkPhls0E> zbiQrNnbY(Wi-&tQ%*@trf*<}6J4OEmedBve#~FUpiqiFD_~Y+0 zr|X~JG{V!AIz{LFRq5)iZ1`s!?|9vvYTA-WV1M<7tQ>er_$gh_Q0_Un%h~@*u}gsN zYK^izQOSO-@VBAk3ctB+HYxH*e>id4Q}gtF>|;uQ7x^tR`ylNuK=Mh-*IqnxyteF-0l z9>B7}PR?D+SROh~hK@1FMl}YCjO>Cp%<;|~7sZXaO%lBJJ8Nu_@ypVamNE8poYo=Z zT5z0nnYsl>fR-+&6<*FQOW4zlJL-J1p@VP=odYYZoj%bmmN+tw3!Rpnv*Mps{ayNQ zIb*t6SEdY*vABkQEc_mW%!)-u&UeW7PVD&@$CEpyT=GqHtwZ}HGx3p~nKuLuF@_y- zJNt(}3ZH7|H8nA3xU|vLacQHoqkEXvdxrVgdwi=&z9M(1sHB=$#zu7T!}Dwxc}IRS zjtP|f-K6)H^C3wy2Kr?`KjsGQ z&=K0jYA=xy_ByrKr&W)Vm(*bmb@(K@A6~v|w~_ZohxKRMx;Qg%OTJKO*MqTJ4?6oRx3}Iu@%gQ3GjKebi${5?tTvg<4 zNIHpH?>zjod<7lWoWdG+!pC24q{Ejw$mz=@?fd_E>4h3&9wzoIOkSuVuNL~$dh)W@ zi<5S+_?9|I3YVYZ{1;wdeAFM5wzBdmcWQZ`ljq)t@_UK~;3EfiVuX*nzJiZNK+A?@ z=v)H-C;4eF^8f!8KMgRKy_`)W%bt-j_lBQZm`6(Awd&a#qi>_1jG&(!hbH^{TzGq= z>L&uFpZo{ud|IY;e7?ldVfJ%V#(Y8F_zz8c!9EXv@4wr3jty)NNlV7I68QE2Sk1*HBXXic{UhdR&5Zre6lLp8*dSp~y7bS?nfEd_ zZ{zoSd|!zTj&gA3c%@=5X%%w>Ry32uPh^@vX@7xxMgBAIj7lut;13YrnzMXa8s#bt$&(N4QsIfO%6AEIG``cM zj>Q(vSMi$g{rL(1m!Vhp#m!E55?f|>Vhe|JEEa#Cp{;7*?RoHa7Q7v2<89VMk}SH) zv5%6EeUwz{!ey(AZfJUe@*Ce=LuJ03sTZA?pnLaZ=o6(*M~GXN{#(ju^p%U34kE`F ziyW4^JWHJ(Vcu}@&e_mcNS`U-TT67?eqG;0U%8y0(Wjx$K2}=a;H=psH5v6eY+n!b z?SQ@(`f1IjOF{W>jVmG_!p9LSom%3wqy`RUF;0DmELp(3gss@t?Tq~!Iae`X%}eAQ zMH%ywd5QNM^AcIp&WA6`qo^0+NqMDht+kWS`E86j5!%6X{ML*yS358LQo>5#));$b zzG9Ep0X?5H_Db9u#!VTwAEj*Q4IJD{c|DBVlE&Tw!v-De0J3g@d?McN+`yrl!TB8; zy4&r!+M&I>wYK5--AFp&bI$(t;lkdXx%MD3Pu9jQzL0M;Dc7fp4~%&jlyZ%OS|09D|P)6 zWj5muH@+1Jze9Mfit;uArB3bfg|7x053P3pA$58iZ&Ccf^HH~IcbOM@X!qpA%{zyu z1$y}=JGhr|(g(e=hGwm4NS$fprGK02PVOP3EAtI_DHC3br5(yxo0D`UJ$K^cI|ru( zde5be%I$E*Y}=RWXgmM+A3TiRh}^%Rk9|ElkpFr5+TMq59JGr)i?+JcysU%7q@eFj z-rd9-1U=~AZtEcKhr|_IU>^~8k|TE8>%?7kWBe{`EwzbW=}K8cNz-~a@GbKwFKc!k zzr4rM@$*}q9Y^4mzf-Pmc*)|g&zYNv4Emh478%oz8-BwK-ur{{`vZP<+gz5N!ml&# zT5DX7%6x>h%V|U5TjSdd-fBXAABU&f_oV3TCzO^O{FJ8eLzn$F!b%)t&4f5H$TN{^ z3y^Oj=UV6|Qup<&X-WP27*8IG@##abX>|&CYKYcp#ns$C&b<2c&G-9sC*Q*JGBWiu z{7&Wf{ERHUYo1q+%a}kMWE^9YJ0nA{&2sqaQk}jdPU-{sw~~2znPd3*0Kbc#$?v$< zG0d2k&!d0G(eLFvOBa5z;MB;8$JmCh6?W|?!+BC-F)}d@ZBc;v8#C(Fe zyVYOfBBkE6^8w_C)Y~BXPdqyPA2APm2){q^ty7NQgOrzfQ&Oxizhh8NK?nA8l>Z>} zn+bpUW`B@1tJk6brz&ncJhh+tmpM&6PCmw-^4G{_=BpVjcO)cd77$T_(wV-&`{>zqw@1q~@isUT3XArpTJfdiuBI zV|@FPm)I-Jq@T$gS#0VFpGrTI^<#TKYoy=x^)vX1xZ(Y*h<;@CGwE~E&tmCsRzH(I zSHl`^Eo-#{v@EJ9|4r~MPE_;Uo)Zqc3=wbMG6+f+>9f>Bn3}0xs~uIOz7VO z0LU4Y;tYi+D17^1)Bkp$_%Bs>u?hXNlzX-b{W}I>8;W$Bfo%2p zW&tJt=_d3e#|(Yhcpz2idxuGx_@6YP|2QxkchOU(N{dBL8R%bR`WF|Q&_4?(<(LRW z4ismY&>vy?7mJ=G>H5zy5vC}<7lD$G=v#{W6F@0{3or-xZ6HnH6MaibuhfM8JRnu; zTZ%B60+bDUN#_C`L(=&OD0I97lz3vV3g{PsC*cm5(EkKb=n(r_;*M-F;s+EyOW|VA z&P_NL%nW;Q5kRW8SQG+)hTS@$cQ1jmf$cy@EPld-{$}6=-0Oi8fi=MC=zEKuDByRN z0&{U+&qQz%unH)A#oB>^-wqT!9Y|20*yN7FPCpDq2t0U&%dm@;d0@xhc)CIW*cK3#IK7YOSQP6oyU6M(TmNssSw zn%L0&7#!_P&xkf`+_gBiW906*<2C-Db#(LpMdx8>wDU7(5C0!`KjC&e&n9$Zz|J&X z*EF;lLv@FTcJcqCp&#@Az_5eEFmE@kDJj}{a@afkJ~86th-l}*kuQ#nb~Yt9C!<52 z{3ieRChzCJXnhm%ig)<`;;6%;2%mN`jWFZi93Sm$&)AdUbhb~}GXWZWJ-%q?o0CpV zaynabx5HQgD#@;!GFNaK*wO=7sQlMUL3wUb_;H{-H3~naaN!S0kMB|AX;FBW^8ca2 zFTh;#JgsoAsjj6xukhJY!92$l-lFig6yA<7lILB8zo`5_R`^+k3v&oP#nOO0qLVK8 zi!`o0V-!AH`3v3RzZW4P&s2p^r_tq^YlTM`$+KADi|EwyR4RNs%p%Vn3NKgwtqNz7 zX*^F@{whD_O-BAz3O}UqyI?|jjw`%b7?I~~g>P5>A1V9^g*#|VDYK;~;ts<_Z(IBi zsQMfwIOTr=Au7)}<$qB58+HQ;|DwXDi$AZ$FGLN|O_FLAT_sf=+A4*&1LgTXulSFa zh&-jdf;StOA)BQi2cJLl%Z{H2!;8Z3pM~Mu!|*4<@V|xOzYfD4WNy!YW|;rbF#ohL zd|X)g=fdz`h2f$fRbXf{sPPm2EFeam+q((gEu59+|=Y6Kq+hucZM0N;VPhYb45^38r_giOp#HnOw!Xfkv8vi2 zMJrpfVcB|=+7?$=-ceakSyxwJBbO_68zhXOu5DILu;|O>63&XX1XWS{=rcpwu23=^ z%(7Oa^;T9>UB8+mWx>V`YQF_ttke|ArE4qDjVt4J*1BQ}q0Gk`CtxR&aRI>Yi-@LX0%ux+IiE*}t-x6NNk|)3y353vWDqn_G!R2AzX1sYo83(K>06)L>Bj4?gk)|Hu z`3Z-O^?du?BpG~n%Q}~Q({H>dreoth?%*DE4d3bHY3x^{U){U0AfiX~2<1C@==St3{t)#jK^iTCREv6nW>tB%C-&R`W zfk3C!T?F;f&N_AzQ-R0?^LIIGb`eQ)ea-AW$=*~{61E5e*ZEFqQ65KBlt<&PfE3QZ zYY|aCt+~i2cUCw@qZ7oQn^$vswAosxXSCMqDbfzf`p&tu&Q)R)t52U?+gA}g*H<~T z#An@YQ8{#uk8f1Zyadftlg0YSB&NGpF6* zsZP>71$#74MTyqAti|CeU#xXj-9+45wa#kldl~h;ai+-+);jsQv}1;jTR2_jy%f;) zyjeFEuLP(M;T_={`hBVJ!*jT4z?DFY2WsFO+3(bn;SKmEJip7e-x=EX%i2%c_dWW_ zSzal>yqBY0Xsd(9AWiUUkS6%`>(Vq3&kWQ*tvVB$YG|L@ENr*2hbDNio%X19+Dkia zj`2x5Rc(#+RX-5t8>kd7l)ugo4+_Cdui zn9w6KGmKCMrnuOkwY7GV=eE{M%J1)&PC6MbohM;-RMI`IQ(lynEKB`_xB0{ zy(6R8r`XNI~{H3&TyXw?y=ZL3dmY4zuo+neK3zU{CpSTE!_}n z&0Es$-b~!xj$qsyZE=(MeS~{iyzuzCx#&Hx2E7bg_OcJ*W^Fo{4(pua-XiX-`v>(< za9=l*by{N|uK&GG($;Hb)2Q2f|xRVzh(dyu$iZP<90PZMC!L!Po9y;H#ltGuSIN z?ky5KTEeTmqJt25MWAypGDmD{M*XisU&7cxXB#>XYtc7cGCdnx7rFY{`NKTT*w6eq zHo(NDMb4;nJ$L$Ky)ahp3Ch)fJv-9Vjy_^Ja^SuAVIF7fFi&M{gs%!&<(|Ph_JvC? zFxN2blS!TqXhpb7GhvxfMPMYltjMY4~4yPxO;_%csT%Ow0 zNMCsY<10L6*w@?>>v6@$dD7eC%sx+l*IHvem753d^IAZ3ko&gSs-;S z`Fs<43ZHR!DhFwv*-x1=sJzYLSq4p)rH3{*=t)+vd7eR+d$wU`?4ZNXp3`)#*D+h` z^%BNSJ1vA~EdCPRwwOWJ^~AD&!u;^yycy=6NetoVfoBn4Z03gZordgoD1K`vy@ArU z_l2MiU5V_$%08BHSIds_l2H9JdmO318uoHGI-TcFkq7o{jXkAu_T0W;ubZ*U*juXI z%>L$)dfbl3|?$?W- zOZ=$=#lP<^3aC^B2kNb%-#&MSzb6L&dab%z)#Qv1Cz%Rr<+_JE6zauEnIgd*zcmQ^J(l;rLb>RPCZsokL6LwhQagE zF<#(XzAVr=mOGJF6wLOW-T`e}U7lmp+4qWfB7Y)00WHqs)nYy6Mm?D0f_)x55G|5- z)noH~%YQWA*Gd_V2OOSu;5o`(zIA~ySACgz=>r+m2lLTWn#&WHfgM7T69&B*(93-O zGW5zFPNDQpu+i&=-k5Jh?`7*w$Yk zuN*qpSBMNPNI-7F@5|u#WxC9>CtzPO)>APTd5ay=a)S^5f2hYW+GmH*K4Adb-OwHr zMtcUd$9yI2&iKCXD2w+kz7O&|ebkjO*QafFcv2Fa#=U-4Sm`GTvn7pjy0+QrN!=Xb zIfYGC&B?uy&Pb2Lii@qVeC*aqztNHd7qxf1leClB_lUpTttWE52^r}`CI{d*zKe~q zG6Q#!&rW2&*t-;+e@R2;eb(>(x<-9^Mo%&BpJp7GI^CQ{iGF1h=V;|@&~50fSo3u2 z{Op&eh3wzN+)QjPW@0BZt6gOFa6@K~KxWH4&7S_-1L#E!H2;Bah0;i9sF>u29mR(i{#Ic2kN zDal_ruTZF|mg#K3G5b*6L z^sff;!RRXm<^zj>R{>`M=L6G$^MJC4#)qyCJD$cKbi4`uZXn-=#Std-YrsL^vIhtB z-vult-fG|ipxEpZI=w)le?O6_qT;9 zD0J=t3Y|NER8_Iu!36Yg2NJco#f1K5AXQe}WJ3S9fs#%hP|}e-Y)Qupq$-O?o6w&O zlys6z=uZGrtP$q}qke3uFRvNtaDtp*BxX;H!ZYskp|3 z{@K7e-~ki*rvvAL=b6yhQufmfAr+%zE<;Dw6`K|Q-M44sp^&re8&mZ|M_yL$x z9)23Qf$(n^am7E0x|io}g^P}kJpWta-yUS*hZO#@3V)SKpEV@oSx0#!y%vO@Jl|2c z=s3wEx-H`W&R`S2M#ZmJ@hzKet#n3tu(@J{e_Y{~&9^t{jPh7E+ZHMRAFK2pSLOYM z!rK+joW@8mLE*nqxajuCvqs@=h5ugV|E5ZRneuN@^rF*iq~})kHBaFQD!d%(lkz63 z@`?_R;ENQFzKVgX>eNJzi2v;>{b?$^=!D60qe?GB<@Yn(BzzL#%PpSC($wwa1U6AzJRe7#bxOGP$_HYdUrOJO3aU}d*xXaVZE4b(w z$g_jrf+wr|#9eT&Dv#LC6a1t~?@i(e-lEDQx(|XUsPNxb;gePPE0uq;@)vn0;m`8Q zlgcaj?Fz3|;YIgMp4Gg{%fM^HaA^j+|D`ZI5l_2+Ntpk4!|?fG;f+04rfK~(1#q-< z0%Uq=?%!Hl|5h~96_Z}ZwzuV)U&)-SV!g5ZA8s`cn_9IEm5u9`bN}92(*&F(&knmx z+^iG?HD+lxhx~>WvdL~vF)eKaqVjWrHD9#6i7zuy3(c>r+^}jxJtRpcbJsSmvRhQc zYE6G*Gp2!>U}j5gv@@w5=#=PHaPsS+@-juSLob z?nEN?S`sv*mT*|yD3mrfSPAD>RT*WqaC3Km04LN5Xpssg_f}9+lS>J!*IvK;y0sOz z)vhM(zN%aw13wj(Y=)HasO_5^^9P;*>V7*|Npqueczq$f#sdyRXkCwm5v&EwU0fes<+M!Fw96guDYlq$&DS9f{ z7~o!z44@lWhON5})(=l_(K^m?CWifeOoC`h=ZOCvdq;9khP`U+0mZ~|j~-V>nCIy- zZmH>!J1R~Q=CsRYoH6Mh$@v!9i{VbU@+k98w{mBb|45ka1?_RxGG%rEj5jZw>mvazj zH-dDlLxvBp?@mHNCvae}2MU`R~ zXG=+bI)O*rma+vPNBw4$UUQY7s*`Zo*DrUs-5(cn5p9 z+sm_=G92r0dd~dB>8a714%M>HXWZpTJ2@Ph&lO{~6E-Z2cB(;7;mhm+$a?r?&uDWl z+TIqQFL4I-x-{-3J2j-qUr~S^60t#oT@$H;53%vpuIfYf;p9w~RX=C140P^>{w=)K z8L7rO|JO!orDt7%&S!SZxyrHnQR?rRX9Jz@N3%xy34Di=U zZqNJfEd80}IL}_{Xn!(c_VvZz^V2}*pNTIzQxbpAV@rL{5^w9{8J=d~o&>k&*Tip5 ziu1Hc{1MQAeXx6NG~6pRi2W=@!@UL#DbV1Bh7@SfLTK2Qq?O)lqoG-7AihOIvq3`& zG-bhff|FZ*!92d~4A`!+kDTJGf$S+tMenYc{=-;aL@>--P$K0q2xq!EZgj%X8tY5agN^9kQdykeEc59Bv) z4}iDg|4Ce+_phXpfUd|Ic-{NY^51)%D}JPn=6<=1rv_hv96IV)!5woE4GAsjdNwj- z5BR;{(Jf>3KlA%pe&2`tTP@t{GVI>6DB}MPx6%i^dfu?DWuKxOF_gY~<0$S3!T!?{ z;7!Q5n_Jtps~_DMXy}S9VO6MiQS4DXL3(!>!U*)37dy(O4u^w%=8@eJ0|M|geks zn};|Pb_{t5|3c)t_D-6ymnCgnPhXd|EaG)LVqUFV}%p@c`ocagxObdIm5~v6_jn=SKG>btyN|R zGR|ShxN{Tc2W4FMw*sBdBF~&N#_3zAg97ZJ715Rxktt^iu|t4Nk+DVO+SACCv)757 zN;Blr(+}Uwok%I%iR5JrO5si<&9evjRLNd)4Qa$9Q=UeqSn+owQ{E$fIb*-bwcQU5 zGt(D`4qn>XufU1JR7TxDtZguZc7Lmqg?n6e`o8Ia;y z@uO5jR;23Vkr7WL8vF)@Ll3hAf$(k8H`&r;*3a*3y_8Q8B&CZFlZ z4mYynBig{t9cky7+htN$%mMrL*(tYZzG-u~XDy6pe?u8QKsJ1U{hLJS{GcdD9|r9y zt&bo-b`7aWxNnH7b;poqXlzDDteJ4lgo(nwU17r3Ax|eX4_Ri&kJO<2*pB>=JJQY# zxja4LGNe$+kivmvNSH05p0YyjO|$Hy{KnAFz3kj!OKAUkVad#3|B|^wyKC1hLzd8| z+R4Y5JKV{5NgoO@zuN@VnClsQoJhIGm-xDm3C|7RC%UUC=$A?y4PHzUesuNmGN!$EW#FRl;Uf4hd)St;vuS~g zo5AORpK%2)&gJ*mVa;W~0Ur;4ybrIwh1(SPathEqp0s+O619w2x`U@WDBc@PK>Qhwy@o_wyJ}Rx+N{iC!4v$$Ve@uA8{) z?dC|Wb18QZE*_+H&Vxs58RNt*TrFeV$CM`lniHUTC_I`lKUdF_aSy(9C2Sh9C82eQ zgYj+;yxa^gH!sbBM|1VD@MwO*y+e+|qp2sJW{m6O(fvXjwnz-xu)TA+u`W%Gb;6f2 z*5xZcm9a0pFMZiq7gNMH-FCj^#3nj?kmOJR= zUOJJlHAh=UEi1wnEp<`mh^srz{f~UF@=evWIP;sL9zjxYgPABzG!iCO){cF7ctAb%dYFdmFUSA(FJ_IX>t1xyF6+ zd!G$-INRpN;|O*BZfn!#M5>o(idk=rLN@rSZu1wyQQd+p^o7ZDlU*Cr$jp&NmWUcfLV*?#Vv% zAEe2aT$1lWxgT^?-L1!-9OauA=>5qJGq?S6ib=zB&@hVprcGI#`AbEE*sK$`*QvjD z%J>)HQv=lF&N0c8!W%-H@P^P93vUd9HwMESLlke!hcAS_pFr1A-WL^ZMn6#X z6HEQfr+$`ZhSpDV#^TJSine4`KkhNwP^pu4RVVr6n?;>WpiX?$NhWpTfhXs~leJ=l ziaZ0nanwf^^&#shZrUW1`pCS&>^ssXQXkTvyki#|eM#CxBTsRQq3u(shZx#Eb%3^S zp+3IgPTG&AMfv`5wRQ+T>Npkc^f6yOguZPXYc|+7*4pGuhB0O^R&JAy8!|=icHQV06qG3v_d(o#I_S5f{{4lxD+i-z{UElJi{F~K zZSx@PVO*Pk=ezgXG`n7!>zcY+Qd#{J3AmUD-(7H|~zv zRd@GYk1VLI>-j6c|LPe0>UQ{BYYBADPaL#uK042FeyyVeKe7ArZ;TJf!=&@Xou3%D zO~OhVKjD4dG3Zr^cYS7{BYuk3QHz^|A3{8_{iCID7AxP`W6Hr_2Ib&|Mi=vi2xMU- z^Y19^t6@j{PB-@7oY;SheCzM5jfu_SFX;cDAqPYzj-vik zUUqi*k73Wt$sN{mRwf!bc3^IS&%rlUR92ckdFELCdBXhLsKBAUxq&wT3>!0HjJnwxw z(bL@e*!8oA-gkY5KVkBHFPZicvuWE8GWd2)9ifS6oo($=1-_T1Y{=s@ zWc1byul{4?^T){IHEwhxQ*-pc(D&M3>Y7!4ta(;DJQ0iI=fIRgc-9rney1n~>}BZQ$S) z*=@=77RHSxEccGH&4kg!9km~`)47*%^I<~;K7Fj65Zq3tP?aV<*NBj^ev_uK2%^Hu&Y&(gyE-XY8cSucZ$zWIp*GcTUSUUsk+U`Vwt? z=Gc9+UZRc9c$)k@u1IYD#{0VKv_q$lIoi$?I@-!Dya4{6&M83Lh|dseH@*vrb2Axx2Tx-V%9f@sEbgEGF%z zX!{EEon@^#72emd^XbG*__`Usu7a;M)=-zh+ZBqpuOZ%VRDV1GET?{NpnfYdu<1$v zoSVVi137jyBGD5C%pH~JNlDJt{~zMs1-`24%=_QxoLo-AEkHm-Jm-XKKn{iwE;^ig z5-uVh6)-B(YDoyu1j0owiXA(KOWP>4Z_wB>%1oo84HP@H#STp2FIwu*%Im9@T0eex z+lWkyN@r;6CAL`p-{0D6CnqNtqE7$+^*MV#=hf;O4 z$LFYn4kj3dMjmF8hfStjosUaM-(t#HvcrlDf3(b|@f5b+|NHNL z)XtXdxs_?elTLgY#G6U{^tu0#wd-U0n)5S!uRJkh@P64-{E&WEI{OT|^$oONUHdi- zZh2eh3b2>9Y15z<&6kI99YxNIN=W@o%J-dKp+blL!^fP_Pu~%suNcp`vGwn>AN@*J z{Ns$D7N7eMzW2-2){eDM#|0#U%leCQ|(f5`tb?3s7q3Pe>G4yTDPtx4{yua77ymRME zHFr>YmDalZ;t#z|8iRkI^{C@J9BT|TOz%CpBznokjQ^QV|Li`$8an5(i!Ram1Z`m+ zn%*~75*GbgU1Z!4p3`{AYmE#gUK zpH%*T#$WT^fy_-OF*m)>f61~X18(|Knf5a?uTkGO$Ifj_n9q*jnnT|=mcC0iTOY$l z?(^7}ee2SHHFjS|Szb4cI#tt*oA)~x-}a^6jQgkQCzOZ3kXLyA9|T8T@@Vk)_dfVG z^PXwG;EQ1(cKa4wybPP+WBgIlT{w{W(G`@{;j!aGZ;p+IJQ;H_=Z4>&-Ye`38O`_P z+s+vg8csXZSR0|;%sM#2oConZ-)RiI#3|b4S!@%|r|%s(pl>*@q+j^)!13uN^vP2c|!9jLydXZ`Q<60qwK?@aS;Rj-8G4 zdyR~p?=a@a@1Gdjwdtmo;mH2fKJ$?MjrRGY1s6Mqrjv)d&tLNB*osRYb)GvsJ@Q=b zbbafHuQql?rn4=d=R+qtuMEs{UU}Ak(Xwo0l68SWy|i|f#rMzW`^N+EL*;(Xilz)j zD{W9olye~ZE4*y(`uV2s&|jdN*7}ZHXD(q)47-K2*~rJ|i+)WT)OQI$yNUERZd%at zX5eD<`G@Sjm_1m@?MpnuCdShd@R=2qOC{yu3>g(lJH~&&> zrf#~qrH(W0o6MQ^>RYa%ZO@^NUrk$|O`D%Z-;!$c`RA?ui@$eibS8c6?d+vU%e^UD z%l}6D8_k7&Pd=G<|03>;4pnnm-u6Mw>1x57xE%NbMJ8g?<2An z)hnHW%{kXA*G6Q{#hhcE#zHkrYIHMp7{b^qt99XR3xUIVUU!MHua(&B!q^ceyLz5L z0fJv*jtgTWfqFmU!rOMTNG`f(u=Bt#aoUBkX+XT92`ZSL&v9XFFZM3<{vH?JwhD!O z^db{AE{w_U#30@q)|bl2bLmn7V`pI4`t$sC3w6#fdX&+vKC^?QfO>Bp zQ1lWmj4}T({#$*H6Tx40wMGEf1BueuV*|!kfkQe`z5*HeKY>-T}P$_}2 z8X#Uq=NlM{gHvS29$F5t0Gzpjv4_SQT;B*dW23Q$M$s61XnIcEELXVp(BOBmhgMaC z{WJe*>393ja(C^Y9m{wbZSH-2_Y>l9-y__ca`s>gZC}oQ?sXS!y(sA4GiL7?PQxxd zRv7d*7VhL;d&TA}hyYj3m8|2vQaBNM`X65vPFbyzA_Z~CvGQ~@LRd$ z_Hp$kBcA@pk1gJ8>HWmwNdJv{Q8@3`+xJgcJVN2h{TG+~kt-M%;J@%CR06r6#dG** za)T|t(1ssp@pF6xx#<>v&xXI&;&b?Da*Hf3`-pPbUNAb|p1#eUDfm4$e2umD^%d)X zuZ{m37O%CqXTPnP#whoM_1|p$_gK8n;?D?A`aVAvo>ab|MyJ*g<2I8^&pbDgKgl?4 zza6g6knDeR3Qk*U=Pyk>YavR1Q#D#!_dKAy~3#zlk7URsRMe7d!6a+sV{XRTsVfO*0b2ngOr>09?5zA zfQPG@>Y__BuBUo?)9nkQr@wn>LwTamL2s`DO<(CIyDnAF&ZE<8{g2snTC_D?9zKdc z^!qqQ4cr7S;rnQ_(|}5gn*JH^;lSQ>{Lr|470+nHT~ zF5=zTyOVgQead*R?0J4m`gRiU+4vPI?_`}s&+dP%E!$dKwh#T$xgy#AjT3Rdl`rDB z-)yACM_N4J;`uHveMTQP)FV##wdLjOjRtn>uF%V+2fpU=)zx=izH0T#JJwuYv65X2 zg-fFAqmx!IiOSU9J<*!##cQH#R#)J;f)=&-^6HgqqUEcXPbs>*qN;k;@^vegU2eP? zKRoSv_UX1pmby)Kf>Wt^bV+sjn%0E0J?R)4LhZtOc*l^e#cR$RJ!Roxpytd6ff1m_ zVEUW{ypv#TCy*wZXmnw02T*gu?JkVf0!2@ANx?Zl(VGbrJ?%TBxhD!-7#j~1y?htO zMgnQ$iHHkhn$w7mW8up*5YamZ6upB$x}n5=7sfQ_61}}HjA?GhtBEET#?-(>ug*fv zHS@rkJNouuUw5x>pRDZq4svhw?_{po#2!SRv+od#yMY}6o(FbvZwl-oV$Y^4WQzRco&+xM=qxECLJZ8rz<_H}vv zrsg!-ca#uuTn(4-QiE}>F8_re;gWleOZahvQTD_qT>Dk!viUDO!6mnmOZcq@bI+v~ zo@2w`#edJ}ScMX-S8t*V!Jey$Abcl06K;Zgy*F;_GFKn9ST#Jx&Lr zUHI@0(RKPpr_Tv*XWFEU?fxC&>Bg6L=dG^1ab?Y2mEIPew#1X~u08c8#tgc7wQFDA zP2MroF2>G1c*AbUu@nAwJ5$=`>g_kcblmu&x$Q*Fue2X!TBOZQESfxd$`q`U7IeNJ zrKoTUK60{GI&teT~^<7<0?%HyPMx0R-=e;;WWRUmfT3p)3)0TcRJX5{<(*1 zZmY|iR`zs$Tg8AP*G!yhwj=4(@6dye^V@FseRy;tdKWi`#3(J|f4%T^XtX^I?i*uvdLA&8dGu_iaX;eKK}{k*f|~J z?lwQSUN}D`{X5e9O!@g@&+{{UK*zYd%}?2d^D}&4N1C50Kh!(V_K|0&l{Tg+X$PLq zpW89+Zu5hUwF}iZ{{?JMdhMt#rLN^s*E;Z6w3~K3Ru}m=*-4ylk2tvegIj#8!T4EU zyOVjV5-;z+3cOW0ytjBaZX8(Ves4_ZS)-?i*6 zY~ZfOrsx#(B}#aYOZ|tj>&Tj-!k7J{b7%wfHeyrESLX|Fz^0h!KMo#Yk5MDI*B5|dX{r2!vEpC>kw}Q-1G}wV5YG*0>V|WZ?{$h;5BMAI72RLhxb0IY9A$GhG;q1NkMUyD&Bl z$e5cba$zh2WVt6QdliB~Aj5nj&4n@KG-fU56j1b!14aL37se!`B52~M3u8xs{1S&< z7;6HG-cA?B8h}b~Jy7&&fueV>3uEhnqNg<$U~CnTU!ul^u~MMYnXqs=Q1qv{(AX0a z{akR-PXmg+hyY{f7|%t&#f3515yC5B?FhwQ2N%8LE{ut96urYh(c23YJ@kbQy(XaO z?Q~(R5h!{)To~I7RC@2Vum&jlRW6Lp0gC=ipy(F?MPK}%(mNg~`uQ%5jRcB*#D%dS zQ1sGV7<&&y^v(iBuNf$MCtMhN9VmLoT^M^AD0<@efU$i*rFV~ol0Wb>@&{l{atG00 z3l#k&K+!LAVeD3*=!=g8#!7*rKhK56J`#V8eI%f04KMzh_hNH^3O^kvy3<@}>>nvSX_vgytc3-ET$&S`6&~httZ_}7p6M@L*#1b?($4fI?t9YrazCE_I`^~b?{RNQKgYc`V>2so`!f!5Ka+8m`+FHJ+|Omy zVpVBpW)t_rnMb%E%{<2a<;>&UHwWv2tkMPdb3Yh7%>794s4|NC-xP}0v^@8!a0#dac`0WHxlbv_;T~O z>0o81V~~#05bsIHu+|7n+i=y{=-GKnV8Rzvu4%I}(s5C*V|2(6+P#x1Jn8rb zvD~<}`u5vbRJx{ZI);Ge1wueWuUS(vol@x5UuiI-wQKyu6OD9AsAIs&^{a08)+OzM zI7=#TFJD*Fj%b(5jjIsIU?I|3RK99e%{?>AKYQ zHt%_h?Hff;&9o7Dz(exaZPaePDlW$bD^b^QUI*~VYo1dBs=f^*|qb%k#_yOlo**B1R z^-V-K51tv-p3@5U25jb>fUj~+z-Hu4IuqbApls?dd62N*bPjDAJS+NCXjXI+djKlf zqgsK^`6%`fJgL0_j3>7vw|Z(wdiZDPP;39vY|a78&x?dI*{A%%F!rG0|I^^8P{qG+ z#?<4^p{KCb{~csy^}uaFlfK&FVTW{<6ZeMAqr!PW|2XuVgPGxo(?47+dEFz(@}$9DU`-P+&ecyhX@$io9SMt#tWLw|AK`JB11AZpT3 zGCTSoJAC064m;uR6p}9VSe_z1W{+Q8Uib-QdCzkO!{f;EHj>s&Lv_9Y=SU2}h7jR5 z5`H7$RbI85u_Z(JIJRVJjqI;;xqqwtZ}W{&fA9I6!@VGyap~-64)VN-*UXMi62y)| z|Ji}?oiC(^b3?s ztP5jjfTDleg|U}`qIb-Nv4cR-+Yc1ICZOm^whN3k0{JC&xG=UID0&SpjNJ=Vde>UG z1StAtE;O=V(Vq@3`s0D3pYOuhNFcvN#D%e8K+%^h7#NeM=$!)r#w61aJ;{Vc?{%Q) z9d}_&GGSgx9CKkzGGTrRD-(|G0a1D-3l?kuioRsQqAyvm=+^*6|5l*rFLa@i{fhoP za9}I}M^!dL-N^v1g|CK-+B4FQT?5GZ<9CTwiWi=LGU8{6^(F}CG_u@mq{N~dJO zf=7U&f7pew9YE2Sjd{_p1B(7;7shIVqJOUoW9xyUzt)AZTY;jt(1k`8EP6A+Meozd zf|X8(_XQ;b7Jcdb@QWSgCi>Dn5`D>fmEOHBj7jFJ^ftNB=%OjTjo>PeIv~HqW*3_M z3c@7=<`*mAM%2dEJE^-lzCI0e?)#d^mLFBV`m}*MK0^wws-e6Y!1{Rk!{l~Llzs@$CERGvwGe^M*Di&31qbIrL}NB zmsX1`c5`|i_rvK&xVx6`&l#Kdn=|T=$nMG5%l&A^G43yC9OwRe#tH7O{re-CN0G}O z%Y2#p@yyq`pUbR8E~^vfi9NWJdsA=^_vYX!?hRSnvyc#HHFDpX)x`Z+*2~;aXPx1G zHtRj^Em`Nd@6Fzq&EAdd)7;NwpXL5ub_@3%y&8KVIqr3k`{7FaqZ8Mn`iN}7FT;oP7nKI+r@ti??_f##w8~p+;eLzt~Cs~ zpK;0Glg+N=zwpB}0=bX5gh$AOoc2!$ucy(-O||%0>rb0A{+{f3rp5OuFz(x2djA-g z+*@428_9><{g$3=|H}=v_*zTnZr} z@J#k^ljyp$i7uqduBRtGP7)Gx3QQ`AE+xq>k<{SGREt+sRIOZXl<~Tf9lP%$;Y|wL zxy;xN*-F(Y^SJ`r6dE0Tctfq^(+aFR_vFn^B+sq!b?L`@9pufeZ*}3L zxXh%^=vcQGLASo!A;g7b&xY9FQ1tvs?L1E^aP2<3a_6f#IDPI)%&B|obe~z?tg}Sq znr&n7@J}mm_WBFaQ`2vtKb)!v(wtfW&mkY~R-ewJ6R|J6OuwM6Li-+Vl08xeUP#`Y zV_$mQzIE32GaeD!O?jv@ihq(5ds1R=|49w;ui~k~Ys@|Y&f2R}gZw%{o|EOx`mak} zytcL3p@Dxrcg@nL>ov^i)1}H;JbC4X^ynm~Y(483J)-+ocrxVnvdhkNYrHs;<-j&Q zUCM!XCB@fBe9xNrB>QbU>(z$%r!!e^)#rOIr#g92 zxG+^l)~%fC)(hw7`5wrxyUNdFoye}MzUZ`_fBgw`%O3AUPwzsqD^D-0n)4_l$Qh(R z72(`S_bhp2I=3UQ`rhoQv2iAu;26fykn?H(zInm&@MG9Il0z zh02V4w{sax5dAA3GFrvyL&hQ5kiU$x5s`7^ZS{wJ$V2k1j+Jz|Jeh~ylN`j)cTw21 z0_+q+qj;+??BAY<=5fAg26Xd=aBgT_1e@Uz(lRQMw_@4PciZ3ZFSnk!$#ZI zcpPZR*5X|0d}8kB!Rdw*;w6Dbe~3OkQ40=?iI?P;5HHCuR?1C#<~4^EoDQUmO-yrPYzR>FbAh5S zJt5K8%c6gdz@jhx2ho2Ih*v_qBhcsz@z>}J0b}AFMei_B^u#-gp5+~5;vGeArwe0^ zK+)Ub!kBnRrBnJ6f;B*Xi7FSy<^V;1CQ$T?fTAznQt2HJ6#aY`n*B_o9|2c-gFt?X zG#46uBH^bfb6{*Qka=-*r;8^V?Q_kYb9o*I%D>2co+xmk;X&oE@r<#`=npae8~q{1 zETccfaEbmUgT?I8D-v~%2R(>KF~)}?Pve~a`a>+`%VoPzM?24{s+VBXmNp~a>D zCwHDp{{PG3nG}-f?SzJ0j>V@FMsB3VJ)We{;wP;C=Y%K4ukV-~|Mk!i&(kboIQ|;k zAl&Y-c#D1TLyI3(KpeVVCcMXEea_-F^2B|EOY}9*kUPpHe3;G8*TAipyj9oQ;ZLOC z<5Tc^Q}F+rf{PVs?F>3FNUc6yb4RT~I$@1k{o2LCB!6C2`5JTHPDhrg^&Oa!)?lgJ zP-`G)EzmJW?II96<33!q^6nI^lrHwrEc)~cC{v6A%2dkrlj@%oT~U;@zvk-ID_7oC z*`5=CD6TX8lN{BLh+(G8sHi-teP1O9??Lz!TlTBB|zTxS!RMFdc zd9+>zT!_E$bP%7kFMV2lmOA3!4-Mr_d5!mT^;yc$YdOYuOXe>I;IB)nGsr$aHGkn_ zO_$eme?RHRt#%~ey8+$$e?Xrl;M>-O9?Sjcu`C_-#P!#r$1)y0mOeeuV_9Cz&2G0YmEWc5*H5{9?Gj5Zr1L~{k@{q!}~_>E6Hwg z_xiZ=yEfaPKQ($Tzn}E)t?B*XmH>JfZTdG|r8$|8vH9+jk9nH(fA>?Q|1r|Pi}XKh z(l5Tp)z$gnmSh`ruCC6f;(vOe8}fK3x*_e?wVmBnDSXd!*f%T7=*@Zc*G1#3_m*qV z!UevW)>`%5^v%kW>=bzG;Hp<#^;{ivVm5ZNN2XgoDebxo>cm`lpGsHx?nAy4#%8l@ zV*V}j-PyjD?(=>91@pbQ2YMN8ynM$p=#1x88||T5(Z##co|}0t zy?EBSoabhpE6+|u1EIawZ^FL$6P)9*diHhE^6YD)Ukx_)eSve89s`c%`5o9bTzb;C zZ8rAEm;Momee&|`>!XwAOUHpTKc*FhCPB9dy5$dU=(l0O#(ql+{l<>@(h~nRoqr%( z=HinhgW?}Yjz_SQK6=7Ho;$q%D(8Z%9i6sf4QCfPkx8N7(;fzrt{brzKWV^M7UkeK z51a7?1D;%Tgm=Dz9lf76ObR=kS2LHeo9Z_$dMoFvi=?}dj%~RmTux3#cuB+PaA44^ zXn=ZEiyj8^yWDp!$tqk*IH&)tXa#Mp866Gg+PT?h|7}6*^DE&ivFl#3F^99D;)l}V zRYwEI0FUI4H2N4hw7>r7UE~Z%40?7a`0)s5=Hvx03oX79ewp;h&fZMoFT-}^b;urMb5H$!8vT6*bVpo_ z%~`_9eyQP+fn{GEL|t>`LvN2LreAmWQ5hb-t~4sUrFzG|bzU^BVSY4&a>y)h)9c8b z=p4$J%thIh5Nw1D)qIx%^j>~P+4i4vLv#|~>c*D}!fUYoUxi)9-jrJbHg!!n z^gZU4V83%n0rnp!a)w1=s6R4^2znoXz@}&a**W0>baK!g$!tPqfgZ{qsFzB!bbZE9wgu>@oQ-FMe>W#RTtHck zp{!KzN~kj%>qdn~QVu6`{Ndr0t)K8|gJwr(=AcuO+drH}ct7E_m#s|cs-1`o#MLX& zzBVK0*j&n4OZYkLb)$Z`vX5G-Rc9BEFW}nipCrwX|E7|Wv6r;C;XBS5W#@k%1@!kF|PcqK8-g)#BG@aTyG z7sjOLpmlQb#)6vEGDkN04#1f78$@6F4WchS2GKw4!q`Ee=>yC_?RQ~^y=;*ITGt#7+VOGzCr@1 z@N-<)PG14m#K?+ZS&XcRagD!*N9pVLufI3bKPTb$@An@>7UXIzxS9&CMCfqf2=bq! zfn(fX4jd2o{d>~(O8#RcLZ{MB^Z!iRS?;c;!j5$9DchfZuvJsxX!@~qzkg>&6S@fQ zp0X1e&HO)=ahkikr>r4!I~oalGxu@dpLvkGyQl1&(NWkN+=oWO{@_9Ghl5A>U{T5= zS>`lJIN!|UKd(r^nKv03kjGEXvHtbYlA9--58?5Lw^;nYtiQ37i2t>g@4myn-(dY$ zT70|3@3#03i`NS0x)mC7T4xvDNTrecXW^v3(T0D@`VXVB$w^N};n!P#)i24ky!^Z% zJSqL9yd#;D;*}E+?z#6ZUIz`im0a@QZo~Y<;`O9Sj=E?3sXNA%Sp1;Hl{UTa$>1Kb z{%0(`6Ba*Z={*E)y$l89u-sR4Ag|xtuDoX41trw8{tt~x8G3;*5=oZ9IP!+ zXOgfs-;~&pV7Vh(7b*ft!ya<2q@W#SVr@~h(llxSol!{j;0;&#Ak~97TRoDbX|gGk zWMtCa@g>uXvaQ&Kj7{F&`N>lW)@rG-Tj84tC8|B!2KH&}H%=;;nqn^>9kGGeUNg$ki1NKta6XL;8WYT$)(?%1`VZU2v-7J@EDV-k>oj9 zUgnjdy4oBr+vV}E=Pp%-@g0 ziuX;#{=>b3U?_pqOHE=k|mKYjVt?CR>42eO@ya;wL-RB>)t5L@%i`wrYqUc$bM zmIbhvukXUy4gJM$&Gk9kZsOZK>(Ba3-$viWJ3mQhf!)GcWr|1jENgvL%QckSxToX0 z5?Q}|C%?*I#X!rxE7t$(2M+%Ue1WRXj!p6N6o9JclC8XT9@G* zsHNPK?H08xD#o7uPtCV(S#*%^+TPB}dwfstTaFDLeI)-Y!AGk})6_n}Egw*hzl7dR ze)pSxNSVHwQH=bS@1s2$=g${4@g13;bM~4k%lRtHM&7C7+ci-a9u;!j)7r7r%$ zlLyGIO3R`nCS9rR#XUpS*zj}sr+(h|2 z%=sFMKee8BmiOedTAPULw9hHxEVBi>R9F7~u9hs~nwo{(PtI_9lf5am)Tg&8le>vW z;a{VU{Kg+#wux`iS-!ezOR4c54Y=_(5${FUP1({y`r&EzeZ;v3f9Cvyh5d?KBAnyo zrJ>g6Om3k}n{1gkQRYpQcYZJDqXU%pRRQNCy*ur%=bvG0$^9@eboc&`&p)H|D&0!+ z6P)$YRXtHRE|cJ_XFHd3m2*AECHvhz2xc-)WHPzSq*L}W+3H^gA9I*@NLacPU_8ul zd`@rv523FvfL0m*53_bz>w|Uxx*4>6ZA%!!x={fT3g}?1u3lcb<_p!g{m&Y&F=QuH zIi;(sE0;vpu8gd%TvPp}%1C*HRmiHy+VaIUm3mwrF^})S!Zxc`k+oIjDnnOZ02xG**o7yysEFg6{?&*(b< zW5c*ntcf8mj5UBr&peb^ap zdpo1Wt5=ubqertazMxR850YMSIh*pDnw1rL+Hv*Xykz+w8x3>mnXV;>o6Bp~nN@%5 zGh^kt6-L9_;@7Oel(KnX$jn=}#w5i0E~s42`gl@eW>>GkUVdwKymZ^(v$2g|x!N;H z;dU*SGnr&zo2g8(Gm}hMea}y-&s%iG747+lwHU}Ouc-7`h|bpU533SHxNsNZAA(Fo zR=@Xea&Cpp`sTAz&KpBuN!U`?=i3xihy{}o>SRX!4|vB3QV zW?XH@KPWC;>P|G~sh|6#uCuwt`5DeD@7wbj-{<_rhe|RzbD8-H^V)A;>BBZ%aGU;n z&+2|1|0ta9{Gp8bzs^(r*2%1G&0j4>&8_wq3dh*JO<|b-y~6nY?g)4TYy&-WntA1E z#(Tolb8UNbgnM3RfcN;E=H2%>OYPZg=MSd?;lifEx<~4M&AIH*sXNKMEui_bn=UU6 z5!StQp6bJ-f&Ql++tb@VB>sKBc6KQ}n#Z0D4Bq{g&X6W;Ub>!Pu6~}hJ;8ja)}OUa z^A-7f^q>8S!&ysh`oiA)ue0(S_;P&LI`VrL<#so;)>B@5qg>Gve{fQ9GY4%Z9g3ss zq+2#s%9GY6-Zv^EjjjJlv-f{aM(u*C-#Qnwaa-KJL7hx;cdJrZd=>%ffT6Z~3PO;d?B9ei&Y$ zcBtjm`S0a%2xplY8iC-lYpI{`BnP~DdD_zEJe$&7XrG3zbI;nAAZI-2JUZ1g_B?D; zxNkFeh7T+C-ev9dqoBhDpWx?Rx@aRW&^xVud7K|$pPy8lz>m7Iz@uTHU4QkSmCa6h zhi_c%pV6vM?Ul!iHqAcP1IMwJt1?mAy|dj*be10PD*bv#>3^5}A5AIGqqZ#ThQo6k z9y*tHw9(-u)8giEOh%EhgZTgmeFCJ|zSISFgSLs&k@JD#<%CNJ%lwwLGTz~NYGUN7TY{fzKeQFp#; z!z-`m`|7)Key@4Yeq)9GHoU&dNbv-HS-o^tUG;D2pM6>H{*3eQ7SoRAq&cssugT)O zjzvaLO}nh4FHLT%>JOA2uMX-x^$FfL_MWTns-w)+{yf=-=co3bP2M?!nf_VopAw&j(NSDwLX$R_$zuP=6a zPraL5k6xsVy#A~wZJe^ee)PX{w!3e63ujKJ>UU|(3_7(3<~YGE>Zb-~J^#o<1D$