From 7e506f79c935035a1efacf95c9fbfe25252a630d Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Tue, 10 Mar 2020 15:41:20 -0400 Subject: [PATCH] Preparing for 1.14.2 release --- Documentation.html | 1328 ------ Documentation.md | 5 +- PManager.txt | 29 - README.html | 37 - README.md | 3 +- changes.md | 3 + examples/RegisteredFunctions.dat | 0 examples/SystemThreadedExecuteTest.lua | 6 - examples/alarmTest.lua | 11 - examples/compattest.lua | 7 - examples/lanesintegratetest.lua | 34 - examples/lanesintegratetest2.lua | 59 - examples/lanesintegratetest3.lua | 48 - examples/lanesintegratetest4.lua | 27 - examples/lanesintegratetest5.lua | 28 - examples/lanesintegratetest6.lua | 14 - examples/lanesintegratetest7.lua | 29 - examples/lanesintegratetest8.lua | 11 - examples/lanesintegratetest9.lua | 27 - examples/loopTest.lua | 9 - .../GuiManagerDebug/Core/Clickable.int | 15 - .../GuiManagerDebug/Core/Colors.int | 1680 ------- .../GuiManagerDebug/Core/DrawThings.int | 5 - .../GuiManagerDebug/Core/EventDefinitions.int | 85 - .../GuiManagerDebug/Core/UpdateThings.int | 46 - .../GuiManagerDebug/Core/_GetAllChildren.int | 25 - .../GuiManagerDebug/Core/_GetAllChildren2.int | 21 - .../GuiManagerDebug/Core/eventable.int | 14 - .../GuiManagerDebug/Core/fromString.int | 0 .../GuiManagerDebug/Core/full.int | 3 - .../GuiManagerDebug/Core/newBase.int | 244 - .../GuiManagerDebug/Core/patches.int | 7 - .../GuiManagerDebug/Core/toString.int | 40 - .../GuiManagerDebug/Core/touchManager.int | 204 - .../GuiManagerDebug/Drawing/AddDrawRuleB.int | 4 - .../GuiManagerDebug/Drawing/AddDrawRuleE.int | 4 - .../GuiManagerDebug/Drawing/draw.int | 12 - .../GuiManagerDebug/Drawing/drawC.int | 89 - .../GuiManagerDebug/Drawing/drawR.int | 131 - .../GuiManagerDebug/Frame/newDropFrame.int | 37 - .../GuiManagerDebug/Frame/newFrame.int | 8 - .../GuiManagerDebug/Frame/newFullFrame.int | 4 - .../GuiManagerDebug/Frame/newTabFrame.int | 59 - .../GuiManagerDebug/Frame/newratioFrame.int | 0 .../Image-Animation/SetImage.int | 13 - .../Image-Animation/UpdateImage.int | 5 - .../Image-Animation/getTile.int | 20 - .../Image-Animation/newAnim.int | 57 - .../Image-Animation/newAnimFromData.int | 52 - .../Image-Animation/newAnimFromTiles.int | 59 - .../Image-Animation/newFullImageLabel.int | 3 - .../Image-Animation/newImageButton.int | 25 - .../Image-Animation/newImageLabel.int | 18 - .../Image-Animation/newVideo.int | 62 - .../GuiManagerDebug/Item/newDragItem.int | 51 - .../GuiManagerDebug/Item/newItem.int | 28 - .../GuiManagerDebug/Misc/AdvTextBox.int | 45 - .../GuiManagerDebug/Misc/ApplyGradient.int | 36 - .../GuiManagerDebug/Misc/BottomStack.int | 10 - .../GuiManagerDebug/Misc/Center.int | 4 - .../GuiManagerDebug/Misc/Destroy.int | 10 - .../GuiManagerDebug/Misc/GetAllChildren.int | 25 - .../GuiManagerDebug/Misc/GetChild.int | 3 - .../GuiManagerDebug/Misc/InGrid.int | 3 - .../GuiManagerDebug/Misc/InGridX.int | 5 - .../GuiManagerDebug/Misc/InGridY.int | 5 - .../GuiManagerDebug/Misc/IsHovering.int | 3 - .../GuiManagerDebug/Misc/Move.int | 4 - .../GuiManagerDebug/Misc/SetDualDim.int | 46 - .../GuiManagerDebug/Misc/SetHand.int | 5 - .../GuiManagerDebug/Misc/SetHover.int | 3 - .../GuiManagerDebug/Misc/SetName.int | 4 - .../GuiManagerDebug/Misc/TopStack.int | 10 - .../GuiManagerDebug/Misc/addDominance.int | 3 - .../GuiManagerDebug/Misc/addHotKey.int | 6 - .../GuiManagerDebug/Misc/alphanumsort.int | 7 - .../GuiManagerDebug/Misc/anchorRight.int | 3 - .../GuiManagerDebug/Misc/centerX.int | 3 - .../GuiManagerDebug/Misc/centerY.int | 3 - .../Misc/disrespectHierarchy.int | 3 - .../GuiManagerDebug/Misc/getChildren.int | 3 - .../GuiManagerDebug/Misc/getColor.int | 3 - .../GuiManagerDebug/Misc/getFullSize.int | 12 - .../GuiManagerDebug/Misc/getHighest.int | 5 - .../GuiManagerDebug/Misc/getLowest.int | 5 - .../GuiManagerDebug/Misc/isDescendant.int | 9 - .../GuiManagerDebug/Misc/isHighest.int | 3 - .../GuiManagerDebug/Misc/isLowest.int | 3 - .../GuiManagerDebug/Misc/massMutate.int | 6 - .../GuiManagerDebug/Misc/newCheckBox.int | 41 - .../GuiManagerDebug/Misc/newMessageBox.int | 36 - .../GuiManagerDebug/Misc/newPart.int | 49 - .../GuiManagerDebug/Misc/newProgressBar.int | 45 - .../GuiManagerDebug/Misc/newScrollBar.int | 42 - .../GuiManagerDebug/Misc/newScrollMenu.int | 98 - .../Misc/removeAllChildren.int | 6 - .../GuiManagerDebug/Misc/removeDominance.int | 3 - .../GuiManagerDebug/Misc/respectHierarchy.int | 3 - .../GuiManagerDebug/Misc/round.int | 4 - .../GuiManagerDebug/Misc/setBG.int | 3 - .../GuiManagerDebug/Misc/setColor.int | 14 - .../GuiManagerDebug/Misc/setDefualtFont.int | 3 - .../GuiManagerDebug/Misc/setHotKey.int | 24 - .../GuiManagerDebug/Misc/setNewFont.int | 7 - .../GuiManagerDebug/Misc/setParent.int | 14 - .../GuiManagerDebug/Misc/setVisibility.int | 14 - .../GuiManagerDebug/Misc/setgetText.int | 6 - .../GuiManagerDebug/Text/newTextBox.int | 181 - .../GuiManagerDebug/Text/newTextButton.int | 22 - .../GuiManagerDebug/Text/newTextLabel.int | 16 - .../GuiManagerDebug/Text/widthToFontSize.int | 5 - .../GuiManagerDebug/init.lua | 55 - .../Menus/newselectMenu.int | 0 .../Res/Parallax100.png | Bin 233107 -> 0 bytes .../Res/Parallax60.png | Bin 359698 -> 0 bytes .../Res/Parallax80.png | Bin 358538 -> 0 bytes .../love2d Threading Example/Res/ship.png | Bin 427740 -> 0 bytes .../bin/compressors/lzw.lua | 73 - .../bin/converters/base64.lua | 30 - .../bin/converters/base91.lua | 72 - .../bin/hashes/md5.lua | 377 -- .../love2d Threading Example/bin/init.lua | 739 --- .../bin/numbers/BigNum.lua | 683 --- .../bin/numbers/BigRat.lua | 227 - .../bin/numbers/bits.lua | 191 - .../bin/numbers/infinabits.lua | 244 - .../bin/numbers/no_jit_bit.lua | 333 -- .../bin/numbers/random.lua | 232 - .../bin/support/extraBlocks.lua | 146 - .../bin/support/utils.lua | 127 - .../bin/support/vfs.lua | 0 examples/love2d Threading Example/conf.lua | 39 - .../core/AudioManager.lua | 212 - .../core/GuiManager.lua | 4027 ----------------- .../love2d Threading Example/core/Library.lua | 319 -- .../love2d Threading Example/core/README.txt | 2 - examples/love2d Threading Example/core/T1.lua | 598 --- examples/love2d Threading Example/core/T2.lua | 598 --- examples/love2d Threading Example/core/T3.lua | 596 --- examples/love2d Threading Example/core/T4.lua | 596 --- .../core/ThreadManager.lua | 158 - .../love2d Threading Example/core/Utils.lua | 797 ---- .../love2d Threading Example/core/bin.lua | 3207 ------------- .../core/lovebind.lua | 103 - .../core/net/Documentation.txt | 106 - .../core/net/admin.lua | 58 - .../love2d Threading Example/core/net/aft.lua | 325 -- .../core/net/audp.lua | 273 -- .../core/net/chatting.lua | 134 - .../love2d Threading Example/core/net/db.lua | 15 - .../love2d Threading Example/core/net/eft.lua | 24 - .../core/net/email.lua | 54 - .../core/net/emailWIP.lua | 53 - .../core/net/identity.lua | 266 -- .../core/net/inbox.lua | 70 - .../core/net/init.lua | 664 --- .../core/net/logging.lua | 7 - .../core/net/loggingWIP.lua | 7 - .../love2d Threading Example/core/net/p2p.lua | 31 - .../core/net/p2pWIP.lua | 31 - .../core/net/relay.lua | 24 - .../core/net/settings.lua | 48 - .../core/net/settingsWIP.lua | 48 - .../love2d Threading Example/core/net/sft.lua | 179 - .../core/net/status.lua | 44 - .../core/net/threading.lua | 41 - .../core/net/threadingWIP.lua | 37 - .../core/net/users.lua | 37 - .../core/net/version.lua | 43 - .../core/parseManager/AICM.lua | 37 - .../core/parseManager/EBIM.lua | 71 - .../core/parseManager/bytecode.lua | 44 - .../core/parseManager/init.lua | 1277 ------ .../core/parseManager/interpreter.lua | 10 - .../love2d Threading Example/core/test.dat | Bin 56 -> 0 bytes .../love2d Threading Example/core/test.lua | 18 - examples/love2d Threading Example/main.lua | 37 - examples/love2d Threading Example/main2.lua | 65 - examples/love2d Threading Example/main3.lua | 37 - examples/love2d Threading Example/main4.lua | 19 - examples/love2d Threading Example/main5.lua | 32 - examples/love2d Threading Example/main6.lua | 14 - examples/love2d Threading Example/main7.lua | 69 - .../love2d Threading Example/multi/all.lua | 1 - .../multi/compat/backwards[1,5,0].lua | 305 -- .../multi/compat/love2d.lua | 36 - .../love2d Threading Example/multi/init.lua | 2272 ---------- .../multi/integration/lanesManager.lua | 146 - .../multi/integration/loveManager.lua | 361 -- .../multi/integration/luvitManager.lua | 127 - .../multi/integration/shared.lua | 519 --- examples/network-Master1.lua | 54 - examples/network-node1.lua | 20 - examples/network-nodeManager.lua | 12 - multi/init.lua | 32 +- multitut.lua | 15 - rockspecs/multi-14.2-0.rockspec | 1 - test.lua | 10 +- 198 files changed, 32 insertions(+), 28788 deletions(-) delete mode 100644 Documentation.html delete mode 100644 PManager.txt delete mode 100644 README.html delete mode 100644 examples/RegisteredFunctions.dat delete mode 100644 examples/SystemThreadedExecuteTest.lua delete mode 100644 examples/alarmTest.lua delete mode 100644 examples/compattest.lua delete mode 100644 examples/lanesintegratetest.lua delete mode 100644 examples/lanesintegratetest2.lua delete mode 100644 examples/lanesintegratetest3.lua delete mode 100644 examples/lanesintegratetest4.lua delete mode 100644 examples/lanesintegratetest5.lua delete mode 100644 examples/lanesintegratetest6.lua delete mode 100644 examples/lanesintegratetest7.lua delete mode 100644 examples/lanesintegratetest8.lua delete mode 100644 examples/lanesintegratetest9.lua delete mode 100644 examples/loopTest.lua delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/Clickable.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/Colors.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/DrawThings.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/EventDefinitions.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/UpdateThings.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/_GetAllChildren.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/_GetAllChildren2.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/eventable.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/fromString.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/full.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/newBase.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/patches.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/toString.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Core/touchManager.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleB.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleE.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Drawing/draw.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Drawing/drawC.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Drawing/drawR.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Frame/newDropFrame.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Frame/newFrame.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Frame/newFullFrame.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Frame/newTabFrame.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Frame/newratioFrame.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/SetImage.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/UpdateImage.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/getTile.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnim.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromData.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromTiles.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newFullImageLabel.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageButton.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageLabel.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newVideo.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Item/newDragItem.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Item/newItem.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/AdvTextBox.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/ApplyGradient.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/BottomStack.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/Center.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/Destroy.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/GetAllChildren.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/GetChild.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/InGrid.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/InGridX.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/InGridY.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/IsHovering.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/Move.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/SetDualDim.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/SetHand.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/SetHover.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/SetName.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/TopStack.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/addDominance.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/addHotKey.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/alphanumsort.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/anchorRight.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/centerX.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/centerY.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/disrespectHierarchy.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/getChildren.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/getColor.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/getFullSize.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/getHighest.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/getLowest.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/isDescendant.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/isHighest.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/isLowest.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/massMutate.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newCheckBox.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newMessageBox.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newPart.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newProgressBar.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollBar.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollMenu.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/removeAllChildren.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/removeDominance.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/respectHierarchy.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/round.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setBG.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setColor.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setDefualtFont.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setHotKey.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setNewFont.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setParent.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setVisibility.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Misc/setgetText.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Text/newTextBox.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Text/newTextButton.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Text/newTextLabel.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/Text/widthToFontSize.int delete mode 100644 examples/love2d Threading Example/GuiManagerDebug/init.lua delete mode 100644 examples/love2d Threading Example/Menus/newselectMenu.int delete mode 100644 examples/love2d Threading Example/Res/Parallax100.png delete mode 100644 examples/love2d Threading Example/Res/Parallax60.png delete mode 100644 examples/love2d Threading Example/Res/Parallax80.png delete mode 100644 examples/love2d Threading Example/Res/ship.png delete mode 100644 examples/love2d Threading Example/bin/compressors/lzw.lua delete mode 100644 examples/love2d Threading Example/bin/converters/base64.lua delete mode 100644 examples/love2d Threading Example/bin/converters/base91.lua delete mode 100644 examples/love2d Threading Example/bin/hashes/md5.lua delete mode 100644 examples/love2d Threading Example/bin/init.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/BigNum.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/BigRat.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/bits.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/infinabits.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/no_jit_bit.lua delete mode 100644 examples/love2d Threading Example/bin/numbers/random.lua delete mode 100644 examples/love2d Threading Example/bin/support/extraBlocks.lua delete mode 100644 examples/love2d Threading Example/bin/support/utils.lua delete mode 100644 examples/love2d Threading Example/bin/support/vfs.lua delete mode 100644 examples/love2d Threading Example/conf.lua delete mode 100644 examples/love2d Threading Example/core/AudioManager.lua delete mode 100644 examples/love2d Threading Example/core/GuiManager.lua delete mode 100644 examples/love2d Threading Example/core/Library.lua delete mode 100644 examples/love2d Threading Example/core/README.txt delete mode 100644 examples/love2d Threading Example/core/T1.lua delete mode 100644 examples/love2d Threading Example/core/T2.lua delete mode 100644 examples/love2d Threading Example/core/T3.lua delete mode 100644 examples/love2d Threading Example/core/T4.lua delete mode 100644 examples/love2d Threading Example/core/ThreadManager.lua delete mode 100644 examples/love2d Threading Example/core/Utils.lua delete mode 100644 examples/love2d Threading Example/core/bin.lua delete mode 100644 examples/love2d Threading Example/core/lovebind.lua delete mode 100644 examples/love2d Threading Example/core/net/Documentation.txt delete mode 100644 examples/love2d Threading Example/core/net/admin.lua delete mode 100644 examples/love2d Threading Example/core/net/aft.lua delete mode 100644 examples/love2d Threading Example/core/net/audp.lua delete mode 100644 examples/love2d Threading Example/core/net/chatting.lua delete mode 100644 examples/love2d Threading Example/core/net/db.lua delete mode 100644 examples/love2d Threading Example/core/net/eft.lua delete mode 100644 examples/love2d Threading Example/core/net/email.lua delete mode 100644 examples/love2d Threading Example/core/net/emailWIP.lua delete mode 100644 examples/love2d Threading Example/core/net/identity.lua delete mode 100644 examples/love2d Threading Example/core/net/inbox.lua delete mode 100644 examples/love2d Threading Example/core/net/init.lua delete mode 100644 examples/love2d Threading Example/core/net/logging.lua delete mode 100644 examples/love2d Threading Example/core/net/loggingWIP.lua delete mode 100644 examples/love2d Threading Example/core/net/p2p.lua delete mode 100644 examples/love2d Threading Example/core/net/p2pWIP.lua delete mode 100644 examples/love2d Threading Example/core/net/relay.lua delete mode 100644 examples/love2d Threading Example/core/net/settings.lua delete mode 100644 examples/love2d Threading Example/core/net/settingsWIP.lua delete mode 100644 examples/love2d Threading Example/core/net/sft.lua delete mode 100644 examples/love2d Threading Example/core/net/status.lua delete mode 100644 examples/love2d Threading Example/core/net/threading.lua delete mode 100644 examples/love2d Threading Example/core/net/threadingWIP.lua delete mode 100644 examples/love2d Threading Example/core/net/users.lua delete mode 100644 examples/love2d Threading Example/core/net/version.lua delete mode 100644 examples/love2d Threading Example/core/parseManager/AICM.lua delete mode 100644 examples/love2d Threading Example/core/parseManager/EBIM.lua delete mode 100644 examples/love2d Threading Example/core/parseManager/bytecode.lua delete mode 100644 examples/love2d Threading Example/core/parseManager/init.lua delete mode 100644 examples/love2d Threading Example/core/parseManager/interpreter.lua delete mode 100644 examples/love2d Threading Example/core/test.dat delete mode 100644 examples/love2d Threading Example/core/test.lua delete mode 100644 examples/love2d Threading Example/main.lua delete mode 100644 examples/love2d Threading Example/main2.lua delete mode 100644 examples/love2d Threading Example/main3.lua delete mode 100644 examples/love2d Threading Example/main4.lua delete mode 100644 examples/love2d Threading Example/main5.lua delete mode 100644 examples/love2d Threading Example/main6.lua delete mode 100644 examples/love2d Threading Example/main7.lua delete mode 100644 examples/love2d Threading Example/multi/all.lua delete mode 100644 examples/love2d Threading Example/multi/compat/backwards[1,5,0].lua delete mode 100644 examples/love2d Threading Example/multi/compat/love2d.lua delete mode 100644 examples/love2d Threading Example/multi/init.lua delete mode 100644 examples/love2d Threading Example/multi/integration/lanesManager.lua delete mode 100644 examples/love2d Threading Example/multi/integration/loveManager.lua delete mode 100644 examples/love2d Threading Example/multi/integration/luvitManager.lua delete mode 100644 examples/love2d Threading Example/multi/integration/shared.lua delete mode 100644 examples/network-Master1.lua delete mode 100644 examples/network-node1.lua delete mode 100644 examples/network-nodeManager.lua delete mode 100644 multitut.lua diff --git a/Documentation.html b/Documentation.html deleted file mode 100644 index c44921d..0000000 --- a/Documentation.html +++ /dev/null @@ -1,1328 +0,0 @@ - - - - - Documentation.html - - - - - - -

Current Multi Version: 13.0.0

Table of contents

-

Multi static variables

multi.Version — The current version of the library
multi.Priority_Core — Highest level of pirority that can be given to a process
multi.Priority_High
multi.Priority_Above_Normal
multi.Priority_Normal — The default level of pirority that is given to a process
multi.Priority_Below_Normal
multi.Priority_Low
multi.Priority_Idle — Lowest level of pirority that can be given to a process

Multi Runners

multi:mainloop([TABLE settings]) — This runs the mainloop by having its own internal while loop running
multi:threadloop([TABLE settings]) — This runs the mainloop by having its own internal while loop running, but prioritizes threads over multi-objects
multi:uManager([TABLE settings]) — This runs the mainloop, but does not have its own while loop and thus needs to be within a loop of some kind.

Multi Settings

Note: Most settings have been fined tuned to be at the peak of performance already, however preLoop, protect (Which drastically lowers preformance), and stopOnError should be used freely to fit your needs.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SettingType: defaultPurpose
preLoopfunction: nilThis is a function that is called after all the important components of the library are loaded. This is called once only. The first and only argument passed is a reference to itself.
protectboolean: falseThis runs code within a protected call. To catch when errors happen see built in connections
stopOnErrorboolean: falseThis setting is used with protect. If an object crashes due to some error should it be paused?
prioritynumber: 0This sets the priority scheme. Look at the P-Charts below for examples.
auto_priorityboolean: falseNote: This overrides any value set for priority! If auto priority is enabled then priority scheme 3 is used and processes are considered for “recheck” after a certain amount of time. If a process isn’t taking too long to complete anymore then it will be reset to core, if it starts to take a lot of time all of a sudden it will be set to idle.
auto_stretchnumber: 1For use with auto_priority. Modifies the internal reperesentation of idle time by multiplying multi.Priority_Idle by the value given
auto_delaynumber: 3For use with auto_priority. This changes the time in seconds that process are “rechecked”
auto_lowerboundnumber: multi.Priority_IdleFor use with auto_priority. The lowerbound is what is considered to be idle time. A higher value combined with auto_stretch allows one to fine tune how pirority is managed.

P-Chart: Priority 1

P1 follows a forumla that resembles this: ~n=I*PRank where n is the amount of steps given to an object with PRank and where I is the idle time see chart below. The aim of this priority scheme was to make core objects run fastest while letting idle processes get decent time as well.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Priority: nPRankFormula
Core: 33222697n = ~I*7
High: 28476606n = ~I*6
Above_Normal: 23730505n = ~I*5
Normal: 18984404n = ~I*4
Below_Normal: 14238303n = ~I*3
Low: 9492202n = ~I*2
Idle: 4746101n = ~I*1

General Rule: ~n=I*PRank

P-Chart: Priority 2

P2 follows a formula that resembles this: ~n=n*4 where n starts as the initial idle time, see chart below. The goal of this one was to make core process’ higher while keeping idle process’ low.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Priority: n
Core: 6700821
High: 1675205
Above_Normal: 418801
Normal: 104700
Below_Normal: 26175
Low: 6543
Idle: 1635

General Rule: ~n=n*4 Where the inital n = I

P-Chart: Priority 3

P3 Ignores using a basic formula and instead bases its processing time on the amount of cpu time is there. If cpu-time is low and a process is set at a lower priority it will get its time reduced. There is no formula, at idle almost all process work at the same speed!

There are 2 settings for this: Core and Idle. If a process takes too long then it is set to idle. Otherwise it will stay core.

Example of settings:

settings = {
-    preLoop = function(m)
-        print("All settings have been loaded!")
-    end,
-    protect = false,
-    stopOnError = false,
-    priority = 0,
-    auto_priority = false,
-    auto_stretch = 1,
-    auto_delay = 3,
-    auto_lowerbound = multi.Priority_Idle
-}
-
--- Below are how the runners work
-
-multi:mainloop(settings)
-
--- or
-
-multi:threadloop(settings)
-
--- or
-
-while true do
-    multi:uManager(settings)
-end
-

Multi constructors - Multi-Objs

Processors
proc = multi:newProcessor([STRING: file nil])

Non-Actors
timer = multi:newTimer()
conn = multi:newConnection([BOOLEAN protect true])
nil = multi:newJob(FUNCTION func, STRING name)
func = multi:newFunction(FUNCTION func)
trigger = multi:newTrigger(FUNCTION: func)

Actors
event = multi:newEvent(FUNCTION task)
updater = multi:newUpdater([NUMBER skip 1])
alarm = multi:newAlarm([NUMBER 0])
loop = multi:newLoop(FUNCTION func)
tloop = multi:newTLoop(FUNCTION func ,NUMBER: [set 1])
step = multi:newStep(NUMBER start,*NUMBER reset, [NUMBER count 1], [NUMBER skip 0])
tstep = multi:newStep(NUMBER start, NUMBER reset, [NUMBER count 1], [NUMBER set 1])
trigger = multi:newTrigger(FUNCTION: func)
stamper = multi:newTimeStamper()
watcher = multi:newWatcher(STRING name)
watcher = multi:newWatcher(TABLE namespace, STRING name)
cobj = multi:newCustomObject(TABLE objRef, BOOLEAN isActor)

Note: A lot of methods will return self as a return. This is due to the ability to chain that was added in 12.x.x

Processor

proc = multi:newProcessor([STRING file nil])
Creates a processor runner that acts like the multi runner. Actors and Non-Actors can be created on these objects. Pausing a process pauses all objects that are running on that process.

An optional argument file is used if you want to load a file containing the processor data.
Note: This isn’t portable on all areas where lua is used. Some interperters disable loadstring so it is not encouraged to use the file method for creating processors

loop = Processor:getController() — returns the loop that runs the “runner” that drives this processor
self = Processor:Start() — Starts the processor
self = Processor:Pause() — Pauses the processor
self = Processor:Resume() — Resumes a paused processor
nil = Processor:Destroy() — Destroys the processor and all of the Actors running on it

Example

multi = require("multi")
-proc = multi:newProcessor()
-proc:newTLoop(function() -- create a t loop that runs every second
-    print("Hi!")
-end,1) -- where we set the 1 second
-proc:Start() -- let's start the processor
-multi:mainloop() -- the main runner that drives everything
-

Non-Actor: Timers

timer = multi:newTimer()
Creates a timer object that can keep track of time

self = timer:Start() — Starts the timer
time_elapsed = timer:Get() — Returns the time elapsed since timer:Start() was called
boolean = timer:isPaused() — Returns if the timer is paused or not
self = timer:Pause() — Pauses the timer, it skips time that would be counted during the time that it is paused
self = timer:Resume() — Resumes a paused timer. See note below
self = timer:tofile(STRING path) — Saves the object to a file at location path

Note: If a timer was paused after 1 second then resumed a second later and Get() was called a second later, timer would have 2 seconds counted though 3 really have passed.

Non-Actor: Connections

Arguable my favorite object in this library, next to threads

conn = multi:newConnection([BOOLEAN protect true])
Creates a connection object and defaults to a protective state. All calls will run within pcall()

self = conn:HoldUT([NUMBER n 0]) — Will hold futhur execution of the thread until the connection was triggered. If n is supplied the connection must be triggered n times before it will allow ececution to continue.
self = conn:FConnect(FUNCTION func) — Creates a connection that is forced to execute when Fire() is called. returns or nil = conn:Fire(…) — Triggers the connection with arguments …, “returns” if non-nil is a table containing return values from the triggered connections. [Deprecated: Planned removal in 14.x.x]
self = conn:Bind(TABLE t) — sets the table to hold the connections. Leaving it alone is best unless you know what you are doing
self = conn:Remove() — removes the bind that was put in place. This will also destroy all connections that existed before.
link = conn:connect(FUNCTION func, [STRING name nil], [NUMBER num #conns+1]) — Connects to the object using function func which will recieve the arguments passed by Fire(…). You can name a connection, which allows you to use conn:getConnection(name). Names must be unique! num is simple the position in the order in which connections are triggered. The return Link is the link to the connected event that was made. You can remove this event or even trigger it specifically if need be.
link:Fire(...) — Fires the created event
bool = link:Destroy() — returns true if success.
subConn = conn:getConnection(STRING name, BOOLEAN ingore) — returns the sub connection which matches name.
returns or nil subConn:Fire() — “returns” if non-nil is a table containing return values from the triggered connections.
self = conn:tofile(STRING path) — Saves the object to a file at location path

The connect feature has some syntax sugar to it as seen below
link = conn(FUNCTION func, [STRING name nil], [NUMBER #conns+1])

Example:

local multi = require("multi")
--- Let’s create the events
-yawn={}
-OnCustomSafeEvent=multi:newConnection(true) -- lets pcall the calls in case something goes wrong default
-OnCustomEvent=multi:newConnection(false) -- let’s not pcall the calls and let errors happen.
-OnCustomEvent:Bind(yawn) -- create the connection lookup data in yawn
-
--- Let’s connect to them, a recent update adds a nice syntax to connect to these
-cd1=OnCustomSafeEvent:Connect(function(arg1,arg2,...)
-  print("CSE1",arg1,arg2,...)
-end,"bob") -- let’s give this connection a name
-cd2=OnCustomSafeEvent:Connect(function(arg1,arg2,...)
-  print("CSE2",arg1,arg2,...)
-end,"joe") -- let’s give this connection a name
-cd3=OnCustomSafeEvent:Connect(function(arg1,arg2,...)
-  print("CSE3",arg1,arg2,...)
-end) -- let’s not give this connection a name
-
--- Using syntax sugar
-OnCustomEvent(function(arg1,arg2,...)
-  print(arg1,arg2,...)
-end)
-
--- Now within some loop/other object you trigger the connection like
-OnCustomEvent:Fire(1,2,"Hello!!!") -- fire all connections
-
--- You may have noticed that some events have names! See the following example!
-OnCustomSafeEvent:getConnection("bob"):Fire(1,100,"Bye!") -- fire only bob!
-OnCustomSafeEvent:getConnection("joe"):Fire(1,100,"Hello!") -- fire only joe!!
-OnCustomSafeEvent:Fire(1,100,"Hi Ya Folks!!!") -- fire them all!!!
-
--- Connections have more to them than that though!
--- As seen above cd1-cd3 these are hooks to the connection object. This allows you to remove a connection
--- For Example:
-cd1:Remove() -- remove this connection from the master connection object
-print("------")
-OnCustomSafeEvent:Fire(1,100,"Hi Ya Folks!!!") -- fire them all again!!!
--- To remove all connections use:
-OnCustomSafeEvent:Remove()
-print("------")
-OnCustomSafeEvent:Fire(1,100,"Hi Ya Folks!!!") -- fire them all again!!!
-

Non-Actor: Jobs

nil = multi:newJob(FUNCTION func, STRING name) — Adds a job to a queue of jobs that get executed after some time. func is the job that is being ran, name is the name of the job.
nil = multi:setJobSpeed(NUMBER n) — seconds between when each job should be done.
bool, number = multi:hasJobs() — returns true if there are jobs to be processed. And the number of jobs to be processed
num = multi:getJobs() — returns the number of jobs left to be processed.
number = multi:removeJob(STRING name) — removes all jobs of name, name. Returns the number of jobs removed

Note: Jobs may be turned into actual objects in the future.

Example:

local multi = require("multi")
-print(multi:hasJobs())
-multi:setJobSpeed(1) -- set job speed to 1 second
-multi:newJob(function()
-    print("A job!")
-end,"test")
-
-multi:newJob(function()
-    print("Another job!")
-    multi:removeJob("test") -- removes all jobs with name "test"
-end,"test")
-
-multi:newJob(function()
-    print("Almost done!")
-end,"test")
-
-multi:newJob(function()
-    print("Final job!")
-end,"test")
-print(multi:hasJobs())
-print("There are "..multi:getJobs().." jobs in the queue!")
-multi:mainloop()
-

Non-Actor: Functions

func = multi:newFunction(FUNCTION func)
These objects used to have more of a function before corutine based threads came around, but the main purpose now is the ablity to have pausable function calls

... = func(...) — This is how you call your function. The first argument passed is itself when your function is triggered. See example.
self = func:Pause()
self = func:Resume()

Note: A paused function will return: nil, true

Example:

local multi = require("multi")
-printOnce = multi:newFunction(function(self,msg)
-    print(msg)
-    self:Pause()
-    return "I won't work anymore"
-end)
-a=printOnce("Hello World!")
-b,c=printOnce("Hello World!")
-print(a,b,c)
-

Non-Actor: Triggers

trigger = multi:newTrigger(FUNCTION: func(...)) — A trigger is the precursor of connection objects. The main difference is that only one function can be binded to the trigger.
self = trigger:Fire(...) — Fires the function that was connected to the trigger and passes the arguments supplied in Fire to the function given.

Universal Actor functions

All of these functions are found on actors
self = multiObj:Pause() — Pauses the actor from running
self = multiObj:Resume() — Resumes the actor that was paused
nil = multiObj:Destroy() — Removes the object from the mainloop
bool = multiObj:isPaused() — Returns true if the object is paused, false otherwise
string = multiObj:getType() — Returns the type of the object
self = multiObj:SetTime(n) — Sets a timer, and creates a special “timemaster” actor, which will timeout unless ResolveTimer is called
self = multiObj:ResolveTimer(...) — Stops the timer that was put onto the multiObj from timing out
self = multiObj:OnTimedOut(func) — If ResolveTimer was not called in time this event will be triggered. The function connected to it get a refrence of the original object that the timer was created on as the first argument.
self = multiObj:OnTimerResolved(func) — This event is triggered when the timer gets resolved. Same argument as above is passed, but the variable arguments that are accepted in resolvetimer are also passed as well.
self = multiObj:Reset(n) — In the cases where it isn’t obvious what it does, it acts as Resume()
self = multiObj:SetName(STRING name)

Actor: Events

event = multi:newEvent(FUNCTION task)
The object that started it all. These are simply actors that wait for a condition to take place, then auto triggers an event. The event when triggered once isn’t triggered again unless you Reset() it.

self = SetTask(FUNCTION func) — This function is not needed if you supplied task at construction time
self = OnEvent(FUNCTION func) — Connects to the OnEvent event passes argument self to the connectee

Example:

local multi = require("multi")
-count=0
--- A loop object is used to demostrate how one could use an event object.
-loop=multi:newLoop(function(self,dt)
-    count=count+1
-end)
-event=multi:newEvent(function() return count==100 end) -- set the event
-event:OnEvent(function(self) -- connect to the event object
-    loop:Destroy() -- destroys the loop from running!
-    print("Stopped that loop!",count)
-end) -- events like alarms need to be reset the Reset() command works here as well
-multi:mainloop()
-

Actor: Updates

updater = multi:newUpdater([NUMBER skip 1]) — set the amount of steps that are skipped
Updaters are a mix between both loops and steps. They were a way to add basic priority management to loops (until a better way was added). Now they aren’t as useful, but if you do not want the performance hit of turning on priority then they are useful to auro skip some loops. Note: The performance hit due to priority management is not as bas as it used to be.

self = updater:SetSkip(NUMBER n) — sets the amount of steps that are skipped
self = OnUpdate(FUNCTION func) — connects to the main trigger of the updater which is called every nth step

Example:

local multi = require("multi")
-updater=multi:newUpdater(5000) -- simple, think of a loop with the skip feature of a step
-updater:OnUpdate(function(self)
-    print("updating...")
-end)
-multi:mainloop()
-

Actor: Alarms

alarm = multi:newAlarm([NUMBER 0]) — creates an alarm which waits n seconds
Alarms ring after a certain amount of time, but you need to reset the alarm every time it rings! Use a TLoop if you do not want to have to reset.

self = alarm:Reset([NUMBER sec current_time_set]) — Allows one to reset an alarm, optional argument to change the time until the next ring.
self = alarm:OnRing(FUNCTION func — Allows one to connect to the alarm event which is triggerd after a certain amount of time has passed.

Example:

local multi = require("multi")
-alarm=multi:newAlarm(3) -- in seconds can go to .001 uses the built in os.clock()
-alarm:OnRing(function(a)
-    print("3 Seconds have passed!")
-    a:Reset(n) -- if n were nil it will reset back to 3, or it would reset to n seconds
-end)
-multi:mainloop()
-

Actor: Loops

loop = multi:newLoop(FUNCTION func) — func the main connection that you can connect to. Is optional, but you can also use OnLoop(func) to connect as well.
Loops are events that happen over and over until paused. They act like a while loop.

self = OnLoop(FUNCTION func) — func the main connection that you can connect to. Alllows multiple connections to one loop if need be.

Example:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-local a = 0
-loop = multi:newLoop(function()
-    a = a + 1
-    if a == 1000 then
-        print("a = 1000")
-        loop:Pause()
-    end
-end)
-multi:mainloop()
-

Actor: TLoops

tloop = multi:newTLoop(FUNCTION func ,NUMBER: [set 1]) — TLoops are pretty much the same as loops. The only difference is that they take set which is how long it waits, in seconds, before triggering function func.

self = OnLoop(FUNCTION func) — func the main connection that you can connect to. Alllows multiple connections to one TLoop if need be.

Example:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-local a = 0
-loop = multi:newTLoop(function()
-    a = a + 1
-    if a == 10 then
-        print("a = 10")
-        loop:Pause()
-    end
-end,1)
-multi:mainloop()
-

Actor: Steps

step = multi:newStep(NUMBER start,*NUMBER reset, [NUMBER count 1], [NUMBER skip 0]) — Steps were originally introduced to bs used as for loops that can run parallel with other code. When using steps think of it like this: for i=start,reset,count do When the skip argument is given, each time the step object is given cpu cycles it will be skipped by n cycles. So if skip is 1 every other cpu cycle will be alloted to the step object.

self = step:OnStart(FUNCTION func(self)) — This connects a function to an event that is triggered everytime a step starts.
self = step:OnStep(FUNCTION func(self,i)) — This connects a function to an event that is triggered every step or cycle that is alloted to the step object
self = step:OnEnd(FUNCTION func(self)) — This connects a function to an event that is triggered when a step reaches its goal
self = step:Update(NUMBER start,*NUMBER reset, [NUMBER count 1], [NUMBER skip 0]) — Update can be used to change the goals of the step. You should call step:Reset() after using Update to restart the step.

Example:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-multi:newStep(1,10,1,0):OnStep(function(step,pos)
-    print(step,pos)
-end):OnEnd(fucntion(step)
-    step:Destroy()
-end)
-multi:mainloop()
-

Actor: TSteps

tstep = multi:newStep(NUMBER start, NUMBER reset, [NUMBER count 1], [NUMBER set 1]) — TSteps work just like steps, the only difference is that instead of skip, we have set which is how long in seconds it should wait before triggering the OnStep() event.

self = tstep:OnStart(FUNCTION func(self)) — This connects a function to an event that is triggered everytime a step starts.
self = tstep:OnStep(FUNCTION func(self,i)) — This connects a function to an event that is triggered every step or cycle that is alloted to the step object
self = tstep:OnEnd(FUNCTION func(self)) — This connects a function to an event that is triggered when a step reaches its goal
self = tstep:Update(NUMBER start,*NUMBER reset, [NUMBER count 1], [NUMBER set 1]) — Update can be used to change the goals of the step. You should call step:Reset() after using Update to restart the step.
self = tstep:Reset([NUMBER n set]) — Allows you to reset a tstep that has ended, but also can change the time between each trigger.

Example:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-multi:newTStep(1,10,1,1):OnStep(function(step,pos)
-    print(step,pos)
-end):OnEnd(fucntion(step)
-    step:Destroy()
-end)
-multi:mainloop()
-

Actor: Time Stampers

stamper = multi:newTimeStamper() — This allows for long time spans as well as short time spans.
stamper = stamper:OhSecond(NUMBER second, FUNCTION func) — This takes a value between 0 and 59. This event is called once every second! Not once every second! If you want seconds then use alarms*! 0 is the start of every minute and 59 is the end of every minute.
stamper = stamper:OhMinute(NUMBER minute, FUNCTION func) — This takes a value between 0 and 59. This event is called once every hour*! Same concept as OnSecond()
stamper = stamper:OhHour(NUMBER hour, FUNCTION func) — This takes a value between 0 and 23. This event is called once every day*! 0 is midnight and 23 is 11pm if you use 12 hour based time.
stamper = stamper:OnDay(STRING/NUMBER day, FUNCTION func) — So the days work like this ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, ‘Sat’. When in string form this is called every week. When in number form this is called every month*!
There is a gotcha though with this. Months can have 28,29,30, and 31 days to it, which means that something needs to be done when dealing with the last few days of a month. I am aware of this issue and am looking into a solution that is simple and readable. I thought about allowing negitive numbers to allow one to eaisly use the last day of a month. -1 is the last day of the month where -2 is the second to last day of the month. You can go as low as -28 if you want, but this provides a nice way to do something near the end of the month that is lua like.
stamper = stamper:OnMonth(NUMBER month,FUNCTION func) — This takes a value between 1 and 12. 1 being January and 12 being December. Called once per year*.
stamper = stamper:OnYear(NUMBER year,FUNCTION func) — This takes a number yy. for example 18 do not use yyyy format! Odds are you will not see this method triggered more than once, unless science figures out the whole life extension thing. But every century this event is triggered*! I am going to be honest though, the odds of a system never reseting for 100 years is very unlikely, so if I used 18 (every 18th year in each century every time i load my program this event will be triggered). Does it actually work? I have no idea tbh it should, but can i prove that without actually testing it? Yes by using fake data thats how.
stamper = stamper:OnTime(NUMBER hour,NUMBER minute,NUMBER second,FUNCTION func) — This takes in a time to trigger, hour, minute, second. This triggeres once a day at a certain time! Sort of like setting an alarm! You can combine events to get other effects like this!
stamper = stamper:OnTime(STRING time,FUNCTION func) — This takes a string time that should be formatted like this: “hh:mm:ss” hours minutes and seconds must be given as parameters! Otherwise functions as above!

*If your program crashes or is rebooted than the data in RAM letting the code know that the function was already called will be reset! This means that if an event set to be triggered on Monday then you reboot the code it will retrigger that event on the same day if the code restarts. In a future update I am planning of writing to the disk for OnHour/Day/Week/Year events. This will be an option that can be set on the object.

Examples:
OnSecond

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-local a = 0
-ts:OnSecond(0,function()
-    a=a+1
-    print("New Minute: "..a.." <"..os.date("%M")..">")
-end)
-multi:mainloop()
-

OnMinute

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-local a = 0
-ts:OnSecond(0,function()
-    a=a+1
-    print("New Hour: "..a.." <"..os.date("%I")..">")
-end)
-multi:mainloop()
-

OnHour

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnHour(0,function()
-    print("New Day")
-end)
-multi:mainloop()
-

OnDay

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnDay("Thu",function()
-    print("It's thursday!")
-end)
-multi:mainloop()
-
package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnDay(2,function()
-    print("Second day of the month!")
-end)
-multi:mainloop()
-
package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnDay(-1,function()
-    print("Last day of the month!")
-end)
-multi:mainloop()
-

OnYear

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnYear(19,function() -- They gonna wonder if they run this in 2018 why it no work :P
-    print("We did it!")
-end)
-multi:mainloop()
-

OnTime

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnTime(12,1,0,function()
-    print("Whooooo")
-end)
-multi:mainloop()
-
package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-ts = multi:newTimeStamper()
-ts:OnTime("12:04:00",function()
-    print("Whooooo")
-end)
-multi:mainloop()
-

Actor: Watchers

Deprecated: This object was removed due to its uselessness. Metatables will work much better for what is being done. Perhaps in the future i will remake this method to use metamethods instead of basic watching every step. This will most likely be removed in the next version of the library or changed to use metatables and metamethods.
watcher = multi:newWatcher(STRING name) — Watches a variable on the global namespace
watcher = multi:newWatcher(TABLE namespace, STRING name) — Watches a variable inside of a table
watcher = watcher::OnValueChanged(Function func(self, old_value, current_value))

Example

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-test = {a=0}
-watcher = multi:newWatcher(test,"a")
-watcher:OnValueChanged(function(self, old_value, current_value)
-    print(old_value,current_value)
-end)
-multi:newTLoop(function()
-    test.a=test.a + 1
-end,.5)
-multi:mainloop()
-

Actor: Custom Object

cobj = multi:newCustomObject(TABLE objRef, BOOLEAN isActor [false]) — Allows you to create your own multiobject that runs each allotted step. This allows you to create your own object that works with all the features that each built in multi object does. If isActor is set to true you must have an Act method in your table. See example below. If an object is not an actor than the Act method will not be automatically called for you.

Example:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-local work = false
-ticktock = multi:newCustomObject({
-    timer = multi:newTimer(),
-    Act = function(self)
-        if self.timer:Get()>=1 then
-            work = not work
-            if work then
-                self.OnTick:Fire()
-            else
-                self.OnTock:Fire()
-            end
-            self.timer:Reset()
-        end
-    end,
-    OnTick = multi:newConnection(),
-    OnTock = multi:newConnection(),
-},true)
-ticktock.OnTick(function()
-    print("Tick")
-end)
-ticktock.OnTock(function()
-    print("Tock")
-end)
-multi:mainloop()
-

Coroutine based Threading (CBT)

This was made due to the limitations of multiObj:hold(), which no longer exists. When this library was in its infancy and before I knew about coroutines, I actually tried to emulate what coroutines did in pure lua.
The threaded bariants of the non threaded objects do exist, but there isn’t too much of a need to use them.

The main benefits of using the coroutine based threads is the thread.* namespace which gives you the ability to easily run code side by side.

A quick note on how threads are managed in the library. The library contains a scheduler which keeps track of coroutines and manages them. Coroutines take some time then give off processing to another coroutine. Which means there are some methods that you need to use in order to hand off cpu time to other coroutines or the main thread. You must hand off cpu time when inside of a non ending loop or your code will hang. Threads also have a slight delay before starting, about 3 seconds.

threads.*

thread.sleep(NUMBER n) — Holds execution of the thread until a certain amount of time has passed
thread.hold(FUNCTION func) — Hold execttion until the function returns true
thread.skip(NUMBER n) — How many cycles should be skipped until I execute again
thread.kill() — Kills the thread
thread.yeild() — Is the same as using thread.skip(0) or thread.sleep(0), hands off control until the next cycle
thread.isThread() — Returns true if the current running code is inside of a coroutine based thread
thread.getCores() — Returns the number of cores that the current system has. (used for system threads)
thread.set(STRING name, VARIABLE val) — A global interface where threads can talk with eachother. sets a variable with name and its value
thread.get(STRING name) — Gets the data stored in name
thread.waitFor(STRING name) — Holds executon of a thread until variable name exists
thread.testFor(STRING name,VARIABLE val,STRING sym) — holds execution untile variable name exists and is compared to val
sym can be equal to: “=”, “==”, “<”, “>”, “<=”, or “>=” the way comparisan works is: “return val sym valTested

CBT: Thread

multi:newThread(STRING name,FUNCTION func) — Creates a new thread with name and function.
Note: newThread() returns nothing. Threads are opperated hands off everything that happens, does so inside of its functions.

Threads simplify many things that you would use non CBT objects for. I almost solely use CBT for my current programming. I will slso show the above custom object using threads instead. Yes its cool and can be done.

Examples:

package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-multi:newThread("Example of basic usage",function()
-    while true do
-        thread.sleep(1)
-        print("We just made an alarm!")
-    end
-end)
-multi:mainloop()
-
package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-
-function multi:newTickTock()
-    local work = false
-    local _alive = true
-    local OnTick = multi:newConnection()
-    local OnTock = multi:newConnection()
-    local c =multi:newCustomObject{
-        OnTick = OnTick,
-        OnTock = OnTock,
-        Destroy = function()
-            _alive = false -- Threads at least how they work here now need a bit of data management for cleaning up objects. When a thread either finishes its execution of thread.kill() is called everything is removed from the scheduler letting lua know that it can garbage collect
-        end
-    }
-    multi:newThread("TickTocker",function()
-        while _alive do
-            thread.sleep(1)
-            work = not work
-            if work then
-                OnTick:Fire()
-            else
-                OnTock:Fire()
-            end
-        end
-        thread.kill() -- When a thread gets to the end of it's ececution it will automatically be ended, but having this method is good to show what is going on with your code.
-    end)
-    return c
-end
-ticktock = multi:newTickTock()
-ticktock.OnTick(function()
-    print("Tick")
-    -- The thread.* namespace works in all events that
-end)
-ticktock.OnTock(function()
-    print("Tock")
-end)
-multi:mainloop()
-
package.path="?/init.lua;?.lua;"..package.path
-local multi = require("multi")
-
-multi:newThread("TickTocker",function()
-    print("Waiting for variable a to exist...")
-    ret,ret2 = thread.hold(function()
-        return a~=nil, "test!"
-    end)
-    print(ret,ret2) -- The hold method returns the arguments when the first argument is true. This methods return feature is rather new and took more work then you think to get working. Since threads
-end)
-multi:newAlarm(3):OnRing(function() a = true end) -- allows a to exist
-
-multi:mainloop()
-

CBT: Threaded Process

process = multi:newThreadedProcess(STRING name) — Creates a process object that is able allows all processes created on it to use the thread.* namespace

nil = process:getController() — Returns nothing there is no “controller” when using threaded processes
self = process:Start() — Starts the processor
self = process:Pause() — Pauses the processor
self = process:Resume() — Resumes a paused processor
self = process:Kill() — Kills/Destroys the process thread
self = process:Remove() — Destroys/Kills the processor and all of the Actors running on it
self = process:Sleep(NUMBER n) — Forces a process to sleep for n amount of time
self = process:Hold(FUNCTION/NUMBER n) — Forces a process to either test a condition or sleep.

Everything eles works as if you were using the multi. interface. You can create multi objects on the process and the objects are able to use the thread. interface.

Note: When using Hold/Sleep/Skip on an object created inside of a threaded process, you actually hold the entire process! Which means all objects on that process will be stopping until the conditions are met!

Example:

test = multi:newThreadedProcess("test")
-test:newLoop(function()
-    print("HI!")
-end)
-test:newLoop(function()
-    print("HI2!")
-    thread.sleep(.5)
-end)
-multi:newAlarm(3):OnRing(function()
-    test:Sleep(10)
-end)
-test:Start()
-multi:mainloop()
-

CBT: Hyper Threaded Process

process = multi:newHyperThreadedProcess(STRING name) — Creates a process object that is able allows all processes created on it to use the thread.* namespace. Hold/Sleep/Skip can be used in each multi obj created without stopping each other object that is running, but allows for one to pause/halt a process and stop all objects running in that process.

nil = process:getController() — Returns nothing there is no “controller” when using threaded processes
self = process:Start() — Starts the processor
self = process:Pause() — Pauses the processor
self = process:Resume() — Resumes a paused processor
self = process:Kill() — Kills/Destroys the process thread
self = process:Remove() — Destroys/Kills the processor and all of the Actors running on it
self = process:Sleep(NUMBER n) — Forces a process to sleep for n amount of time
self = process:Hold(FUNCTION/NUMBER n) — Forces a process to either test a condition or sleep.

Example:

test = multi:newHyperThreadedProcess("test")
-test:newLoop(function()
-    print("HI!")
-end)
-test:newLoop(function()
-    print("HI2!")
-    thread.sleep(.5)
-end)
-multi:newAlarm(3):OnRing(function()
-    test:Sleep(10)
-end)
-test:Start()
-multi:mainloop()
-

Same example as above, but notice how this works opposed to the non hyper version

System Threads (ST) - Multi-Integration Getting Started

The system threads need to be required seperatly.

local GLOBAL, THREAD = require("multi.integration.lanesManager").init()# -- We will talk about the global and thread interface that is returned
-GLOBAL, THREAD = require("multi.integration.loveManager").init()
-GLOBAL, THREAD = require("luvitManager")-- There is a catch to this*
-

Using this integration modifies some methods that the multi library has.
multi:canSystemThread() — Returns true is system threading is possible
multi:getPlatform() — Returns (for now) either “lanes”, “love2d” and “luvit”
This variable is created on the main thread only inside of the multi namespace: multi.isMainThread = true
This is used to know which thread is the main thread. When network threads are being discussed there is a gotcha that needs to be addressed.

* GLOBAL and THREAD do not work currently when using the luvit integration
#So you may have noticed that when using the lanes manager you need to make the global and thread local, this is due to how lanes copies local variables between states. Also love2d does not require this, actually things will break if this is done! Keep these non local since the way threading is handled at the lower level is much different anyway so GLOBAL and THREAD is automatically set up for use within a spawned thread!

ST - THREAD namespace

THREAD.set(STRING name, VALUE val) — Sets a value in GLOBAL
THREAD.get(STRING name) — Gets a value in GLOBAL
THREAD.waitFor(STRING name) — Waits for a value in GLOBAL to exist
THREAD.testFor(STRING name, VALUE val, STRING sym)NOT YET IMPLEMENTED but planned
THREAD.getCores() — Returns the number of actual system threads/cores
THREAD.kill() — Kills the thread
THREAD.getName() — Returns the name of the working thread
THREAD.sleep(NUMBER n) — Sleeps for an amount of time stopping the current thread
THREAD.hold(FUNCTION func) — Holds the current thread until a condition is met
THREAD.getID() — returns a unique ID for the current thread. This varaiable is visible to the main thread as well by accessing it through the returned thread object. OBJ.Id

ST - GLOBAL namespace

Treat global like a table.

GLOBAL["name"] = "Ryan"
-print(GLOBAL["name"])
-

Removes the need to use THREAD.set() and THREAD.get()

ST - System Threads

systemThread = multi:newSystemThread(STRING thread_name,FUNCTION spawned_function,ARGUMENTS ...) — Spawns a thread with a certain name.
systemThread:kill() — kills a thread; can only be called in the main thread!
systemThread.OnError(FUNCTION(systemthread,errMsg,errorMsgWithThreadName))

System Threads are the feature that allows a user to interact with systen threads. It differs from regular coroutine based thread in how it can interact with variables. When using system threads the GLOBAL table is the “only way”* to send data. Spawning a System thread is really simple once all the required libraries are in place. See example below:

local multi = require("multi") -- keep this global when using lanes or implicitly define multi within the spawned thread
-local GLOBAL, THREAD = require("multi.integration.lanesManager").init()
-multi:newSystemThread("Example thread",function()
-    local multi = require("multi") -- we are in a thread so lets not refer to that upvalue!
-    print("We have spawned a thread!")
-    -- we could do work but theres no need to we can save that for other examples
-    print("Lets have a non ending loop!")
-    while true do
-        -- If this was not in a thread execution would halt for the entire process
-    end
-end,"A message that we are passing") -- There are restrictions on what can be passed!
-
-tloop = multi:newTLoop(function()
-    print("I'm still kicking!")
-end,1)
-multi:mainloop()
-

*This isn’t entirely true, as of right now the compatiablity with the lanes library and love2d engine have their own methods to share data, but if you would like to have your code work in both enviroments then using the GLOBAL table and the data structures provided by the multi library will ensure this happens. If you do not plan on having support for both platforms then feel free to use linda’s in lanes and channels in love2d.

Note: luvit currently has very basic support, it only allows the spawning of system threads, but no way to send data back and forth as of yet. I do not know if this is doable or not, but I will keep looking into it. If I can somehow emulate System Threaded Queues and the GLOBAL tabke then all other datastructures will work!

ST - System Threaded Objects

Great we are able to spawn threads, but unless your working with a process that works on passed data and then uses a socket or writes to the disk I can’t do to much with out being able to pass data between threads. This section we will look at how we can share objects between threads. In order to keep the compatibility between both love2d and lanes I had to format the system threaded objects in a strange way, but they are consistant and should work on both enviroments.

When creating objects with a name they are automatically exposed to the GLOBAL table. Which means you can retrieve them from a spawned thread. For example we have a queue object, which will be discussed in more detail next.

-- Exposing a queue
-multi = require("multi")
-local GLOBAL, THREAD = require("multi.integration.lanesManager").init() -- The standard setup above
-queue = multi:newSystemThreadedQueue("myQueue"):init() -- We create and initiate the queue for the main thread
-queue:push("This is a test!") -- We push some data onto the queue that other threads can consume and do stuff with
-multi:newSystemThread("Example thread",function() -- Create a system thread
-    queue = THREAD.waitFor("myQueue"):init() -- Get the queue. It is good pratice to use the waitFor command when getting objects. If it doesn't exist yet we wait for it, preventing future errors. It is possible for the data to not ve present when a thread is looking for it! Especally when using the love2d module, my fault needs some rewriting data passing on the GLOBAL is quite slow, but the queue internally uses channels so after it is exposed you should have good speeds!
-    local data = queue:pop() -- Get the data
-    print(data) -- print the data
-end)
-multi:mainloop()
-

ST - SystemThreadedQueue

queue(nonInit) = multi:newSystemThreadedQueue(STRING name) — You must enter a name!
queue = queue:init() — initiates the queue, without doing this it will not work
void = queue:push(DATA data) — Pushes data into a queue that all threads that have been shared have access to
data = queue:pop() — pops data from the queue removing it from all threads
data = queue:peek() — looks at data that is on the queue, but dont remove it from the queue

This object the System Threaded Queue is the basis for all other data structures that a user has access to within the “shared” objects.

General tips when using a queue. You can always pop from a queue without worrying if another thread poped that same data, BUT if you are peeking at a queue there is the possibility that another thread popped the data while you are peeking and this could cause an issue, depends on what you are doing though. It’s important to keep this in mind when using queues.

Let’s get into some examples:

multi = require("multi")
-thread_names = {"Thread_A","Thread_B","Thread_C","Thread_D"}
-local GLOBAL, THREAD = require("multi.integration.lanesManager").init()
-queue = multi:newSystemThreadedQueue("myQueue"):init()
-for _,n in pairs(thread_names) do
-    multi:newSystemThread(n,function()
-        queue = THREAD.waitFor("myQueue"):init()
-        local name = THREAD.getName()
-        local data = queue:pop()
-        while data do
-            print(name.." "..data)
-            data = queue:pop()
-        end
-    end)
-end
-for i=1,100 do
-    queue:push(math.random(1,1000))
-end
-multi:newEvent(function() -- Felt like using the event object, I hardly use them for anything non internal
-    return not queue:peek()
-end):OnEvent(function()
-    print("No more data within the queue!")
-    os.exit()
-end)
-multi:mainloop()
-

You have probable noticed that the output from this is a total mess! Well I though so too, and created the system threaded console!

ST - SystemThreadedConsole

console(nonInit) = multi:newSystemThreadedConsole(STRING name) — Creates a console object called name. The name is mandatory!
concole = console:inti() — initiates the console object
console:print(...) — prints to the console
console:write(msg) — writes to the console, to be fair you wouldn’t want to use this one.

The console makes printing from threads much cleaner. We will use the same example from above with the console implemented and compare the outputs and how readable they now are!

multi = require("multi")
-thread_names = {"Thread_A","Thread_B","Thread_C","Thread_D"}
-local GLOBAL, THREAD = require("multi.integration.lanesManager").init()
-multi:newSystemThreadedConsole("console"):init()
-queue = multi:newSystemThreadedQueue("myQueue"):init()
-for _,n in pairs(thread_names) do
-    multi:newSystemThread(n,function()
-        local queue = THREAD.waitFor("myQueue"):init()
-        local console = THREAD.waitFor("console"):init()
-        local name = THREAD.getName()
-        local data = queue:pop()
-        while data do
-            --THREAD.sleep(.1) -- uncomment this to see them all work
-            console:print(name.." "..data)
-            data = queue:pop()
-        end
-    end)
-end
-for i=1,100 do
-    queue:push(math.random(1,1000))
-end
-multi:newEvent(function()
-    return not queue:peek()
-end):OnEvent(function()
-    multi:newAlarm(.1):OnRing(function() -- Well the mainthread has to read from an internal queue so we have to wait a sec
-        print("No more data within the queue!")
-        os.exit()
-    end)
-end)
-multi:mainloop()
-

As you see the output here is so much cleaner, but we have a small gotcha, you probably noticed that I used an alarm to delay the exiting of the program for a bit. This is due to how the console object works, I send all the print data into a queue that the main thread then reads and prints out when it looks at the queue. This should not be an issue since you gain so much by having clean outputs!

Another thing to note, because system threads are put to work one thread at a time, really quick though, the first thread that is loaded is able to complete the tasks really fast, its just printing after all. If you want to see all the threads working uncomment the code with THREAD.sleep(.1)

ST - SystemThreadedJobQueue

ST - SystemThreadedConnection - WIP*

connection(nonInit) = multi:newSystemThreadedConnection(name,protect) — creates a connecion object
connection = connection:init() — initaties the connection object
connectionID = connection:connect(FUNCTION func) — works like the regular connect function
void = connection:holdUT(NUMBER/FUNCTION n) — works just like the regular holdut function
void = connection:Remove() — works the same as the default
voic = connection:Fire(ARGS ...) — works the same as the default

In the current form a connection object requires that the multi:mainloop() is running on the threads that are sharing this object! By extention since SystemThreadedTables rely on SystemThreadedConnections they have the same requirements. Both objects should not be used for now.

Since the current object is not in a stable condition, I will not be providing examples of how to use it just yet!

*The main issue we have with the connection objects in this form is proper comunication and memory managament between threads. For example if a thread crashes or no longer exists the current apporach to how I manage the connection objects will cause all connections to halt. This feature is still being worked on and has many bugs to be patched out. for now only use for testing purposes.

ST - SystemThreadedTable - WIP*

ST - SystemThreadedBenchmark

bench = multi:SystemThreadedBenchmark(NUMBER seconds) — runs a benchmark for a certain amount of time
bench:OnBench(FUNCTION callback(NUMBER steps/second))

multi = require("multi")
-local GLOBAL, THREAD = require("multi.integration.lanesManager").init()
-multi:SystemThreadedBenchmark(1).OnBench(function(...)
-    print(...)
-end)
-multi:mainloop()
-

ST - SystemThreadedExecute WIP* Might remove

Network Threads - Multi-Integration

- - - - diff --git a/Documentation.md b/Documentation.md index 619995f..c57994d 100644 --- a/Documentation.md +++ b/Documentation.md @@ -415,7 +415,7 @@ Helpful methods are wrapped around the builtin coroutine module which make it fe **threads.\* used within threaded enviroments** - `thread.sleep(NUMBER n)` — Holds execution of the thread until a certain amount of time has passed -- `VARIABLE returns = thread.hold(FUNCTION func)` — Hold execution until the function returns non nil. All returns are passed to the thread once the conditions have been met. To pass nil use `multi.NIL` +- `VARIABLE returns = thread.hold(FUNCTION func)` — Hold execution until the function returns non nil. All returns are passed to the thread once the conditions have been met. To pass nil use `multi.NIL`\* - `thread.skip(NUMBER n)` — How many cycles should be skipped until I execute again - `thread.kill()` — Kills the thread - `thread.yeild()` — Is the same as using thread.skip(0) or thread.sleep(0), hands off control until the next cycle @@ -432,6 +432,8 @@ Helpful methods are wrapped around the builtin coroutine module which make it fe - `handler.connect(Function: func(returns))` — Connects to the event that is triggered when the returns are avaiable - `VARIAABLE returns = handler.wait()` — Waits until returns are avaiable and then returns them +\*A note about multi.NIL, this should only be used within the hold and hold like methods. thread.hold(), thread.holdFor(), and thread.holdWithin() methods. This is not needed within threaded functions! The reason hold prevents nil and false is because it is testing for a condition so the first argument needs to be non nil nor false! multi.NIL should not be used anywhere else. Sometimes you may need to pass a 'nil' value or return. While you could always return true or something you could use multi.NIL to force a nil value through a hold like method. + # CBT: newService(FUNCTION: func) `serv = newService(FUNCTION: func(self,TABLE: data))` - `serv.OnError(FUNCTION: func)` — connection that fired if there is an error @@ -460,6 +462,7 @@ Helpful methods are wrapped around the builtin coroutine module which make it fe # CBT: newThread() `th = multi:newThread([STRING name,] FUNCTION func)` — Creates a new thread with name and function. +when within a thread, if you have any holding code you will want to use thread.* to give time to other threads while your code is running. Constants --- - `th.Name` — Name of thread diff --git a/PManager.txt b/PManager.txt deleted file mode 100644 index 8ddf23a..0000000 --- a/PManager.txt +++ /dev/null @@ -1,29 +0,0 @@ -C: 3322269 ~I*7 -H: 2847660 ~I*6 -A: 2373050 ~I*5 -N: 1898440 ~I*4 -B: 1423830 ~I*3 -L: 949220 ~I*2 -I: 474610 ~I -~n=I*PRank - -P2 ---------------- -C: 6700821 -H: 1675205 -A: 418801 -N: 104700 -B: 26175 -L: 6543 -I: 1635 -~n=n*4 - -P3 ----------------- -C: 2120906 -H: 2120906 -A: 2120906 -N: 2120906 -B: 2120906 -L: 2120906 -I: 2120506 \ No newline at end of file diff --git a/README.html b/README.html deleted file mode 100644 index e63ea3a..0000000 --- a/README.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - README.html - - - - - - -

multi Version: 13.1.0 Bug fixes and a few features added (See changes.md)

Found an issue? Please submit it and ill look into it!

My multitasking library for lua. It is a pure lua binding, if you ignore the integrations and the love2d compat. If you find any bugs or have any issues, please let me know . If you don’t see a table of contents try using the ReadMe.html file. It is easier to navigate than readme

INSTALLING

Note: The latest version of Lua lanes is required if you want to make use of system threads on lua 5.1+. I will update the dependencies for Lua rocks since this library should work fine on lua 5.1+ You also need the lua-net library and the bin library. all installed automatically using luarocks. however you can do this manually if lanes and luasocket are installed. Links:
https://github.com/rayaman/bin
https://github.com/rayaman/multi
https://github.com/rayaman/net

To install copy the multi folder into your environment and you are good to go

If you want to use the system threads, then you’ll need to install lanes!
or use luarocks

Because of a codependency in net libaray, if using the networkmanager you will need to install the net library sepertly
Going forward I will include a Release zip for love2d. I do not know why I haven’t done this yet

luarocks install multi
-luarocks install lnet
-

Discord

For real-time assistance with my libraries! A place where you can ask questions and get help with any of my libraries. Also, you can request features and stuff there as well.

https://discord.gg/U8UspuA

Planned features/TODO

Usage:

-- Basic usage Alarms: Have been moved to the core of the library require("multi") would work as well
-local multi = require("multi") -- gets the entire library
-alarm=multi:newAlarm(3) -- in seconds can go to .001 uses the built in os.clock()
-alarm:OnRing(function(a)
-  print("3 Seconds have passed!")
-  a:Reset(n) -- if n were nil it will reset back to 3, or it would reset to n seconds
-end)
-multi:mainloop() -- the main loop of the program, multi:umanager() exists as well to allow integration in other loops Ex: love2d love.update function. More on this binding in the wiki!
-

Known Bugs/Issues

Currently no bugs that I know of :D

- - - - diff --git a/README.md b/README.md index 054c9f5..251a911 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# multi Version: 14.1.0 System threaded functions and more? (See changes.md for detailed changes) +# multi Version: 14.2.0 Documentation Complete! Found an issue? Please [submit it](https://github.com/rayaman/multi/issues) and I'll look into it! @@ -7,7 +7,6 @@ My multitasking library for lua. It is a pure lua binding, if you ignore the int INSTALLING ---------- Links to dependicies: -[bin](https://github.com/rayaman/bin) [net](https://github.com/rayaman/net) [lanes](https://github.com/LuaLanes/lanes) diff --git a/changes.md b/changes.md index 36e1b38..7c00a15 100644 --- a/changes.md +++ b/changes.md @@ -80,6 +80,7 @@ Added: Fixed: --- +- Issue with threaded functions not handling nil properly from returns. This has been resolved and works as expected. - Issue with system threaded job queues newFunction() not allowing nil returns! This has be addressed and is no longer an issue. - Issue with hold like functions not being able to return `false` - Issue with connections not returning a handle for managing a specific conn object. @@ -119,6 +120,8 @@ Changed: Removed: --- +- bin dependency from the rockspec +- Example folder and .html variants of the .md files - multi:newTrigger() — Connections do everything this thing could do and more. - multi:newHyperThreadedProcess(name)* - multi:newThreadedProcess(name)* diff --git a/examples/RegisteredFunctions.dat b/examples/RegisteredFunctions.dat deleted file mode 100644 index e69de29..0000000 diff --git a/examples/SystemThreadedExecuteTest.lua b/examples/SystemThreadedExecuteTest.lua deleted file mode 100644 index 2b830d3..0000000 --- a/examples/SystemThreadedExecuteTest.lua +++ /dev/null @@ -1,6 +0,0 @@ -package.path="?/init.lua;"..package.path -require("multi") -multi:newAlarm(5):OnRing(function() - os.exit(10) -end) -multi:mainloop() diff --git a/examples/alarmTest.lua b/examples/alarmTest.lua deleted file mode 100644 index 632a8ee..0000000 --- a/examples/alarmTest.lua +++ /dev/null @@ -1,11 +0,0 @@ --- Tick Tock Example -require("multi") -alarm=multi:newAlarm(1) -alarm.state=-1 -- set the state to -1 -alarm.sounds={[-1]="Tick",[1]="Tock"} -- this makes changing between states easy and fast -alarm:OnRing(function(self) - print(self.sounds[self.state]) - self.state=self.state*-1 -- change the state in one line - self:Reset() -- Reset the alarm so it runs again -end) -multi:mainloop() diff --git a/examples/compattest.lua b/examples/compattest.lua deleted file mode 100644 index 2edc13e..0000000 --- a/examples/compattest.lua +++ /dev/null @@ -1,7 +0,0 @@ -package.path="?/init.lua;"..package.path -require("multi") -require("multi.compat.backwards[1,5,0]") -multi:newLoop(function(dt,self) - print(dt) -end) -multi:mainloop() -- start the main runner diff --git a/examples/lanesintegratetest.lua b/examples/lanesintegratetest.lua deleted file mode 100644 index 820385c..0000000 --- a/examples/lanesintegratetest.lua +++ /dev/null @@ -1,34 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -multi:newAlarm(2):OnRing(function(self) - GLOBAL["NumOfCores"]=sThread.getCores() -end) -multi:newAlarm(7):OnRing(function(self) - GLOBAL["AnotherTest"]=true -end) -multi:newAlarm(13):OnRing(function(self) - GLOBAL["FinalTest"]=true -end) -multi:newSystemThread("test",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - print("Waiting for variable: NumOfCores") - print("Got it: ",sThread.waitFor("NumOfCores")) - sThread.hold(function() - return GLOBAL["AnotherTest"] -- note this would hold the entire systemthread. Spawn a coroutine thread using multi:newThread() or multi:newThreaded... - end) - print("Holding works!") - multi:newThread("tests",function() - thread.hold(function() - return GLOBAL["FinalTest"] -- note this will not hold the entire systemthread. As seen with the TLoop constantly going! - end) - print("Final test works!") - os.exit() - end) - local a=0 - multi:newTLoop(function() - a=a+1 - print(a) - end,.5) - multi:mainloop() -end) -multi:mainloop() diff --git a/examples/lanesintegratetest2.lua b/examples/lanesintegratetest2.lua deleted file mode 100644 index ecaf091..0000000 --- a/examples/lanesintegratetest2.lua +++ /dev/null @@ -1,59 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -- loads the lanesManager and includes the entire multi library -local function comma_value(amount) - local formatted = amount - while true do - formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') - if (k==0) then - break - end - end - return formatted -end -multi:newSystemThread("test1",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 1"):OnBench(function(self,c) GLOBAL["T1"]=c multi:Stop() end) - multi:mainloop() -end) -multi:newSystemThread("test2",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 2"):OnBench(function(self,c) GLOBAL["T2"]=c multi:Stop() end) - multi:mainloop() -end) -multi:newSystemThread("test3",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 3"):OnBench(function(self,c) GLOBAL["T3"]=c multi:Stop() end) - multi:mainloop() -end) -multi:newSystemThread("test4",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 4"):OnBench(function(self,c) GLOBAL["T4"]=c multi:Stop() end) - multi:mainloop() -end) -multi:newSystemThread("test5",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 5"):OnBench(function(self,c) GLOBAL["T5"]=c multi:Stop() end) - multi:mainloop() -end) -multi:newSystemThread("test6",function() -- spawns a thread in another lua process - require("multi.all") -- now you can do all of your coding with the multi library! You could even spawn more threads from here with the intergration. You would need to require the interaction again though - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 6"):OnBench(function(self,c) GLOBAL["T6"]=c multi:Stop() end) - multi:mainloop() - print("Bench: ",comma_value(tostring(sThread.waitFor("T1")+sThread.waitFor("T2")+sThread.waitFor("T3")+sThread.waitFor("T4")+sThread.waitFor("T5")+sThread.waitFor("T6")))) - GLOBAL["DONE"]=true -end) -multi:newThread("test0",function() - -- sThread.waitFor("DONE") -- lets hold the main thread completely so we don't eat up cpu - -- os.exit() - -- when the main thread is holding there is a chance that error handling on the system threads may not work! - -- instead we can do this - while true do - thread.skip(1) -- allow error handling to take place... Otherwise lets keep the main thread running on the low - sThread.sleep(.001) -- Sleeping for .001 is a greeat way to keep cpu usage down. Make sure if you aren't doing work to rest. Abuse the hell out of GLOBAL if you need to :P - if GLOBAL["DONE"] then - os.exit() - end - end -end) -GLOBAL["Bench"]=60 -multi:mainloop() diff --git a/examples/lanesintegratetest3.lua b/examples/lanesintegratetest3.lua deleted file mode 100644 index dbee63f..0000000 --- a/examples/lanesintegratetest3.lua +++ /dev/null @@ -1,48 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -- Spawing threads using 1 method and the sThread.getCores() function! -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -- loads the lanesManager and includes the entire multi library -local function comma_value(amount) - local formatted = amount - while true do - formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') - if (k==0) then - break - end - end - return formatted -end -GLOBAL["BENCHCOUNT"],GLOBAL["CNUM"],GLOBAL["DONE"]=0,0,0 -cores=sThread.getCores() -function benchmark() -- our single function that will be used across a bunch of threads - require("multi.all") -- get the library - local n=GLOBAL["CNUM"]; GLOBAL["CNUM"]=n+1 -- do some math so we can identify which thread is which - multi:benchMark(sThread.waitFor("BENCH"),nil,"Thread "..n+1):OnBench(function(self,c) GLOBAL["BENCHCOUNT"]=GLOBAL["BENCHCOUNT"]+c; GLOBAL["DONE"]=GLOBAL["DONE"]+1; multi:Stop() end) - -- ^ do the bench mark and add to the BENCHCOUNT GLOBAL value, then increment the DONE Value - multi:mainloop() -end -for i=1,cores do -- loop based on the number of cores you have - multi:newSystemThread("test"..i,benchmark) -- create a system thread based on the benchmark -end -multi:newThread("test0",function() - while true do - thread.skip(1) - sThread.sleep(.001) - if GLOBAL["DONE"]==cores then - print(comma_value(tostring(GLOBAL["BENCHCOUNT"]))) - os.exit() - end - end -end) -GLOBAL["BENCH"]=1 -print("Platform is: ",multi:getPlatform()) -- returns love2d or lanes depending on which platform you are using... If I add more intergrations then this method will be updated! corona sdk may see this library in the future... -multi:mainloop() ---[[ Output on my machine! I am using luajit and have 6 cores on my computer. Your numbers will vary, but it should look something like this -Intergrated Lanes! -Platform is: lanes -Thread 1 62442125 Steps in 10 second(s)! -Thread 2 61379095 Steps in 10 second(s)! -Thread 3 62772502 Steps in 10 second(s)! -Thread 4 62740684 Steps in 10 second(s)! -Thread 5 60926715 Steps in 10 second(s)! -Thread 6 61793175 Steps in 10 second(s)! -372,054,296 -]] diff --git a/examples/lanesintegratetest4.lua b/examples/lanesintegratetest4.lua deleted file mode 100644 index 40be2c4..0000000 --- a/examples/lanesintegratetest4.lua +++ /dev/null @@ -1,27 +0,0 @@ -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -queue=multi:newSystemThreadedQueue("QUEUE"):init() -queue:push("This is a test") -queue:push("This is a test2") -queue:push("This is a test3") -queue:push("This is a test4") -multi:newSystemThread("test2",function() - queue=sThread.waitFor("QUEUE"):init() - data=queue:pop() - while data do - print(data) - data=queue:pop() - end - queue:push("This is a test5") - queue:push("This is a test6") - queue:push("This is a test7") - queue:push("This is a test8") -end) -multi:newThread("test!",function() -- this is a lua thread - thread.sleep(.1) - data=queue:pop() - while data do - print(data) - data=queue:pop() - end -end) -multi:mainloop() diff --git a/examples/lanesintegratetest5.lua b/examples/lanesintegratetest5.lua deleted file mode 100644 index 7e0898a..0000000 --- a/examples/lanesintegratetest5.lua +++ /dev/null @@ -1,28 +0,0 @@ -package.path="?/init.lua;"..package.path -- slightly different usage of the code -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -queue=multi:newSystemThreadedQueue("QUEUE") -queue:push(1) -queue:push(2) -queue:push(3) -queue:push(4) -queue:push(5) -queue:push(6) -multi:newSystemThread("STHREAD_1",function() - queue=sThread.waitFor("QUEUE"):init() - GLOBAL["QUEUE"]=nil - data=queue:pop() - while data do - print(data) - data=queue:pop() - end -end) -multi:newThread("THREAD_1",function() - while true do - if GLOBAL["QUEUE"]==nil then - print("Deleted a Global!") - break - end - thread.skip(1) - end -end) -multi:mainloop() diff --git a/examples/lanesintegratetest6.lua b/examples/lanesintegratetest6.lua deleted file mode 100644 index 5b7443c..0000000 --- a/examples/lanesintegratetest6.lua +++ /dev/null @@ -1,14 +0,0 @@ --- lanes Desktop lua! NOTE: this is in lanesintergratetest6.lua in the examples folder -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -test=multi:newSystemThreadedTable("YO"):init() -test["test1"]="lol" -multi:newSystemThread("test",function() - tab=sThread.waitFor("YO"):init() - print(tab["test1"]) - sThread.sleep(3) - tab["test2"]="Whats so funny?" -end) -multi:newThread("test2",function() - print(test:waitFor("test2")) -end) -multi:mainloop() diff --git a/examples/lanesintegratetest7.lua b/examples/lanesintegratetest7.lua deleted file mode 100644 index a77c05b..0000000 --- a/examples/lanesintegratetest7.lua +++ /dev/null @@ -1,29 +0,0 @@ --- Creating the object using lanes manager to show case this. Examples has the file for love2d -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -jQueue=multi:newSystemThreadedJobQueue(n) -- this internally creates System threads. By defualt it will use the # of processors on your system You can set this number though. --- Only create 1 jobqueue! For now making more than 1 is buggy. You only really need one though. Just register new functions if you want 1 queue to do more. The one reason though is keeping track of jobIDs. I have an idea that I will roll out in the next update. -jQueue:registerJob("TEST_JOB",function(a,s) - math.randomseed(s) - -- We will push a random # - TEST_JOB2() -- You can call other registered functions as well! - return math.random(0,255) -- send the result to the main thread -end) -jQueue:registerJob("TEST_JOB2",function() - print("Test Works!") -- this is called from the job since it is registered on the same queue -end) -jQueue:start() -tableOfOrder={} -- This is how we will keep order of our completed jobs. There is no guarantee that the order will be correct -jQueue.OnJobCompleted(function(JOBID,n) -- whenever a job is completed you hook to the event that is called. This passes the JOBID folled by the returns of the job - -- JOBID is the completed job, starts at 1 and counts up by 1. - -- Threads finish at different times so jobids may be passed out of order! Be sure to have a way to order them - tableOfOrder[JOBID]=n -- we order ours by putting them into a table - if #tableOfOrder==10 then - print("We got all of the pieces!") - end -end) --- LEts push the jobs now -for i=1,10 do -- Job Name of registered function, ... varargs - jQueue:pushJob("TEST_JOB","This is a test!",math.random(1,1000000)) -end -print("I pushed all of the jobs :)") -multi:mainloop() -- Start the main loop :D diff --git a/examples/lanesintegratetest8.lua b/examples/lanesintegratetest8.lua deleted file mode 100644 index c64586a..0000000 --- a/examples/lanesintegratetest8.lua +++ /dev/null @@ -1,11 +0,0 @@ -package.path="../?.lua;../?/init.lua;"..package.path -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -cmd=multi:newSystemThreadedExecute("SystemThreadedExecuteTest.lua") -- This file is important! -cmd.OnCMDFinished(function(code) -- callback function to grab the exit code... Called when the command goes through - print("Got Code: "..code) -end) -multi:newTLoop(function() - print("...") -end,1) -multi:mainloop() - diff --git a/examples/lanesintegratetest9.lua b/examples/lanesintegratetest9.lua deleted file mode 100644 index a9f7a22..0000000 --- a/examples/lanesintegratetest9.lua +++ /dev/null @@ -1,27 +0,0 @@ ---~ package.path="?/init.lua;"..package.path -local GLOBAL,sThread=require("multi.integration.lanesManager").init() -jQueue=multi:newSystemThreadedJobQueue(n) -jQueue:registerJob("TEST_JOB",function(a,s) - math.randomseed(s) - TEST_JOB2() - return math.random(0,255) -end) -jQueue:registerJob("TEST_JOB2",function() - print("Test Works!") -end) -jQueue:start() -jQueue.OnReady:holdUT() -jQueue:doToAll(function() - print("Doing this 16? times!") -end) -for i=1,10 do -- Job Name of registered function, ... varargs - jQueue:pushJob("TEST_JOB","This is a test!",math.random(1,1000000)) -end -tableOfOrder={} -jQueue.OnJobCompleted(function(JOBID,n) - tableOfOrder[JOBID]=n - if #tableOfOrder==10 then - print("We got all of the pieces!") - end -end) -multi:mainloop() diff --git a/examples/loopTest.lua b/examples/loopTest.lua deleted file mode 100644 index 138d8ba..0000000 --- a/examples/loopTest.lua +++ /dev/null @@ -1,9 +0,0 @@ --- like the while loop (kinda) -require("multi") -loop=multi:newLoop(function(self,dt) - if dt>10 then - print("Enough time has passed!") - self:Break() -- lets break this thing - end -end) -multi:mainloop() diff --git a/examples/love2d Threading Example/GuiManagerDebug/Core/Clickable.int b/examples/love2d Threading Example/GuiManagerDebug/Core/Clickable.int deleted file mode 100644 index f192d8e..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Core/Clickable.int +++ /dev/null @@ -1,15 +0,0 @@ -function gui:Clickable() - local x,y,w,h=love.graphics.getScissor() - local mx=love.mouse.getX() - local my=love.mouse.getY() - if _GuiPro.HasStencel then - local obj=_GuiPro.StencelHolder - if self:isDescendant(obj) then - return math.sqrt((mx-obj.x)^2+(my-obj.y)^2)<=(obj.offset.size.x or 0) - end - end - if not(x) then - return true - end - return not(mx>x+w or mxy+h or myx+w or mxy+h or my self.x and x < self.x+self.width and y > self.y and y < self.y+self.height and self:TClickable(x,y) and self:eventable()) - end - end - self.id=-1 -end -multi:newTask(function() -- A bit of post-loading haha - gui.touchpressed=multi:newConnection() - gui.touchreleased=multi:newConnection() - gui.touchmoved=multi:newConnection() - love.touchpressed=Library.convert(love.touchpressed or function() end) - love.touchreleased=Library.convert(love.touchreleased or function() end) - love.touchmoved=Library.convert(love.touchmoved or function() end) - love.touchpressed:inject(function(id, x, y, dx, dy, pressure) gui.touchpressed:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - love.touchreleased:inject(function(id, x, y, dx, dy, pressure) gui.touchreleased:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - love.touchmoved:inject(function(id, x, y, dx, dy, pressure) gui.touchmoved:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - _GuiPro.TouchReady=true - _GuiPro.TouchRegister={} - gui.touchpressed:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if #v.tid==0 then - if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - v:addTID(id) - v.touchcount=1 - for i=1,#v.ToFuncP do - v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - elseif not(v:hasTID(id)) then - if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - v:addTID(id) - v.touchcount=v.touchcount+1 - for i=1,#v.ToFuncP do - v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end - end) - gui.touchreleased:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if v:hasTID(id) then - v:removeTID(id) - for i=1,#v.ToFuncR do - v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end) - gui.touchmoved:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if v:hasTID(id) and (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - for i=1,#v.ToFuncM do - v.ToFuncM[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - elseif v:hasTID(id) and not((x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable())) then - v:removeTID(id) - for i=1,#v.ToFuncR do - v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end) -end) --- now that that is done lets set up some more post loading checks -_GuiPro.int=multi:newProcess() -_GuiPro.int:Start() -_GuiPro.int:setJobSpeed(.001) -_GuiPro.EXACT=0 -_GuiPro.LAX=.01 -_GuiPro.LAZY=.05 --- now lets define the reg function -function gui.Compare(a,b,v,tp) - if tp==">" then - if (a+v>b or a-v>b) then - return true - end - elseif tp=="<" then - if (a+v=" then - if (a+v>=b or a-v>=b) then - return true - end - elseif tp=="==" then -- this one is gonna be tricky - if (a>=b-v and a<=b+v) or (b>=a-v and b<=a+v) then - return true - end - end - return false -end -function gui:regesterTouch() - local obj=self - obj.ToFuncP={} - obj.ToFuncM={} - obj.ToFuncR={} - obj.To2Func={} - obj.ToDTFunc={} - obj.touchRendering =_GuiPro.EXACT -- exact(0), lax(), # - function obj:removeTID(id) - for i=1,#self.tid do - if self.tid[i]==id then - table.remove(self.tid,i) - self.touchcount=self.touchcount-1 - return - end - end - end - function obj:hasTID(id) - for i=1,#self.tid do - if self.tid[i]==id then - return true - end - end - return false - end - obj.txl1=0 - obj.tyl1=0 - obj.txl2=0 - obj.tyl2=0 - obj.LS=0 - obj:OnUpdate(function(self) - if self.touchcount==2 then - local x1,y1=love.touch.getPosition( self.tid[1] ) - local x2,y2=love.touch.getPosition( self.tid[2] ) - local CS=math.sqrt((x2-x1)^2+(y2-y1)^2) - if gui.Compare(CS,self.LS,self.touchRendering,">") then - for i=1,#self.To2Func do - self.To2Func[i](self,CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - elseif gui.Compare(CS,self.LS,self.touchRendering,"<") then - for i=1,#self.To2Func do - self.To2Func[i](self,-CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - elseif gui.Compare(CS,self.LS,self.touchRendering,"==") then - for i=1,#self.To2Func do - self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - end - -- if self.txl1~=x1 or self.txl2~=x2 or self.tyl1~=y1 or self.tyl2~=y2 then - -- for i=1,#self.To2Func do - -- self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - -- end - -- end - self.LS=CS - self.txl1=x1 - self.txl2=x2 - self.tyl1=y1 - self.tyl2=y2 - end - end) - function obj:OnDoubleTap(func) - table.insert(self.ToDTFunc,func) - end - function obj:On2TouchMoved(func) - table.insert(self.To2Func,func) - end - function obj:addTID(id) - table.insert(self.tid,id) - end - function obj:OnTouchPressed(func) - table.insert(self.ToFuncP,func) -- event for touches - end - function obj:OnTouchReleased(func) -- event for touches - table.insert(self.ToFuncR,func) - end - function obj:OnTouchMoved(func) -- event for touches - table.insert(self.ToFuncM,func) - end - if _GuiPro.TouchReady then -- my sneaky test - print("Registred: "..tostring(obj)) - table.insert(_GuiPro.TouchRegister,obj) - else - print("Attempting to register: "..tostring(obj)) - _GuiPro.int:newJob(function() table.insert(_GuiPro.TouchRegister,obj) end) -- a sneaky way to ensure that your object gets registered eventually, even if you call the method before the touch patch was activated. - end -end diff --git a/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleB.int b/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleB.int deleted file mode 100644 index 5510a3d..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleB.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:AddDrawRuleB(rule) - if not(self.DrawRulesB) then self.DrawRulesB={} end - table.insert(self.DrawRulesB,rule) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleE.int b/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleE.int deleted file mode 100644 index a025f89..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Drawing/AddDrawRuleE.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:AddDrawRuleE(rule) - if not(self.DrawRulesE) then self.DrawRulesE={} end - table.insert(self.DrawRulesE,rule) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Drawing/draw.int b/examples/love2d Threading Example/GuiManagerDebug/Drawing/draw.int deleted file mode 100644 index d0b2404..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Drawing/draw.int +++ /dev/null @@ -1,12 +0,0 @@ -function gui:draw() - if _GuiPro.rotate~=0 then - love.graphics.rotate(math.rad(_GuiPro.rotate)) - end - if self.FormFactor:lower()=="rectangle" then - self:drawR() - elseif self.FormFactor:lower()=="circle" then - self:drawC() - else - error("Unsupported FormFactor: "..self.FormFactor.."!") - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawC.int b/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawC.int deleted file mode 100644 index 1f299a7..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawC.int +++ /dev/null @@ -1,89 +0,0 @@ -function gui:drawC() - if love.mouse.isDown("l")==false and love.mouse.isDown("m")==false and love.mouse.isDown("r")==false then - _GuiPro.DragItem={} - _GuiPro.hasDrag=false - end - if self.Visible==true and self.VIS==true then - local b=true - for i,v in pairs(_GuiPro.Clips) do - if self:isDescendant(v)==true then - b=false - end - end - if b then - love.graphics.setStencilTest( ) - _GuiPro.HasStencel=false - _GuiPro.StencelHolder=nil - end - local x,y,r,s=(self.offset.pos.x or 0)+self.Parent.x,(self.offset.pos.y or 0)+self.Parent.y,self.offset.size.x or 0,self.offset.size.y or 360 - if self.CC then - x,y=x+r,y+r - end - self.x,self.y=x,y - _GuiPro.circleStencilFunction = function() - love.graphics.circle("fill",x,y,r,s) - end - if math.sqrt((love.mouse.getX()-x)^2+(love.mouse.getY()-y)^2)<=r and self:eventable() and self:Clickable() and self.Active==true then - self.hovering=true - if love.mouse.isDown("l") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.lclicked=true - elseif love.mouse.isDown("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.rclicked=true - elseif love.mouse.isDown("m") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.mclicked=true - else - if string.find(self.Type, "Button") and _GuiPro.hasDrag==false then - love.graphics.setColor(self.Color[1]-5, self.Color[2]-5, self.Color[3]-5,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - self.hovering=false - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - if self.ClipDescendants==true then - _GuiPro.Clips[tostring(self)]=self - _GuiPro.HasStencel=true - _GuiPro.StencelHolder=self - love.graphics.stencil(_GuiPro.circleStencilFunction) - love.graphics.setStencilTest("notequal",0) - end - love.graphics.circle("fill",x,y,r,s) - love.graphics.setColor(self.BorderColor[1], self.BorderColor[2], self.BorderColor[3],self.Visibility) - for b=0,self.BorderSize-1 do - love.graphics.circle("line",x,y,r+b,s) - end - if string.find(self.Type, "Text") then - if self.text~=nil then - if self.AutoScaleText then - self.FontSize=math.floor(self.height/1.45833) - end - love.graphics.setColor(self.TextColor[1],self.TextColor[2],self.TextColor[3],self.TextVisibility) - love.graphics.setFont(self.Font) - love.graphics.printf(self.text, x-(r/2)+(self.XTween), y-(r/2)+self.Tween, r, self.TextFormat) - end - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawR.int b/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawR.int deleted file mode 100644 index 36b07c3..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Drawing/drawR.int +++ /dev/null @@ -1,131 +0,0 @@ -function gui:drawR() - if love.mouse.isDown("l")==false and love.mouse.isDown("m")==false and love.mouse.isDown("r")==false then - _GuiPro.DragItem={} - _GuiPro.hasDrag=false - end - if self.Visible==true and self.VIS==true then - local b=true - for i,v in pairs(_GuiPro.Clips) do - if self:isDescendant(v)==true then - b=false - end - end - if b==true then - love.graphics.setStencilTest() - love.graphics.setScissor() - end - self.x=(self.Parent.width*self.scale.pos.x)+self.offset.pos.x+self.Parent.x - self.y=(self.Parent.height*self.scale.pos.y)+self.offset.pos.y+self.Parent.y - self.width=(self.Parent.width*self.scale.size.x)+self.offset.size.x - self.height=(self.Parent.height*self.scale.size.y)+self.offset.size.y - if self.DrawRulesB then - for dr=1,#self.DrawRulesB do - self.DrawRulesB[dr](self) - end - end - if (love.mouse.getX() > self.x and love.mouse.getX() < self.x+self.width and love.mouse.getY() > self.y and love.mouse.getY() < self.y+self.height and self:Clickable() and self:eventable()) or self:touchable("r") and self.Active==true then - self.hovering=true - if love.mouse.isDown("l") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.lclicked=true - elseif love.mouse.isDown("r") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.rclicked=true - elseif love.mouse.isDown("m") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.mclicked=true - else - if string.find(self.Type, "Button") or self:touchable("r") and _GuiPro.hasDrag==false then - love.graphics.setColor(self.Color[1]-5, self.Color[2]-5, self.Color[3]-5,self.Visibility) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - end - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility) - self.hovering=false - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - if self.ClipDescendants==true then - _GuiPro.Clips[tostring(self)]=self - love.graphics.setScissor(self.x, self.y, self.width, self.height) - end - if self:hasRoundness() then - love.graphics.stencil(self.stfunc, "replace", 1) - love.graphics.setStencilTest("greater", 0) - end - - love.graphics.rectangle("fill", self.x, self.y, self.width, self.height,(self.rx or 1)*self.DPI,(self.ry or 1)*self.DPI,(self.segments or 1)*self.DPI) - if string.find(self.Type, "Image") then - self:ImageRule() - end - if self.Type=="Video" then - self:VideoRule() - end - if self:hasRoundness() then - love.graphics.setStencilTest() - end - love.graphics.setColor(self.BorderColor[1], self.BorderColor[2], self.BorderColor[3],self.Visibility) - for b=0,self.BorderSize-1 do - love.graphics.rectangle("line", self.x-(b/2), self.y-(b/2), self.width+b, self.height+b,(self.rx or 1)*self.DPI,(self.ry or 1)*self.DPI,(self.segments or 1)*self.DPI) - end - if string.find(self.Type, "Text") then - if self.text~=nil then - if self.AutoScaleText then - self.FontSize=math.floor(self.height/1.45833) - end - love.graphics.setColor(self.TextColor[1],self.TextColor[2],self.TextColor[3],self.TextVisibility) - if self.Font==_defaultfont then - love.graphics.setFont(self.Font) - love.graphics.printf( - self.text, - (self.x+2+(self.marginL or 0) or self.XTween)*self.DPI, - (self.y+math.floor((self.FontHeight-self.FontSize)/2)+self.Tween)*self.DPI, - (self.width+(0 or (self.marginR or 0)))*self.DPI, - self.TextFormat, - self.TextRotation) - else - if type(self.Font)=="string" then - self.Font=love.graphics.newFont(self.Font,self.FontSize) - self.FontHeight=self.Font:getHeight() - else - love.graphics.setFont(self.Font) - end - if type(self.FontSize)=="string" then - self.FontSize=tonumber(self.FontSize) - love.graphics.setNewFont(self.FontSize) - end - love.graphics.printf( - self.text, - (self.x+2+(self.marginL or 0) or self.XTween)*self.DPI, - (self.y+math.floor((self.FontHeight-self.FontSize)/2)+self.Tween)*self.DPI, - (self.width+(0 or (self.marginR or 0)))*self.DPI, - self.TextFormat, - self.TextRotation) - end - end - end - if self.DrawRulesE then - for dr=1,#self.DrawRulesE do - self.DrawRulesE[dr](self) - end - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Frame/newDropFrame.int b/examples/love2d Threading Example/GuiManagerDebug/Frame/newDropFrame.int deleted file mode 100644 index 97e4720..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Frame/newDropFrame.int +++ /dev/null @@ -1,37 +0,0 @@ -function gui:newDropFrame(name,x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("DropFrame",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=false - c.funcD={} - function c:GetDroppedItems() - local t=self:getChildren() - local tab={} - for i=1,#t do - if t[i].Type=="TextImageButtonFrameDrag" then - table.insert(tab,t[i]) - end - end - return tab - end - function c:OnDropped(func) - table.insert(self.funcD,func) - end - c:OnUpdate(function(self) - if _GuiPro.DragItem then - if _GuiPro.DragItem.Type=="TextImageButtonFrameDrag" and love.mouse.isDown(_GuiPro.DragItem.dragbut or "m")==false and self:IsHovering() then - local t=_GuiPro.DragItem - _GuiPro.DragItem={} - for i=1,#t.funcD do - t.funcD[i](self,t) - end - for i=1,#self.funcD do - self.funcD[i](self,t) - end - _GuiPro.hasDrag=false - end - end - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Frame/newFrame.int b/examples/love2d Threading Example/GuiManagerDebug/Frame/newFrame.int deleted file mode 100644 index 5e6b084..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Frame/newFrame.int +++ /dev/null @@ -1,8 +0,0 @@ -function gui:newFrame(name,x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("Frame",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=false - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Frame/newFullFrame.int b/examples/love2d Threading Example/GuiManagerDebug/Frame/newFullFrame.int deleted file mode 100644 index 5cda200..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Frame/newFullFrame.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:newFullFrame(name) - name=name or "" - return self:newFrame(name,0,0,0,0,0,0,1,1) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Frame/newTabFrame.int b/examples/love2d Threading Example/GuiManagerDebug/Frame/newTabFrame.int deleted file mode 100644 index 9f8f8fe..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Frame/newTabFrame.int +++ /dev/null @@ -1,59 +0,0 @@ -function gui:newTabFrame(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=gui:newFrame(name, x, y, w, h, sx ,sy ,sw ,sh) - c.tabheight=20 - c.Holder=c:newFrame("Holder",0,c.tabheight,0,0,0,0,1,1) - c.TabHolder=c:newFrame("TabHolder",0,0,0,c.tabheight,0,0,1) - function c:setTabHeight(n) - self.tabheight=n - self.Holder:SetDualDim(0,-self.tabheight,0,0,0,0,1,1) - end - function c:addTab(name,colorT,colorH) - if colorT and not(colorH) then - colorH=colorT - end - local tab=self.TabHolder:newTextButton(name,name,0,0,0,0,0,0,0,1) - tab.Tween=-3 - if colorT then - tab.Color=colorT - end - local holder=self.Holder:newFrame(name,0,0,0,0,0,0,1,1) - if colorH then - holder.Color=colorH - end - tab.frame=holder - tab:OnReleased(function(b,self) - if b=="l" then - local tt=self.Parent:getChildren() - local th=self.Parent.Parent.Holder:getChildren() - for i=1,#th do - th[i].Visible=false - end - for i=1,#tt do - tt[i].frame.Visible=false - tt[i].BorderSize=1 - end - self.BorderSize=0 - self.frame.Visible=true - end - end) - local tt=self.TabHolder:getChildren() - for i=1,#tt do - tt[i].frame.Visible=false - tt[i].BorderSize=1 - end - tab.frame.Visible=true - tab.BorderSize=0 - return tab,holder - end - c:OnUpdate(function(self) - local th=self.TabHolder:getChildren() - local l=self.width/#th - for i=1,#th do - th[i]:SetDualDim(l*(i-1),0,l) - end - if #th==0 then - self:Destroy() - end - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Frame/newratioFrame.int b/examples/love2d Threading Example/GuiManagerDebug/Frame/newratioFrame.int deleted file mode 100644 index e69de29..0000000 diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/SetImage.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/SetImage.int deleted file mode 100644 index 3a1b2fb..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/SetImage.int +++ /dev/null @@ -1,13 +0,0 @@ -function gui:SetImage(i) - if type(i)=="string" or tostring(i):find("ImageData") then - self.Image=love.graphics.newImage(i) - else - self.Image=i - end - if self.Image then - self.ImageHeigth=self.Image:getHeight() - self.ImageWidth=self.Image:getWidth() - self.Quad=love.graphics.newQuad(0,0,self.width,self.height,self.ImageWidth,self.ImageHeigth) - end - return self.ImageWidth,self.ImageHeigth -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/UpdateImage.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/UpdateImage.int deleted file mode 100644 index be4cfd7..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/UpdateImage.int +++ /dev/null @@ -1,5 +0,0 @@ -function gui:UpdateImage() - self.ImageHeigth=self.Image:getHeight() - self.ImageWidth=self.Image:getWidth() - self.Quad=love.graphics.newQuad(0,0,self.width,self.height,self.ImageWidth,self.ImageHeigth) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/getTile.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/getTile.int deleted file mode 100644 index 6b6fcae..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/getTile.int +++ /dev/null @@ -1,20 +0,0 @@ -function gui:getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="string" then - i=love.graphics.newImage(i) - elseif type(i)=="userdata" then - -- do nothing - elseif string.find(self.Type,"Image",1,true) then - local i,x,y,w,h=self.Image,i,x,y,w - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - -- - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnim.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnim.int deleted file mode 100644 index 30850aa..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnim.int +++ /dev/null @@ -1,57 +0,0 @@ -function gui:newAnim(file,delay, x, y, w, h, sx ,sy ,sw ,sh) - local x,y,w,h,sx,sy,sw,sh=filter(file, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation",file, x, y, w, h, sx ,sy ,sw ,sh) - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files={} - c.AnimStart={} - c.AnimEnd={} - local _files=alphanumsort(love.filesystem.getDirectoryItems(file)) - for i=1,#_files do - if string.sub(_files[i],-1,-1)~="b" then - table.insert(c.files,love.graphics.newImage(file.."/".._files[i])) - end - end - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromData.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromData.int deleted file mode 100644 index 02c85c7..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromData.int +++ /dev/null @@ -1,52 +0,0 @@ -function gui:newAnimFromData(data,delay, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation","FromFile", x, y, w, h, sx ,sy ,sw ,sh) - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files=data - c.AnimStart={} - c.AnimEnd={} - c:SetImage(c.files[1]) - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromTiles.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromTiles.int deleted file mode 100644 index 70aea2c..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newAnimFromTiles.int +++ /dev/null @@ -1,59 +0,0 @@ -function gui:newAnimFromTiles(file,xd,yd,delay, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(file, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation",file, x, y, w, h, sx ,sy ,sw ,sh) - local im=love.graphics.newImage(file) - local _x,_y=im:getDimensions() - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files={} - c.AnimStart={} - c.AnimEnd={} - for i=0,_y/yd-1 do - for j=0,_x/xd-1 do - table.insert(c.files,gui:getTile(im,j*xd,i*yd,xd,yd)) - end - end - c:SetImage(c.files[1]) - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newFullImageLabel.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newFullImageLabel.int deleted file mode 100644 index 953f480..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newFullImageLabel.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:newFullImageLabel(i,name) - return self:newImageLabel(i,name,0,0,0,0,0,0,1,1) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageButton.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageButton.int deleted file mode 100644 index 5d03572..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageButton.int +++ /dev/null @@ -1,25 +0,0 @@ -function gui:newImageButton(i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageButton",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" or type(i):find("ImageData") then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.Visibility=0 - c.ImageVisibility=1 - c.rotation=0 - if c.Image~=nil then - c.ImageHeigth=c.Image:getHeight() - c.ImageHeight=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c:OnEnter(function() - love.mouse.setCursor(_GuiPro.CursorH) - end) - c:OnExit(function() - love.mouse.setCursor(_GuiPro.CursorN) - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageLabel.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageLabel.int deleted file mode 100644 index c969bf8..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newImageLabel.int +++ /dev/null @@ -1,18 +0,0 @@ -function gui:newImageLabel(i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageLabel",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" or type(i):find("ImageData") then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.Visibility=0 - c.ImageVisibility=1 - c.rotation=0 - if c.Image then - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newVideo.int b/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newVideo.int deleted file mode 100644 index de2c379..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Image-Animation/newVideo.int +++ /dev/null @@ -1,62 +0,0 @@ -function gui:newVideo(name,i,x,y,w,h,sx,sy,sw,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("Video",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Video=love.graphics.newVideo(i) - else - c.Video=i - end - c.Visibility=0 - c.VideoVisibility=1 - c.rotation=0 - if c.Video~=nil then - c.VideoHeigth=c.Video:getHeight() - c.VideoWidth=c.Video:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.VideoWidth,c.VideoHeigth) - end - c.funcV={} - function c:Play() - self.handStart=true - self.Video:play() - end - function c:Pause() - self.Video:pause() - end - c.Resume=c.Play - function c:Stop() - self.handStart=false - self:Pause() - self:Rewind() - for i=1,# self.funcV do - self.funcV[i](self) - end - end - function c:OnVideoStopped(func) - table.insert(self.funcV,func) - end - function c:Rewind() - self.Video:rewind() - end - function c:Restart() - self:Rewind() - self:Play() - end - function c:Seek(o) - self.Video:seek(o) - end - function c:Tell() - self.Video:tell() - end - function c:SetFilter(min, mag, anisotropy) - self.Video:setFilter(min, mag, anisotropy) - end - function c:IsPlaying() - return self.Video:isPlaying() - end - c:OnUpdate(function(self) - if self.Video:isPlaying()==false and self.handStart == true then - self:Stop() - end - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Item/newDragItem.int b/examples/love2d Threading Example/GuiManagerDebug/Item/newDragItem.int deleted file mode 100644 index 162341c..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Item/newDragItem.int +++ /dev/null @@ -1,51 +0,0 @@ -function gui:newDragItem(t,i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextImageButtonFrameDrag",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=true - c.funcD={} - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - c.ImageVisibility=1 - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - elseif type(i)=="image" then - c.Image=i - c.ImageVisibility=1 - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c:OnDragStart(function(self,x,y) - if _GuiPro.hasDrag==false then - self:setParent(_GuiPro) - self:SetDualDim(x,y) - self:TopStack() - end - end) - c.rotation=0 - c.Tween=0 - c.XTween=0 - c.text = t - c.AutoScaleText=false - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.TextVisibility=1 - c.TextColor = {0, 0, 0} - function c:OnDropped(func) - table.insert(self.funcD,func) - end - c:OnUpdate(function(self) - if love.mouse.isDown("m" or self.dragbut)==false and self==_GuiPro.DragItem and self.hovering==false then - _GuiPro.DragItem={} - for i=1,#self.func7 do - self.func7[i](self,(love.mouse.getX())-self.width/2,(love.mouse.getY())-self.height/2) - end - end - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Item/newItem.int b/examples/love2d Threading Example/GuiManagerDebug/Item/newItem.int deleted file mode 100644 index 57a68d5..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Item/newItem.int +++ /dev/null @@ -1,28 +0,0 @@ -function gui:newItem(t,i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextImageButtonFrame",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.rotation=0 - c.ImageVisibility=1 - c.Draggable=false - if c.Image~=nil then - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c.Tween=0 - c.XTween=0 - c.text = t - c.AutoScaleText=false - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.TextColor = {0, 0, 0} - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/AdvTextBox.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/AdvTextBox.int deleted file mode 100644 index 08a3499..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/AdvTextBox.int +++ /dev/null @@ -1,45 +0,0 @@ -function gui:AdvTextBox(txt,x,y,w,h,sx,sy,sw,sh) - name="AdvTextBox" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("AdvTextBoxFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c.BorderSize=0 - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - --local temp = c:newTextButton("X","Close",-25,5,20,20,1) - --temp.Tween=-5 - --temp.XTween=-2 - --temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - --temp.Color=Color.Red - c.tLink=c:newTextBox("puttext","TextBox",5,h-95,-40,30,0,1,1,1) - c.tLink.Color=Color.light_gray - c.tLink.ClearOnFocus=true - c.tLink:OnFocus(function(self) self.ClearOnFocus=false end) - local temp=c:newTextButton("OK","Ok",-35,h-65,30,30,1,1) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcO do self.Parent.funcO[i](self.Parent,self.Parent.tLink.text) end end) - temp.Color=Color.Green - temp.XTween=-2 - local temp=c:newTextButton("X","Cancel",-35,h-95,30,30,1,1) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent,self.Parent.tLink.text) end end) - temp.Color=Color.Red - temp.XTween=-2 - function c:Close() - self.Visible=false - end - function c:Open() - self.Visible=true - end - function c:OnOk(func) - table.insert(self.funcO,func) - end - function c:OnX(func) - table.insert(self.funcX,func) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/ApplyGradient.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/ApplyGradient.int deleted file mode 100644 index 87cb97d..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/ApplyGradient.int +++ /dev/null @@ -1,36 +0,0 @@ -function _GuiPro.gradient(colors) - local direction = colors.direction or "horizontal" - colors.direction=nil - trans = colors.trans or 1 - trans=math.floor(trans) - if direction == "horizontal" then - direction = true - elseif direction == "vertical" then - direction = false - else - error("Invalid direction '" .. tostring(direction) "' for gradient. Horizontal or vertical expected.") - end - local result = love.image.newImageData(direction and 1 or #colors, direction and #colors or 1,"rgba32f") - for __i, color in ipairs(colors) do - local x, y - if direction then - x, y = 0, __i - 1 - else - x, y = __i - 1, 0 - end - result:setPixel(x, y, color[1], color[2], color[3], trans) - end - result = love.graphics.newImage(result) - result:setFilter('linear', 'linear') - return result -end -function _GuiPro.drawinrect(img, x, y, w, h, r, ox, oy, kx, ky) - love.graphics.draw(img, x, y, r, w / img:getWidth(), h / img:getHeight(), ox, oy, kx, ky) -end -function gui:ApplyGradient(rules) - self.Image=nil - self.Type=self.Type.."w/GradImage" - self.rotation=0 - self.ImageVisibility=rules.visibility or 1 - self:SetImage(_GuiPro.gradient(rules)) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/BottomStack.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/BottomStack.int deleted file mode 100644 index b339ec4..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/BottomStack.int +++ /dev/null @@ -1,10 +0,0 @@ -function gui:BottomStack() - childs=self.Parent:getChildren() - for i=1,#childs do - if childs[i]==self then - table.remove(self.Parent.Children,i) - table.insert(self.Parent.Children,1,self) - break - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/Center.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/Center.int deleted file mode 100644 index fb22fea..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/Center.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:center() - self:centerX() - self:centerY() -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/Destroy.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/Destroy.int deleted file mode 100644 index f127af8..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/Destroy.int +++ /dev/null @@ -1,10 +0,0 @@ -function gui:Destroy() - check=self.Parent:getChildren() - local cc=0 - for cc=1,#check do - if check[cc]==self then - table.remove(self.Parent.Children,cc) - end - end - self.Destroyed = true -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/GetAllChildren.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/GetAllChildren.int deleted file mode 100644 index b3a0ae4..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/GetAllChildren.int +++ /dev/null @@ -1,25 +0,0 @@ -function gui:GetAllChildren() - local Stuff = {} - function Seek(Items) - for i=1,#Items do - if Items[i].Visible==true then - table.insert(Stuff,Items[i]) - local NItems = Items[i]:getChildren() - if NItems ~= nil then - Seek(NItems) - end - end - end - end - local Objs = self:getChildren() - for i=1,#Objs do - if Objs[i].Visible==true then - table.insert(Stuff,Objs[i]) - local Items = Objs[i]:getChildren() - if Items ~= nil then - Seek(Items) - end - end - end - return Stuff -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/GetChild.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/GetChild.int deleted file mode 100644 index d434f40..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/GetChild.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:GetChild(name) - return self.Children[name] or self -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGrid.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/InGrid.int deleted file mode 100644 index 4e097a7..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGrid.int +++ /dev/null @@ -1,3 +0,0 @@ -function InGrid(i,x,y,s) - return math.floor((i-1)/x)*s,(i-1)*s-(math.floor((i-1)/y)*(s*x)) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridX.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridX.int deleted file mode 100644 index c4aadc2..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridX.int +++ /dev/null @@ -1,5 +0,0 @@ -function InGridX(i,w,h,xs,ys) - local xc,yc=math.floor(w/xs),math.floor(h/ys) - local xi,yi=(i-1)%xc,math.floor((i-1)/xc) - return xi*xs,yi*ys -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridY.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridY.int deleted file mode 100644 index 555c72a..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/InGridY.int +++ /dev/null @@ -1,5 +0,0 @@ -function InGridY(i,w,h,xs,ys) - local xc,yc=math.floor(w/xs),math.floor(h/ys) - local xi,yi=math.floor((i-1)/yc),(i-1)%yc - return xi*xs,yi*ys -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/IsHovering.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/IsHovering.int deleted file mode 100644 index 072bb54..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/IsHovering.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:IsHovering() - return (love.mouse.getX() > self.x and love.mouse.getX() < self.x+self.width and love.mouse.getY() > self.y and love.mouse.getY() < self.y+self.height) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/Move.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/Move.int deleted file mode 100644 index 6f32db9..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/Move.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:Move(x,y) - self.offset.pos.x=self.offset.pos.x+x - self.offset.pos.y=self.offset.pos.y+y -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetDualDim.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/SetDualDim.int deleted file mode 100644 index 0774965..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetDualDim.int +++ /dev/null @@ -1,46 +0,0 @@ -function gui:SetDualDim(x, y, w, h, sx ,sy ,sw ,sh) - if _GuiPro.DPI_ENABLED then - if x then - x=self.DPI*x - end - if y then - y=self.DPI*y - end - if w then - w=self.DPI*w - end - if h then - h=self.DPI*h - end - end - if sx then - self.scale.pos.x=sx - end - if sy then - self.scale.pos.y=sy - end - if x then - self.offset.pos.x=x - end - if y then - self.offset.pos.y=y - end - if sw then - self.scale.size.x=sw - end - if sh then - self.scale.size.y=sh - end - if w then - self.offset.size.x=w - end - if h then - self.offset.size.y=h - end - if self.Image then - self:SetImage(self.Image) - end -end -function gui:setDualDim(...) - self:SetDualDim(...) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHand.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHand.int deleted file mode 100644 index 8171f2c..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHand.int +++ /dev/null @@ -1,5 +0,0 @@ -_GuiPro.CursorN=love.mouse.getSystemCursor("arrow") -_GuiPro.CursorH=love.mouse.getSystemCursor("hand") -function gui:SetHand(img,x,y) - _GuiPro.CursorN=love.mouse.newCursor(img,x,y) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHover.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHover.int deleted file mode 100644 index 956e593..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetHover.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:SetHover(img,x,y) - _GuiPro.CursorH=love.mouse.newCursor(img,x,y) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetName.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/SetName.int deleted file mode 100644 index 1e69edd..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/SetName.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui:SetName(name) - self.Parent.Children[name]=self - self.Name=name -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/TopStack.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/TopStack.int deleted file mode 100644 index a1db016..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/TopStack.int +++ /dev/null @@ -1,10 +0,0 @@ -function gui:TopStack() - childs=self.Parent:getChildren() - for i=1,#childs do - if childs[i]==self then - table.remove(self.Parent.Children,i) - table.insert(self.Parent.Children,self) - break - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/addDominance.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/addDominance.int deleted file mode 100644 index 5a55975..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/addDominance.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:addDominance() - _GuiPro.TopHovered=self -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/addHotKey.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/addHotKey.int deleted file mode 100644 index 0ec05e0..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/addHotKey.int +++ /dev/null @@ -1,6 +0,0 @@ -function gui:addHotKey(key) - local temp=self:newFrame(0,0,0,0) - temp.Visible=false - temp:setHotKey(key) - return temp -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/alphanumsort.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/alphanumsort.int deleted file mode 100644 index 3b36133..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/alphanumsort.int +++ /dev/null @@ -1,7 +0,0 @@ -function alphanumsort(o) - local function padnum(d) local dec, n = string.match(d, "(%.?)0*(.+)") - return #dec > 0 and ("%.12f"):format(d) or ("%s%03d%s"):format(dec, #n, n) - end - table.sort(o, function(a,b) return tostring(a):gsub("%.?%d+",padnum)..("%3d"):format(#b)< tostring(b):gsub("%.?%d+",padnum)..("%3d"):format(#a) end) - return o -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/anchorRight.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/anchorRight.int deleted file mode 100644 index 91251ad..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/anchorRight.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:anchorRight(n) - self:SetDualDim(-(self.width+n),nil,nil,nil,1) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/centerX.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/centerX.int deleted file mode 100644 index ea1f599..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/centerX.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:centerX() - self:SetDualDim(-(self.width/2),nil,nil,nil,.5) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/centerY.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/centerY.int deleted file mode 100644 index c998589..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/centerY.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:centerY() - self:SetDualDim(nil,-(self.height/2),nil,nil,nil,.5) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/disrespectHierarchy.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/disrespectHierarchy.int deleted file mode 100644 index d25162d..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/disrespectHierarchy.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:disrespectHierarchy() - _GuiPro.Hierarchy=false -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/getChildren.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/getChildren.int deleted file mode 100644 index 295c5fc..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/getChildren.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:getChildren() - return self.Children -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/getColor.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/getColor.int deleted file mode 100644 index bef482e..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/getColor.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:getColor(cindex) - return Color[cindex] -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/getFullSize.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/getFullSize.int deleted file mode 100644 index d2ad2d5..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/getFullSize.int +++ /dev/null @@ -1,12 +0,0 @@ -function gui:getFullSize() - local maxx,maxy=-math.huge,-math.huge - local temp = self:GetAllChildren() - for i=1,#temp do - if temp[i].width+temp[i].offset.pos.x>maxx then - maxx=temp[i].width+temp[i].offset.pos.x - elseif temp[i].height+temp[i].offset.pos.y>maxy then - maxy=temp[i].height+temp[i].offset.pos.y - end - end - return maxx,maxy -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/getHighest.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/getHighest.int deleted file mode 100644 index df7121a..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/getHighest.int +++ /dev/null @@ -1,5 +0,0 @@ -function gui:getHighest() - if self.Children[#self.Children]~=nil then - return self.Children[#self.Children] - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/getLowest.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/getLowest.int deleted file mode 100644 index 5319544..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/getLowest.int +++ /dev/null @@ -1,5 +0,0 @@ -function gui:getLowest() - if self.Children[1]~=nil then - return self.Children[1] - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/isDescendant.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/isDescendant.int deleted file mode 100644 index 5c9c2a5..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/isDescendant.int +++ /dev/null @@ -1,9 +0,0 @@ -function gui:isDescendant(obj) - local things=obj:GetAllChildren() - for i=1,#things do - if things[i]==self then - return true - end - end - return false -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/isHighest.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/isHighest.int deleted file mode 100644 index 0453c16..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/isHighest.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:isHighest() - return (self==self.Parent:getHighest()) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/isLowest.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/isLowest.int deleted file mode 100644 index a210883..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/isLowest.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:isLowest() - return (self==self.Parent:getLowest()) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/massMutate.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/massMutate.int deleted file mode 100644 index 1c75aee..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/massMutate.int +++ /dev/null @@ -1,6 +0,0 @@ -function gui.massMutate(t,...) - local mut={...} - for i=1,#mut do - mut[i]:Mutate(t) - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newCheckBox.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newCheckBox.int deleted file mode 100644 index 607d5d9..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newCheckBox.int +++ /dev/null @@ -1,41 +0,0 @@ -if love.filesystem.getInfo("CheckBoxes.png") then - _GuiPro.UC=gui:getTile("CheckBoxes.png",0,0,16,16) - _GuiPro.C=gui:getTile("CheckBoxes.png",16,0,16,16) - _GuiPro.UCH=gui:getTile("CheckBoxes.png",0,16,16,16) - _GuiPro.CH=gui:getTile("CheckBoxes.png",16,16,16,16) -end -function gui:newCheckBox(name,x,y) - if not(_GuiPro.UC) then error("CheckBoxes.png not found! Cannot currently use checkbox without the data") end - if type(name)~="String" then - x,y,name=name,x,"CheckBox" - end - local c=self:newImageLabel(_GuiPro.UC,name, x, y, 16,16) - c.Visibility=0 - c.check=false - c:OnEnter(function(self) - if self.check then - self:SetImage(_GuiPro.CH) - else - self:SetImage(_GuiPro.UCH) - end - end) - function c:isChecked() - return self.check - end - c:OnExit(function(self) - if self.check then - self:SetImage(_GuiPro.C) - else - self:SetImage(_GuiPro.UC) - end - end) - c:OnReleased(function(b,self) - self.check=not(self.check) - if self.check then - self:SetImage(_GuiPro.CH) - else - self:SetImage(_GuiPro.UCH) - end - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newMessageBox.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newMessageBox.int deleted file mode 100644 index 6b11a5a..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newMessageBox.int +++ /dev/null @@ -1,36 +0,0 @@ -function gui:newMessageBox(txt,x,y,w,h,sx,sy,sw,sh) - name="MessageBox" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("MessageBoxFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c.BorderSize=0 - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - local temp = c:newTextButton("X","Close",-25,5,20,20,1) - temp.Tween=-5 - temp.XTween=-2 - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - temp.Color=Color.Red - local temp=c:newTextButton("OK","Ok",0,h-65,0,30,.25,1,.5) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcO do self.Parent.funcO[i](self.Parent) end end) - temp.Color=Color.Green - function c:Close() - self.Visible=false - end - function c:Open() - self.Visible=true - end - function c:OnOk(func) - table.insert(self.funcO,func) - end - function c:OnX(func) - table.insert(self.funcX,func) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newPart.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newPart.int deleted file mode 100644 index 79bd3e5..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newPart.int +++ /dev/null @@ -1,49 +0,0 @@ -function gui:newPart(x, y,w ,h , sx ,sy ,sw ,sh) - local c = {} - setmetatable(c, gui) - if self==gui then - c.Parent=_GuiPro - else - c.Parent=self - end - c.funcs={} - c.funcs2={} - c.funcs3={} - c.funcs4={} - c.funcs5={} - c.func6={} - c.func7={} - c.func8={} - c.func9={} - c.func10={} - c.form="rectangle" - c.Color = {255, 255, 255} - c.scale={} - c.scale.size={} - c.scale.size.x=sw or 0 - c.scale.size.y=sh or 0 - c.offset={} - c.offset.size={} - c.offset.size.x=w or 0 - c.offset.size.y=h or 0 - c.scale.pos={} - c.scale.pos.x=sx or 0 - c.scale.pos.y=sy or 0 - c.offset.pos={} - c.offset.pos.x=x or 0 - c.offset.pos.y=y or 0 - c.VIS=true - c.Visible=true - c.Visibility=1 - c.BorderColor={0,0,0} - c.BorderSize=0 - c.Type="Part" - c.Name="GuiPart" - _GuiPro.count=_GuiPro.count+1 - c.x=(c.Parent.width*c.scale.pos.x)+c.offset.pos.x+c.Parent.x - c.y=(c.Parent.height*c.scale.pos.y)+c.offset.pos.y+c.Parent.y - c.width=(c.Parent.width*c.scale.size.x)+c.offset.size.x - c.height=(c.Parent.height*c.scale.size.y)+c.offset.size.y - table.insert(c.Parent.Children,c) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newProgressBar.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newProgressBar.int deleted file mode 100644 index 2f82f9f..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newProgressBar.int +++ /dev/null @@ -1,45 +0,0 @@ -function gui:newProgressBar(txt,x,y,w,h,sx,sy,sw,sh) - name="newProgressBar" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("newProgressBarFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c.BorderSize=0 - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - local temp = c:newTextButton("X","Close",-25,5,20,20,1) - temp.Tween=-5 - temp.XTween=-2 - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - temp.Color=Color.Red - c.BarBG=c:newTextButton("",5,h-65,-10,30,0,1,1) - c.BarBG:ApplyGradient{Color.Red,Color.light_red} - c.Bar=c.BarBG:newTextLabel("",0,0,0,0,0,0,0,1) - c.Bar:ApplyGradient{Color.Green,Color.light_green} - c.BarDisp=c.BarBG:newTextLabel("0%","0%",0,0,0,0,0,0,1,1) - c.BarDisp.Visibility=0 - c.BarDisp.Link=c.Bar - c.BarDisp:OnUpdate(function(self) - self.text=self.Link.scale.size.x*100 .."%" - end) - c.Func1={} - function c:On100(func) - table.insert(self.Func1,func) - end - c:OnUpdate(function(self) - if self.Bar.scale.size.x*100>=100 then - for P=1,#self.Func1 do - self.Func1[P](self) - end - end - end) - function c:SetPercentage(n) - self.Bar:SetDualDim(0,0,0,0,0,0,n/100,1) - end - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollBar.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollBar.int deleted file mode 100644 index 6fa810a..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollBar.int +++ /dev/null @@ -1,42 +0,0 @@ -function gui:newScrollBar(color1,color2) - local scrollbar=self:newFrame(-20,0,20,0,1,0,0,1) - scrollbar.funcS={} - scrollbar.Color=color1 or Color.saddle_brown - scrollbar:OnClicked(function(b,self,x,y) - love.mouse.setX(self.x+10) - if y>=10 and y<=self.height-10 then - self.mover:SetDualDim(0,y-10) - end - if y<10 then - love.mouse.setY(10+self.y) - end - if y>self.height-10 then - love.mouse.setY((self.height-10)+self.y) - end - for i=1,#self.funcS do - self.funcS[i](self,self:getPosition()) - end - end) - scrollbar:OnEnter(function(self) - self:addDominance() - end) - scrollbar:OnExit(function(self) - self:removeDominance() - end) - scrollbar.mover=scrollbar:newTextButton("","",0,0,20,20) - scrollbar.mover.Color=color2 or Color.light_brown - function scrollbar:getPosition() - return ((self.mover.offset.pos.y)/(self.height-20))*100 - end - function scrollbar:setPosition(n) - print((self.height-20),n) - self.mover.offset.pos.y=((self.height-20)/(100/n)) - for i=1,#self.funcS do - self.funcS[i](self,self:getPosition()) - end - end - function scrollbar:OnScroll(func) - table.insert(self.funcS,func) - end - return scrollbar -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollMenu.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollMenu.int deleted file mode 100644 index 3dbfdaf..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/newScrollMenu.int +++ /dev/null @@ -1,98 +0,0 @@ -function gui:newScrollMenu(title,tabN,onloop,x, y, w, h, sx ,sy ,sw ,sh) - local Main = self:newFrame(x, y, w, h, sx ,sy ,sw ,sh) - local Title=Main:newTextButton(title,"Title",0,0,0,20,0,0,1) - Title.Tween=-4 - Title.FontSize=12 - Title:OnReleased(function(b,self) - self.Parent.Tick=not(self.Parent.Tick) - end) - local scroll=Main:newTextButton("","Scroll",-20,20,20,-20,1,0,0,1) - scroll:OnClicked(function(b,self,x,y) - self.Parent.Mover:SetDualDim(0,y-10,20,20) - if self.Parent.Mover.offset.pos.y<0 then - self.Parent.Mover:SetDualDim(0,0,20,20) - end - if self.Parent.Mover.offset.pos.y>self.Parent.height-40 then - self.Parent.Mover:SetDualDim(0,self.Parent.height-40,20,20) - end - local temp = #self.Parent.TList - self.Parent.pos=(math.floor((temp*self.Parent.Mover.offset.pos.y)/self.height))+1 - end) - Main:OnUpdate(function(self) - if self.Tick==false then - self.Visibility=0 - end - end) - scroll:OnUpdate(function(self) - self.Visible=self.Parent.Tick - end) - local Mover=scroll:newTextLabel("",0,0,20,20) - Main.Mover=Mover - Main.TList=tabN - Main.pos=1 - Main.Tick=true - function Main:Update(title,tabN,onloop) - ch=self:getChildren() - for i=#ch,1,-1 do - ch[i]:Destroy() - end - Title=Main:newTextButton(title,"Title",0,0,0,20,0,0,1) - Title.Tween=-4 - Title.FontSize=12 - Title:OnReleased(function(b,self) - self.Parent.Tick=not(self.Parent.Tick) - end) - scroll=Main:newTextButton("","Scroll",-20,20,20,-20,1,0,0,1) - scroll:OnClicked(function(b,self,x,y) - self.Parent.Mover:SetDualDim(0,y-10,20,20) - if self.Parent.Mover.offset.pos.y<0 then - self.Parent.Mover:SetDualDim(0,0,20,20) - end - if self.Parent.Mover.offset.pos.y>self.Parent.height-40 then - self.Parent.Mover:SetDualDim(0,self.Parent.height-40,20,20) - end - local temp = #self.Parent.TList - self.Parent.pos=(math.floor((temp*self.Parent.Mover.offset.pos.y)/self.height))+1 - end) - local Mover=scroll:newTextLabel("",0,0,20,20) - Main.Mover=Mover - Main.TList=tabN - Main.pos=1 - Main.Tick=true - scroll:OnUpdate(function(self) - self.Visible=self.Parent.Tick - end) - for i=1,math.floor(Main.height/20)-1 do - local temp=Main:newTextButton("","Item"..i,0,i*20,-20,20,0,0,1) - temp.FontSize=10 - temp.Tween=-4 - temp.pos=i - temp:OnUpdate(function(self) - self.text=self.Parent.TList[(self.Parent.pos+self.pos)-1] - self.Visible=self.Parent.Tick - end) - if onloop then - onloop(temp,i) - end - end - end - io.write(tostring(Main.height).."\n") - for i=1,math.floor(Main.height/20)-1 do - local temp=Main:newTextButton("Item"..i,0,i*20,-20,20,0,0,1) - temp.FontSize=10 - temp.Tween=-4 - temp.pos=i - temp:OnUpdate(function(self) - if self.Parent.TList[(self.Parent.pos+self.pos)-1]~=nil then - self.text=self.Parent.TList[(self.Parent.pos+self.pos)-1] - else - self.text="" - end - self.Visible=self.Parent.Tick - end) - if onloop then - onloop(temp,i) - end - end - return Main -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/removeAllChildren.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/removeAllChildren.int deleted file mode 100644 index 8d0d99e..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/removeAllChildren.int +++ /dev/null @@ -1,6 +0,0 @@ -function gui:destroyAllChildren() - local c=self.Children - for i=1,#c do - c[i]:Destroy() - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/removeDominance.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/removeDominance.int deleted file mode 100644 index c42b2e1..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/removeDominance.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:removeDominance() - _GuiPro.TopHovered=nil -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/respectHierarchy.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/respectHierarchy.int deleted file mode 100644 index 656a992..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/respectHierarchy.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:respectHierarchy() - _GuiPro.Hierarchy=true -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/round.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/round.int deleted file mode 100644 index f06ad57..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/round.int +++ /dev/null @@ -1,4 +0,0 @@ -function gui.round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setBG.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setBG.int deleted file mode 100644 index c82f045..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setBG.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui.setBG(i) - gui.ff:SetImage(i) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setColor.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setColor.int deleted file mode 100644 index 7a81a6f..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setColor.int +++ /dev/null @@ -1,14 +0,0 @@ -function gui:setColor(a,b,c) - if type(a)=="string" then - self.Color=Color[a] - elseif type(a)=="number" then - self.Color=Color.new(a,b,c) - end -end -function gui:setTextColor(a,b,c) - if type(a)=="string" then - self.TextColor=Color[a] - elseif type(a)=="number" then - self.TextColor=Color.new(a,b,c) - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setDefualtFont.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setDefualtFont.int deleted file mode 100644 index 001b9f7..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setDefualtFont.int +++ /dev/null @@ -1,3 +0,0 @@ -function gui:setDefualtFont(font) - _defaultfont = font -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setHotKey.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setHotKey.int deleted file mode 100644 index 5866cfc..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setHotKey.int +++ /dev/null @@ -1,24 +0,0 @@ -function gui:setHotKey(key) - local tab=key:split("+") - self.hotkeys=tab - self.cooldown=false - self.Alarm=multi:newAlarm(1) - self.Alarm.parent=self - self.args={} - self.funcHK=multi:newConnection() - self.Alarm:OnRing(function(alarm) alarm.parent.cooldown=false end) - function self:OnHotKey(func) - self.funcHK:connect(func) - end - self:OnUpdate(function(self) - if self.cooldown then return end - for i=1,#self.hotkeys do - if not(love.keyboard.isDown(self.hotkeys[i])) then - return - end - end - self.cooldown=true - self.funcHK:Fire(self) - self.Alarm:Reset() - end) -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setNewFont.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setNewFont.int deleted file mode 100644 index 2ee8adf..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setNewFont.int +++ /dev/null @@ -1,7 +0,0 @@ -function gui:setNewFont(FontSize,filename) - if filename then - self.Font = love.graphics.newFont(filename, tonumber(FontSize)) - else - self.Font=love.graphics.setNewFont(tonumber(FontSize)) - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setParent.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setParent.int deleted file mode 100644 index 37ddb6e..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setParent.int +++ /dev/null @@ -1,14 +0,0 @@ -function gui:setParent(parent,name)-- Needs fixing!!! - local temp=self.Parent:getChildren() - for i=1,#temp do - if temp[i]==self then - table.remove(self.Parent.Children,i) - break - end - end - table.insert(parent.Children,self) - self.Parent=parent - if name then - self:SetName(name) - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setVisibility.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setVisibility.int deleted file mode 100644 index ca6008c..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setVisibility.int +++ /dev/null @@ -1,14 +0,0 @@ -function gui:setVisiblity(val) - self.Visible=val - self.oV=val - doto=self:GetAllChildren() - if val==false then - for i=1,#doto do - doto[i].Visible=val - end - else - for i=1,#doto do - doto[i].Visible=doto[i].oV - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Misc/setgetText.int b/examples/love2d Threading Example/GuiManagerDebug/Misc/setgetText.int deleted file mode 100644 index bb4afc6..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Misc/setgetText.int +++ /dev/null @@ -1,6 +0,0 @@ -function gui:setText(txt) - self.text=txt -end -function gui:getText(txt) - return self.text -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextBox.int b/examples/love2d Threading Example/GuiManagerDebug/Text/newTextBox.int deleted file mode 100644 index 69e2683..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextBox.int +++ /dev/null @@ -1,181 +0,0 @@ -function string:insert(p,s) - return ("%s%s%s"):format(self:sub(1,p), s, self:sub(p+1)) -end -function string:remove(p,l) - l=l or 1 - return ("%s%s"):format(self:sub(1,p-1), self:sub(p+l)) -end -function gui:newTextBox(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextBox",name, x, y, w, h, sx ,sy ,sw ,sh) - c.ClearOnFocus=false - c.LoseFocusOnEnter=true - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.ttext= t - c.AutoScaleText=false - c.TextVisibility=1 - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - c.Active=false - c.hidden=false - c.cursor={0,1} - c.mark=nil - c.arrowkeys=false - c.funcF={function() - love.keyboard.setTextInput(true,0,200,400,200) - end} - c.cooldown=false - c.cooldown2=false - c.funcE={function() - love.keyboard.setTextInput(false) - end} - function c:triggerEnter() - for cc=1,#self.funcE do - self.funcE[cc](self,self.ttext) - end - self.text="" - self.ttext="" - end - c.Enter=true - c.Alarm=multi:newAlarm(.1) - c.Alarm.parent=c - c.Alarm:OnRing(function(alarm) alarm.parent.cooldown=false end) - c.Alarm2=multi:newAlarm(.5) - c.Alarm2.parent=c - c.Alarm2:OnRing(function(alarm) alarm.parent.cooldown2=false end) - c.ArrowAlarm=multi:newAlarm(.1) - c.ArrowAlarm.parent=c - c.ArrowAlarm:OnRing(function(alarm) alarm.parent.arrowkeys=false end) - function c:OnFocus(func) - table.insert(self.funcF,func) - end - function c:OnEnter(func) - table.insert(self.funcE,func) - end - c:OnClicked(function(b,self) - self:focus() - end) - function c:focus() - for cc=1,#self.funcF do - self.funcF[cc](self) - end - if self.Active==false then - if self.ClearOnFocus==true then - self.text="" - self.ttext="" - end - for tb=1,#gui.TB do - if gui.TB[tb]~=nil then - gui.TB[tb].Active=false - end - end - self.Active=true - end - end - c:OnClicked(function(b,self,x,y) - local dwidth, wrappedtext = _defaultfont:getWrap(self.text:sub(1,self.cursor[1]), self.width) - local height = _defaultfont:getHeight() - if #wrappedtext>=1 then - width= _defaultfont:getWidth(wrappedtext[#wrappedtext]) - self.cursor[2]=#wrappedtext - else - self.cursor[2]=1 - width=0 - end - yc=math.ceil(((y/self.DPI)-(self.FontHeight/2)+self.Tween-self.y)/height) - xc=math.floor(x) - end) - c:AddDrawRuleE(function(self) - if self.Active then - local dwidth, wrappedtext = _defaultfont:getWrap(self.text:sub(1,self.cursor[1]), self.width) - local height = _defaultfont:getHeight() - if #wrappedtext>=1 then - width= _defaultfont:getWidth(wrappedtext[#wrappedtext]) - self.cursor[2]=#wrappedtext - else - self.cursor[2]=1 - width=0 - end - x1=width+2+self.x+self.XTween - y1=(self.y+(height*(self.cursor[2]-1))+(self.FontHeight/2)+self.Tween)*self.DPI - x2=width+2+self.x+self.XTween - y2=(self.y+(self.FontHeight/2)+self.Tween*self.DPI)+height*self.cursor[2] - love.graphics.line(x1,y1,x2,y2) - end - end) - c:OnUpdate(function(self) - if love.keyboard.isDown("backspace") and self.Active and self.cooldown==false then - if #self.text>0 then - self.text = self.text:remove(self.cursor[1]) - self.ttext = self.ttext:remove(self.cursor[1]) - self.cursor[1]=self.cursor[1]-1 - end - self.cooldown=true - self.Alarm:Reset() - elseif love.keyboard.isDown("backspace")==false then - self.cooldown=false - end - if love.keyboard.isDown("left") and self.arrowkeys==false and self.Active then - self.arrowkeys=true - self.cursor[1]=self.cursor[1]-1 - if self.cursor[1]<0 then - self.cursor[1]=0 - end - self.ArrowAlarm:Reset() - elseif love.keyboard.isDown("right") and self.arrowkeys==false and self.Active then - self.arrowkeys=true - self.cursor[1]=self.cursor[1]+1 - if self.cursor[1]>#self.text then - self.cursor[1]=#self.text - end - self.ArrowAlarm:Reset() - end - if love.keyboard.isDown("delete") and self.Active then - if #self.text>0 then - self.text = "" - self.ttext = "" - self.cursor[1]=1 - end - elseif (love.keyboard.isDown("lshift") or love.keyboard.isDown("rshift")) and love.keyboard.isDown("return") and self.cooldown2==false then - self.text=self.text.."\n" - self.ttext=self.ttext.."\n" - self.cooldown2=true - c.Alarm2:Reset() - elseif (love.keyboard.isDown("return") or love.keyboard.isDown("kpenter")) and self.Active and self.Enter and not(love.keyboard.isDown("lshift") or love.keyboard.isDown("rshift")) then - if self.LoseFocusOnEnter then - self.Active=false - else - self.Active=true - end - for cc=1,#self.funcE do - self.funcE[cc](self,self.ttext) - end - end - end) - table.insert(gui.TB,c) - return c -end ---TEXT BOX HELPER FUNCTION -function love.textinput(t) - for tb=1,#gui.TB do - if gui.TB[tb]~=nil then - if gui.TB[tb].Active then - if gui.TB[tb].hidden then - --gui.TB[tb].text=gui.TB[tb].text.."*" - gui.TB[tb].text=gui.TB[tb].text:insert(gui.TB[tb].cursor[1],"*") - else - --gui.TB[tb].text=gui.TB[tb].text..t - gui.TB[tb].text=gui.TB[tb].text:insert(gui.TB[tb].cursor[1],t) - end - gui.TB[tb].ttext=gui.TB[tb].ttext:insert(gui.TB[tb].cursor[1],t) - gui.TB[tb].cursor[1]=gui.TB[tb].cursor[1]+1 - end - end - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextButton.int b/examples/love2d Threading Example/GuiManagerDebug/Text/newTextButton.int deleted file mode 100644 index da2f3f6..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextButton.int +++ /dev/null @@ -1,22 +0,0 @@ -function gui:newTextButton(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextButton",name, x, y, w, h, sx ,sy ,sw ,sh) - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.AutoScaleText=false - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - c:OnEnter(function() - love.mouse.setCursor(_GuiPro.CursorH) - end) - c:OnExit(function() - love.mouse.setCursor(_GuiPro.CursorN) - end) - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextLabel.int b/examples/love2d Threading Example/GuiManagerDebug/Text/newTextLabel.int deleted file mode 100644 index 4424d0e..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Text/newTextLabel.int +++ /dev/null @@ -1,16 +0,0 @@ -function gui:newTextLabel(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextLabel",name, x, y, w, h, sx ,sy ,sw ,sh) - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.AutoScaleText=false - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - return c -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/Text/widthToFontSize.int b/examples/love2d Threading Example/GuiManagerDebug/Text/widthToFontSize.int deleted file mode 100644 index a36b6dc..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/Text/widthToFontSize.int +++ /dev/null @@ -1,5 +0,0 @@ -function gui:widthToTextSize(n) - if self.Font then - self:setDualDim(nil,nil,self.Font:getWidth(self.text)+(n or 4),nil,nil,nil,0) - end -end \ No newline at end of file diff --git a/examples/love2d Threading Example/GuiManagerDebug/init.lua b/examples/love2d Threading Example/GuiManagerDebug/init.lua deleted file mode 100644 index 2eba1e6..0000000 --- a/examples/love2d Threading Example/GuiManagerDebug/init.lua +++ /dev/null @@ -1,55 +0,0 @@ -utf8 = require("utf8") -gui = {} -gui.__index = gui -gui.TB={} -gui.Version="VERSION" -- Is it really ready for release? -_GuiPro={GBoost=true,hasDrag=false,DragItem={},Children={},Visible=true,count=0,x=0,y=0,height=0,width=0,update=function(self) local things=GetAllChildren2(self) UpdateThings(things) end,draw=function(self) local things=GetAllChildren(self) DrawThings(things) end,getChildren=function(self) return self.Children end} -_GuiPro.Clips={} -_GuiPro.rotate=0 -_defaultfont = love.graphics.setNewFont(12) -setmetatable(_GuiPro, gui) -function gui:LoadInterface(file) - local add=".int" - if string.find(file,".",1,true) then add="" end - if love.filesystem.getInfo(file..add) then - a,b=pcall(love.filesystem.load(file..add)) - if a then - --print("Loaded: "..file) - else - print("Error loading file: "..file) - print(a,b) - end - else - print("File does not exist!") - return false - end -end -function gui.LoadAll(dir) - files=love.filesystem.getDirectoryItems(dir) - for i=1,#files do - if string.sub(files[i],-4)==".int" then - gui:LoadInterface(dir.."/"..files[i]) - end - end -end --- Start Of Load - -gui.LoadAll("GuiManager/Core") -gui.LoadAll("GuiManager/Image-Animation") -gui.LoadAll("GuiManager/Frame") -gui.LoadAll("GuiManager/Item") -gui.LoadAll("GuiManager/Misc") -gui.LoadAll("GuiManager/Text") -gui.LoadAll("GuiManager/Drawing") - -multi.boost=2 --- End of Load -gui:respectHierarchy() -_GuiPro.width,_GuiPro.height=love.graphics.getDimensions() -multi:newLoop():OnLoop(function() _GuiPro.width,_GuiPro.height=love.graphics.getDimensions() _GuiPro:update() end) -multi:onDraw(function() _GuiPro:draw() end) -gui.ff=gui:newFrame("",0,0,0,0,0,0,1,1) -gui.ff.Color={255,255,255} -gui.ff:OnUpdate(function(self) - self:BottomStack() -end) diff --git a/examples/love2d Threading Example/Menus/newselectMenu.int b/examples/love2d Threading Example/Menus/newselectMenu.int deleted file mode 100644 index e69de29..0000000 diff --git a/examples/love2d Threading Example/Res/Parallax100.png b/examples/love2d Threading Example/Res/Parallax100.png deleted file mode 100644 index b4b79bcc3861ac70e50f45b1184b900e323efa6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233107 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�pUqP1n(GLp=Vx*NtQ(=5Z8`@n`~8}! zu3?-CA@pZL+$#xC856)i`rI?{c-um-Rs?XKq7`&oP*O*eidisPANDJ0gScKSPNU!aG=2N z9#kZC7@ZH%4#wHo4mZZZUIB@##d*w1MapOm7cN}rsbGv&$W@4Fiz&VT*g|W35P@EN z(c%0QTaee3f`9z=uP31wr2m|WU5R^#hj49UgWQMw{I;9}&pZWCVp4S2GCf|yTbITR zGrqqH&9XI1;wi|p3jsd5w+H7J3oynev828;(Esm6=fG7}+N=28=LnE@DvUf`p>o$+ z!(1tNfVAnc5Td#hX{;H|ZM4>-;BtzkqMb40R_}?91}b7Wg!^LNW}PGjMrrtt#XNz9 za4z?b_W=L?-@~W3w&26VL-_Ug-|v02W6(b)TDG_#k=lh)r*@=eA}#QaDVeRRU6VHZ zB)F^!F1c8FHb?HfhrKAU(8PdMQLqPXxl*lTL=`jrW8;iy(>loHBZ3jR)t&~wILB2= z!H(AOeINT6oFRPSG1oUo9O7uAg8-{Zp)wiJMdB>V6f7yZA{468eeCk()!}Ch%#;Eb zLh5XAE$k5bR$(*J2J=j`f}^Op_WLF0;4lO@W`ILmuv@j(Cbc(Abe=qO2HxD?Pn{ZR zc8YDSdDMcZ&yWJ3_8EBWo^$Yg+>q!EPyz|sh-_C%!O`AsN@mlj%9=r7&a5Yeu9Vh# z0Gj*Y;fIsg!dM$rvJ%+r}7Pq^eC?+c>>`Tk+PiZ{D5y>Q? zxoIVz>^Pl+KXQDW#$!Bo(y<(NBLnF`QpO7v!9i(dieKQaf+mg3R`c*5cqxjmqyJInhaeH>dILhxDv6Z#i)e{UE5<{$s#nYOzg+1x$^ zcw>7Te)^SH1}{Y$EpARqT`)>zh(H}PbZ&j9BM1Ab2OmtEeio%hasC$Kp@c0DE46%` z%PJ%UfN7=R`oRHo$p$l@iD3|sGHw3nnlb4a(*W0n0G)FgavKBqKy*hbIE`jI6pR)Z zoUwhYd=jc0Ny`qhb>Oa>i$(T3%cki8Z`?JCm~Y^-F~&d>0atX+%@wCo#fd^iO2Nhb zeXvTwo3kl=?C1#I+}ne{|C!IM{HbXxE`Ihb8n;M1Y;6p9n+HQj*3nqS&Br~oBemxO z{JUTNW%wU{=4Zs9(y~PKbXD~gtdI!Li6N4&gD5fT3w&dG{Tqb0F45X}8*o)I>Oqnz z*%k9Sei*ow)hQudv~8N_^1vEeXbDh0=DPebHl!W_Hv$p-*y5U|Bk~T}a zAEoc5YoTMwC5|Om@6u-KoqUg-ip2qsgNIR8Ihmo1&E*-`wm2SE3chgnE>yf?+0_O5AWTB%lO^WY?Ap} zuN3%P2I}HekSsBZRfy=wB(#XBjQoXuz1-DLm=dn7cauLQt<5e0zgjzuc(XYvJ>1J3iH?sgG0k_rx z85;7tdPF#8(25}-I7)}YR_{JjTl2)o;X>2Ek{OWDgIEiO9hqVfM-CUV#+FwXMMq1_}+tq#3!a}`39R` zav50;Dw7gbp5#oFg4#PcPY#<#c>Wo%jwFj%HMIqiCBrDdeuNQ1xzvwLr?4x`;WLiC zA7Tt>;;of}EAx4#e_@FjO{l7V1Zgd(sIKV?a;z(mWe^W0dYDqyK^p;T2rS+t=y#4y zph2t^=y7iGc2u;18a^DN;)%+H%{r!w!*Bu)DttpT2w<9zoVu z?DWw+h+RW^FKD#oV{FIHuIIQdm0Ok~Js(*E$K#@Pl0Xy`U8Q;@fY- zrZI_{g4efdQ<=fYK{S#;U2xo>&W&1E8U_-?Hr3oYSj2A7Y?dEzi^&8&8Up-3|MZ{2 zbByCj*W#;n4S)Up_Y;1^vu8ppMhdFbl4PXN#mHL8TxpH$A3GB8@fz-T9eC&9dw2GV z`s*}-Fvh^%WHNf7Hf@vcb6!4Y=`~svl(uTD?Nz-Zt?@5D^%PV}!B?+c zgFp7h8~J?Mn1PUxj)9qj0{Qozsw$W(1vlF^?Tbm=KYJtS_gbjp_@4B!wJJ$JCp5n^ zscmbOf@=ahM@z1VF#*Nu5cinWO-+dmVInA{06Ia%zTp0H3Ey$+7JSQ$QFu4{^j*Np$ZPI!i%QQ3Yaz}!7a_g!na zG?~Cn(j~y>;t0dXDh0oG=MIF3MUaetMB$udAKVw86Da|W$?h+_{4#73Ka~=FThR|n zK|9Vo4M7@OZA9|BQX00K28?m=H$M0P{?UgYreJ`rA;+jRC9m5OmsCQD(yH4NmoRL# zS5-B1f}-n~sG%Gd2`wT=~EeO)A zI8V$vM}=_)3VKvR0vF;z|G~yauQSe=68PVbdJq5R@BUqQb2`l{Q*uC3K?oX5nzkL% zc4!rdpg1;8;O%)SK+ctdyBiy6e4>?t%T1GT7RDIydZj8u>im?bR|gU6(6%j1;$A@@ zBH~;23c^VIv#J71Ly_cXPxZF9f9X@7f)~l>;yTi?Gj~KrKt6hcr>Z3a7J2u}IG5D? zOypI6?D}>1KmPXLhC`*`wL5plD()2QA>h0?BCD4hgvB(FI4tC z&P@ajkgS*}c*DPZ^Cmog;X02=i$XIyAwU<`lq(bf=(xvCr(6W`nGvz4j4tLqJag_GeD>W!6efi3B&-Di# z$%b7)Le`Vkt{d<}O{N;>HWNW>lQpux&a`!HL;JSccU#=Y|On3Tj7n-4v0%50d~w^_>SBnn`jq=@J}SCw33$V!5}q1)qHEG1%DHSiJ;toiDub0{I@D zC`(}V0@8#q&?Jx&pE2Yt?ULZ%-8pp#?;jp!899AM6eYjz(7C}R8EM76SS%6~ zq#>Q3F+F?U#i^Z37!>~J664-;S3x}Z>E2r>m?HhW6;$H*JDfTvI?Yu^25WIG_1*&1 z!%jpi^Q67&+W318x)?t?VNE4qZrpFns)92oOq#lGnx5fCUBhNn70c*YIL{>4-L~Dp z1c`Qmlv3~}8|yq6lPQYgUpYMbfd~w(dL5h7VvF_HzxYKs7828qm|XqCuYMI?MdKc} z245vJ^SR)7*v5_$e}-p?@K6<#ZrTaW5=6gB$}18l#sF`(;~Ebk^h$pu-e9K!e~+&{ z8uzu)Fd>W#;~aQ)ru5HOCk+cOL;TtM_u(n>9ed98>>0A}5X2X3!99~C{?h##W-)EO zhv%X$hKXY&DPH853E2Q`Gme~a3`>5N&xeL}rf=+9N$mEXw(~{GkZ^-B^NcfnUN2zCb1H6 z0^@@po`D2APk841SxR=3ozObQ^+QEh20y35I&MgpEVYcQs_JDfsmW2Q)MW5#7u6fL ze8>{I-}%JH0siV=g@5w7&ked;My)ZhK|xe) zn-ZNdedv+`)Vk!ME~tx9g{be?*-1Eo*SEKO)we>0ei92<$tHO0e(-R6jdkSky>wld z%#V~(@UZvry7%z7WRXhtA|^T|B|W7S+^=i+o*OqH#ANQE3JJr(k?iz$o5()t+BPPU zA^U#pmQ1ZpIuR7Pj_Q#!YvGOMvVb8{@I&X%!{7P7?@O2=D!^j2hW$w8#cHjDTj27| zopZ25L}t+T(<9Qp0Q~J^D@&RMO$8gxT&PIOge0*@^UHp34J8lPgJ!XtCI)ll(8q28 zqQQ}#>ajSWF-9pk6aa`gVv@RYiF?nk-6{n?_V(K_*QU5PrmSiE?yR@n$h%!*g1LI5|>$brt9cw3r- z&}iV8S_?N050g1VU|^>)E$XqXS-NNHM~wnAr3!b0teZe6h)OB=qu=r^@cG-f)1v3! zWf)pG+h}U#)qSv7^udEW7=@4oAf&|Aoj@UMU=2%J|C0GcHhLNXi2lqo&%por`@av) z7&zY+s8aFwdDT*qAMFZl_$ldxO~|`$+eW@$tzjcd{#xF#ir2AKhe6eXz6%mvPa6ZD zId=|z?z5lGyr2yWmKg|Bud1tMHyI+aZJtDHqhV)fr>9FP1+(}(X3l{}#lsQm=f$pr z_wL?JNy?H*s^YldB#9SYTUWNX;dpDSU&HYkQo$0sZ<-L`0y{*I=|J5tY2r@R+)^vI zP+S;mp(R3A!5Y!|&^QN;Qt;{f_mfj3HHu2?r4h?pX+-wn<;(CV{>UHct!c@@7`Qqd z?TE(fO&#Qj6RU89qE$BPwMwmQV}&tbBjBtI85i@hMBOwi;BVxyQ!yxQ3|#geK7O&+ zI%w*;WQm$SXHnNH0HVyY((s>uZmICji;Z6Z{E8HK`EHjEvc;g z4B`*MbzQlinG`5C+BUVy@xqrxB@IDEoHir@lPHa7BZOYyWdLHZGX2b&!d%13!urm^ zb62jw^A|6s`6X8J)2@R#72EJ00%>=#X?Xzxwq_~gob zK1d$2j1pDTg!Waofa^L74$|Umm@O&({jIKpOG7Kb9_h{a_DFY1^1RNBnqRE^)mar* zg<{3Zu^^gR&+jR z3NR%OWtIX0qJVuC=n7VL%c_F&ZJXL+l6VSM2uR_g*LQ<~C~#8+Gy>q_DoVla5a8W2 zXNHGNT&$agR;Bko&F>QmG;UJ-UJ9l#BZz9HHJoai-Fc?=p*1ejqvL(_!voHIQ-7V~{coSmxLPzHT0gic;2E z2z5v*YDy`X&ZdJ(+!3*m8B3&)-kGg0b|~r*5GuXqd6XI+h|Q4C{|B$V20wA@R`&CU zCX-~J%=HYE;F^ce5G7cB;%2Y*gLGgbkdtCW9GRbTYMLo9WkylnAwcK*U@MK%@Xxv9 zrQ%V!6A|K= z9I&pQi*a`1+)7rP#D;C9;HTbs2Y&pu*Aj?Sk1>@Zwd-CR&~fsZ z3fibmd;^8?qQ^W^ck&TUQ(!HjE2M-Q1^eAnA;KLr1!V}FXkoMFx z&_oJ_F%CNK;mUjtpMU)EWYtFxNEh2kPfw>=K+po1#}Kf@`%gUuQxZTC@IpV^uvTXi z=T(^DDy87t_V=>DmN^ZP>Z)Y-$LDc4o_O~77|t+yRfzV3snTLC_Cx33w6*ZmQ%}Jb z7kS_gccjhVkqXK)vxt>Llgl;jq-kz;Ru#oE!@Z znmn>xPQiZLq@+IhzJi$rTy)DKcN7mJ}>oUbt#Ie!)3dX?2P{lRG#Hu1k z-zo*_`(Aw&zWc!k!CDKaNEVQ}l*L2J5dIxS92SB0B%YWW`Ww20IM)>v|xfLIcO{i1e*4fG)gugDU=` zT?e1o-Gw(dHhLgl)Aa8{a8bg5K8th>o|)6I)8hAfMr-1}&Qf5QGLxMugq|f3@2^30X*8!mYLF&+0P8feGtgDE#iS@(YAh5O zg~@Q^q1e)_ot$t;!QDFt^KJt3rU4&0;U&;hH<=X0iEw-~38C1vpp|{a4H6z{MC#_kwOUY4qMTKSIsp|Yw?)1;~`xcop~Qp|zN#~GSQKvQ)@DjO;#9HjyT zxzkMnlQ62WP1q|lM)}0ge0DxhQp;lraw&=AVly-ApmJd#jN(G*fpl@yf-PU8HC&j_ zVIC=9HQ8^CkSuGhA;d#4b#A!yENl51W70Y_+CWVd{=6U~Y_x{Q&z*yP1{UPc#z!oJ zBrL`gT$E9EOn9au*IEe)>jXix@l2?lOQQr12yDEEg>_js$C1Qk3}?d&#Gp0I=5ukM zi=QEM^WKQ(r&bEoV^sz4+rJI}hvE7WyU&a_{M-mKLVe4=jKeo`O9Rpv1vMFj8YKd z!M4KyTcx$!d7suO)qmy($*xjxKdK61=L+d4?>+uFywyAu2oG7oVgdnpArzK?vN&1ecBDE|9s<%&#~L#5zf|JaYGWTLb$ z)814HZg*{Q27iW8s}hBBIt8s1oQlkXP8juN6=yuaDS%Zg1;%^O))eiK(Zba5cv#pw zA^0rrA%v8K{)n|CUti@KD=i$@A&S1TIH* zj3;g651)S?UYyS}ee-iw)yFzgWL%g`vgcJ*6;xFiI5Qe1aVx1v>IG!fVXfeh*m@@+D5`d;HO!c34ee6W&TM7eXu^j{75$o zrQr8|>$l*W&piiM>pJ;!C*AXckVdA+rps8UR`QH^$SEPSl^B(@Ar=QN+y7=cue)xys z`NP9vds|Y%GtqHQs`wWpR-63uCX5n;0V7luToRC6vZ2LN#u!zyYT zJloW%+IzwGi5{OLTS4e!H3l4l1D!Dm(Vpg&#w5&!iR=#!j5MZihkK&2j?R7yrQnc0 zFRkHbRe{nPj+!QQtTGNXu?95-<0-yY&}D8lx+M6B2%b#5YSPxXO#QILJQ{YzbWx|D zvv3mo$2qumZ~$ir_0Jgt=dFcrJvhi{w8tUzN`Sft%4Wq(rUx+;qLRjuhH31lt`8B$ z$=Ee@4`#i;vC%s?QfyRelb3nr8Ucrzy+5r}LJ(p%pd>4d*aix0m9!&r7gX#vqCFf5 zhL1H(0%)D&4?eVMgyQqL)N3KYKlqz}6TUaLz43u~a-e9f2D5WbKm|si0%dbWvY1dG z7$rY(1LC1RkFAcpWtevctX!hbuf)BV7^aiLi@`f zd;s6Ov9SW9vZSD8^2XFyg!>qzLqaJy+}X)!W%dN!ix50iA@{Bx9JVDN3S*Mzd58{V zn#f=q0k<=mOkja7UWkQ>^2mMXU^2LlPh7kRZ=F5czb8t+BE?M=of1c}P`>Z5R7$~d z9FxqQgH}lJW`Z5<9!U~#)VbTXV3dN6QA?>8d|>Y~cn@v7XU9}b>HdClGU?my%>LCA z0QNd?a0wiXxCxpBP^5cc_yQ4VI6~2;f;PO<;0B{0Gjv70)-=g&ODP49L@G)f2lZa? zhQ*7j% z7y@)l_1@8+i&btm$7BZeHK{%*&k=v;PTRtMU4zjY_PQ=*T-MrD<-Kz05K^wBMNM);I4LD0-`aQ-qM_z9=13SJQWjwfy19bMMN5& z_kIN|MM|93usxfJu1(%r*zdYkfYv&7ad1D)+KJdYZM_@N27l$n7vc5Wx8dw;me~^H zp5EQwUIEZhPo3Z!1_CD}7~^~4QoYF}hOI#7Z{-bAumVZvpdSiNFog zXN|S+d<4iE!OnQvG%$%C6g5ebGs#tJ!8ivkN!S&U>E?ho3hwM>M;kadndCbCWDmF4 zBIk~5x?js1&ZS~(t`vORnKRHP>Q)p#VvLZ|_;W!3Yu?zktc%ObC0xNZP0px56U7ix zy!C?FRfhkk*c&<%i=OPHtQ)`{*!t)U+?tzxOiHqy^ zfA(kLfBX5LhohKX-i^FHx?yL`IgD35Go|34{qFC=7vrLIR1=pUCZr{Vl_ds$+Lov7 zJ!#JE8CAgwS)ep?Usc6M+_*Hr`zVZW2A457&LU#rJlXxSk((8S*_0Zi*q59V^FaQzjl1e&^$lP;~{j8gFLe&%QL zR;XPa%rq#{3XpmTIAdUIxg5%t8k4$9e2y+vavb}TB@@!2t2I2ey}kNuYvGBug*O)q zc=^<+RK;&?Y-F~>Co;4l@2d8G2*_mjlL_Pqcp)u-D6@_yK3meQ%LJYZ^fuh@RRQ;4 zjZM`k{~hihPJy|8q(g)WiB<~c?7%AlsOgNF0&WrW0g5neoXN~G}7 zaq@<zBf=o4!txF5$2BcB}oW%6kK`zfd}BN3m2fNLy>Z%nW#TjOQ#|_ z5BSsRmSI2 zoH-qjx5TN)O%ntAf^;yrDT2>}<1nZlg$mx8OyH?#uCq?aW$b6qUAdZ7i6I2o67=N9 z-kk)!Q)mU@l5#ed#^5ZQ8%MXF1Smmna8{*QDir)d_s&b!IIz z_JlRu>3%)6`EIa&alDw7#S&VV8v$K;u>%i7RtrUE0xy)i~ z?E@IwnC>aQDO0$<${1LN zUT;5>=#7b0MQ~9lPUQ+_V$K+NWHy6St7q2#;2Tdo0WZeG!><7j;Jll*$QnXx z^L#!t;w&aTXqw$yAqzG!BeKSdbc>?e6=}_LguNxLsO*4?fGNDs%{8dXrfFbTDR}JQ zAb+7zwiPSNN24q&)oGs=f-iqYI#vyQlwgcW%6z4RgaX1!v=~?LGp3bFV{HodZHO*i zvBHzq4n34+5lwy)0}(BZ1UzYlNr!S$qVfT%0-C;5A)%ZmK4-0DOJL0y5=duSc;Cxa z(k$K>Sdh8nNv=iWtx9WSwnl21cR`Zjkk;_mo_#i%U>L#sU~_Y`7wI5}Df%{3zQ0lm z9+=H~j&n@bx$;#e5=4@Dx-PtP&^1kFKGCwyjbX|1R;W{}x*~H?!vZ}5NAbOOys|B< zk(zZlN(NN}v7r#e_B#H|DFr|J(T}EfIsXox+|zNDn20I`mo8lzB#Ky}-c}0!$rrx} zcMI#QX>w4aQwo0J?YCh&#&&Lj%R7=2whpJHy-ju2A8%XuoiBX}o@ILEr`WiF({HJ$ z7LDB=F5L`BxZK#`O90#sSQVHV^&Zo z;%#W>+&}|;tWrurLI9YVLN&1&deGJ_=it=Fa`101O(v;;`?rM%sT&zCAh zZ3;HMlGJK%?lH|~g!nTQs5z;V8Fld6Vy#+!D4-Vl>r}OF#EQ}R0BX^TyV`Jc7|I#nPa}np!3W8tMTZ78gF34eBMcr}4 zL^M(R;#=cvUb8~M2?+1`bV8CEJz7w4W<(W2mLO7fPMXwU9PihOA4o?lwHkM7tyAGt z71k%}afG_gWW&!W1^@F8{}41v!KZHBf+x?N%kWKuA|sx;RK!gYnQdz=bZtk^NOCdG z!7tytm$=j=BMQmhv8XL8IMb9+C+GdzI;j9sTUy_w&lHZJt`Et7`zQgmHMddYYYstNU5rvgNbvn({<3s z@rgwL@=C$A%}r?7rYPx`f{je@#%G@41OBLhN*4ui z5LsI4HpDT3E$HP_2QuDPmA(?)jy4`QA!mp ztz#}zYP5!yP=lyy7$!?kS_}XD`+s0Sm%$32j=Ct#6FVAdbfx=uLEYO*1~85bb{JVE z*9(@pR){C1@1ffLm$iof@TBPXz(7Ix&{+jJZIUV!MVy*3C$7;SDL4* zp?&q(yn2rmPAC{eu?m=kWr@5oaGrtZ()GH0ZtRqTpMK&A*p5Ktr*7OJBSkG9q*4XU zlaFPjzp2V?u75>Q0oACVQ%PVR}{GAQ&p(a@|O-4+VRXW3?UtY^tw^W?A`r+ z_~}o5DwCSzi7#H0(|U!J9Z81UXoH$@U!7mQcdemoJD9gENesrZ01fLB;lIB^4yJ8m z;2*#IG8~nx$sTEn(;P#c}?-Gtd8iJ~qfl)Z&?0q95dMPf4Jm4Yw5 z_8KhMc$6Nx$Vb;v69F{^Ojbyl%)E%lj@p={u%{IROBZ4yT~oW(!i!bacQ{x)%ZeYf zl5?)2(2gT)0;LqRO2OUJrw6#E#@cLb#fzfFq<2>&($C|qEv}zVKkW4GZbFA*Htd+_ zh*k;?qz58obe4#%@J+bw94uq?c81McdE_f)3wfo^K^qeT4(Ko=MiZIsq_zElr1R>GYX=Wdzrhc9 z{58pDopaE}1;(j$j_Di^4p1W-GT@(UQR0zPmNr6wOZ)p7D!-}%G<5^s`GHhwa%aMX zOL|vzNI{)0_TW9tVpZHUHMn>$>#7K(^cf++Tc_I9gaAiAz(Wt-5)UTc>f`^vXA|`c#<4$FH`S)EvK~jd#qw^l_o;d^4C?I49w$ov_^hz^(b&q679 zX4%h^TV`cSW90xu83A=(DfqExpM@{H@B-YXv4*Tw>IFY$IAloSmL-tZ<%J6^7~|j1 zBYjyKJ@#}{H!3KVb)^daAN21_)Vi&$ogU?`nEDWZVd+pDnIB40r)Z!0iN_x6+YFLc zI;oH!Tr83;-TL&QLj8@e$D4yIEG@g3G=6H2Z7rfD;+YAIXiYw+%50;iRNbLY>)*(fWil!9w* zmsKX(7&xeUH9O31H=@|dzxdT(g?9;XZ|pm@0H#UVzHs;j4{wnCeVbC-qU_u zZ@=}r_r%?zAXr`aLU#~DR}t$^#S;fu1mV6oH1~Fxr9w-y*wj23EXTe zwZTb}60pO_6eu+_?cryU z0K)bo1p?=`k6}hGkacDYz6gP>iGuK1{zbb4&>&_qv0|DG^xdN`cL+(s6qA6C1+>Pm zD!-@V%rQ9~F#uP_udI7SE3Mk_rt5;>!>r(LgkTL^7@JgEK7Q8ohllXu;o(s4T=hX? z9;;jgxikb}8%W#Pv(`UXh!X>~QgE8JPj^`5#-KjRdsp39Y3os%uFvIX>BdMx3dHP{g3@vzYn_(zMsf;W||W*5Yxj*+8=yQ+OJPrE>Z-B zM$-~Xp;B;~I5DoP(kUHq%>J2HyvCS*WXV4NA!-6u5X0j0=1B<9wC(ys4?8sk?@*K3 zye8B`Oztv8JqlpP_BXW)<%*kvdZlN@3JTFkaqHO-;F~}36L3>_&vSuYMb9-_+*Is7 z5EEfz2l&l{1NfZ&9;s$_ zm~|r08)LFIVj$)Xe1?^QJ>m=xW>}XNtFoQxYBRi}^dNswx2%hqk*l zY>@T7xmdsp^k5z77Ew88jyE~UI`m!^>3MfP&qQ8o?-OF$MD2f9=m2B}LnKa3Cfz`E zWy(!W3P47s6nvy@;otnTe+Dm1rvvI-7F%NM=&C9K-9){1EQG3RAo*$v!dU#= ztBBzeTYqXG>QTzzwEzOCy*tqiDYa4C7LJX9mT@*qAQ*hXZFDLca@F;y^`d3AuTCj= z^V&7|*o6zAt%XOLCZX2R>aMCPkrF{?>`JLb#W>rxu+I*qOu33=^;g<9wL06j&F-ge zTY{1_$>>EVk8%q~vl(1#+dgwFW%x+N7#JtC*~YxUX;oUondx+eix4WhqyvCpNERed z$N49s+9{raXYN{SsIBdjop>LA<5zwK-a9@XHCGvBRg{DtLV&L8a-oQVANhXFka4{{ zIiIIzxh4GmG6Xn(`SQw-nPmGm&f}lJxo`on)wK=lFxX5(o?|`mKD@J;fetbhB=A&8 z(8al&%9DWsiJ8a;8yoO{{pG(5Pt9gMb!Iw+t>t3W4%v|^iCVz&z%6nI9s&dM(}iC9UD@bLYfSW{6$D z52A(z9TQMtpHE)B3fH`c%V*DKossW3bqbCbixhuc1S%_~V3P@PEvl+#*RVv2jvy>q z>!Gk$Io1cMXOuE)P5(I;maBKcMTjW150jT2DQQFMGR0Yu!yhTVlvQ;1=m_3FJcOVP zbR>bnr0p&%C=kJJtp#oR7>3v{uN1uh@WXJuX)?)K+Bxj+qwiW7trKV#$G+R`H zy6EK%kF6%>94uqTcWycxDh5dzDzBn5BBfOjZ*N@!$Y`_TF|M*sNpJ69Fh(+L~Pb|Jpj8%077R>uLwnC4!f=c!_b*y z6?|%C8Us%|2U|uy^zieWLb5d_vpu~=;~iUa7$~z$H<=Ha0ov7)mK`Rj^q!iK)9&!S zAysHr*BQkt6EYgmiSmt$U9OIR#;8oCM9Yz8d}HgA2Eyrl4o?&R?<-2d|N3YDEWE;i znST(cw{c~>Fi@sjw|1nUS7o@9de}k4!&52v|NiB_gg0h0I2V7uwMJ)Pz-&=UbR8>s z!;fK+wAQfH8tzQzqFD@LeCW(Ob!oH)t^2i!$^6yLO*lji{`h;S>WJgU4e#NPz4#*h z=CjXc-*ahm6Anqz#NzKm+57kDmeIIe0+L$H(k4BjGHQu=fs3?@(z>S#t%#vW5ue7 z@5=CYcS)HlBCP8Xn@bw#Xq$X{I)y!!O=O^jvKNS!)t$D2zKDstSx* zW#darkV}#3fmPX*&Fudm2Mh(64P4oRU`WD(3~i@Z1)y3LD_0z4i8J=9TImz;WVEic zDn|PK8*N(@>?vgR1JGn6RI1k6WG9RB?pgpZtvd)cL-HoO;1Mg*5(6h8saeHN|G%M_ z39?pwT_*-g!xY{WbJ;5aH~Du|M9gSH;z34HLe76d@l6YB60d&}6Bf_bR|)ydwJb1s z*2KHxZqvYF2t5l1Tg;q=Bj9alHJPa54OI3PR zRRe8?SUikVFHjIc69*(j8#W_iD2mLk>zIud={JR{p>i&@M)1a7yL1VzZf-)TDwsv& zq_MWIfXID3&Z-^fhHg`m6W2h>RoEP9+`wr_OpVI177DK-jMi{_K8L1h`T$RTZ3`fa z1gIj(PpB$5?mC!~MZj%N=hkM23{AeSNAL2ncPR-+@C8~k!x4UP)N6!_mZ9nu@!~q$ zt}F5LLLJh<-$ft^U&C2zka4){I)HKg$if$ruGA4B?|5MJgMVLe*5Vsm3C0f8cGFms z^Yc-|L3nO`P|TA$)WtT|CQQg^@?s2h-ivciZnG&Rs2vlENn$&(n>VJaH%9-XdyiW< z8{-BPJ!*)9?PSTp>k*RdEhAm3837pj!u3lIdXg`CD7eDmUVC~r6_a3U4n_CnB7~%@ z$-N@ls3tazxTb{8c0E48(s!dZyt%gv4|oqgiWAYbj!1PL52nt6CL^>{hlgoAI8eQe z^M6e+5OZtOZ2FX70#q^|*`LqSbJ(wk%#aW%X9#*-ES3omf)vh_07kK~8Kt;t(`)q8 zy{UUDa$0w&2d@-dN2zeUK4Qs=2Xt1s3qA_nq#O7ioCLf|yT~q{A=K1NO@s{Ekk*|o z*j7^Q;q!$+Ew$o}bIA%0zw;^?@Q-bNl#p$U8CM_7o}16%FTDLWbnKuuEKuQpFS`z` zF|h4DeC6(4*bpiwDeJ9cHdmY>G9!dQkdCt$T&@$t1VdgBDmP{3FwAYKYuls_wG{KInA0T9WqWS_$y!j zGQ2|GH%hIRbn4T{DuR%a`Sev1%Pg5QqlE6?{o2>yBa;dEP!INuDa3R~eay9n3B4u) z(hkHPHdVJVp3c38%S{6T>7q)(g%~%-sIY;om#h#|D?3!FOERSbU|RRU={1@b>;9lP z7RFg_vzpGEr>Dc<`~ne=r?egV8mfwwxME)SvqGo#CrNd;MwtHY)RJ^arWRj``Nq}V?Fh(f_-}}G= z@W2W6(79A9cB~GXCaIFGGmbF@>;hN9Gt5erw)wSMwevZ(C(}5HAhUI?cT9e9y>8BC z;=I&blNBnb+cs5;E6;cjM@<70=G9)Jgi0Nlu>@@~Tgcdtu8AG4y7>Dme9A<`FU^Vh z4_?oVCCYn6g)OHx8gk|g=%xKA)(p^+=Ytz8W z>EaqfAsU;xOh}uFe%JoyCR`>9F<6&X)`lH4&KL;R!UoG?jB#+KZDCFpNx_t{>owlOzxbgafu&a*YU1TV!*-=e?9^mOU$~&Ea?*iTL{41rO(G1sgWE7soSL18TZ^X z=0HV8BbIfw99z$ndTE)h=8pHUur71ns@eN?5!XV;fb`n9oZ7}zu`;h}!d#o4v@X(VW3qFE0V5m)hYS}4jSc0?7? z`i|&wVEcT5Bd<(Wx&OOMO#@o5FF5H4CUq8wC&jt0gF8a}LojYy&n(tc3{?pbir=?^ z^LCxdNXFhGDAo2?1*gv*T$uxKO_KXV0a8oq$e zTKM(v`YzaF-+`M$dTE}_<}#st6t&?8o5t(Q5A59#;KFp;JAo+$-}8x23}%oEYvJ17 z9!!*iM-LA(x|9*rqsH9Z*G&zS001BWNklGD``7d5P3Q5msv5Q&?QmYtdE1>*padjvY15ZzTw{CnfN7`y0%(cw6R=@mOxJsspwAoBr*LgPPCBj!i>m0kZ znh8*u*p2oA`-vXpV~Tc`B;ftO$4%K9c!yXA3RaHTYfE2P3b5LI&WjaGSOCkkiZ$<&yc!c2&XK=g(*Kw!ONBzw+77iro|lYPtI5~(v>9pN}YIE z&;K3)GL5j=I;#2>TR_-$&=C=CjLB>V(OM2EXPK@%ImA87!e%i5nu27kw2^SZPsnCY zEe;~)k9=&Ay2UlT3xUfr^&=cV;7eP^!$O+h()-HXw#Z>*$j1F^@4N$l@#U9KG%rrz zmZpVAN80D+1g%q!%KgDRci_XTS5so)PY}TIGk)^%$6-OPVG)tJ5`|F$h*?2|#ai1- zD^e;?bYx0yS4zQgT_<6o4ext#pThO-5lPl-ldeY#Q@v=?iu}ntci^FtDj>D!WNkMN z%Hiv4bGb}OXsb0mwY{BDL1#+AA3i#Q5S0@Lbf&J$Iyb14C;`i));I!nGg1eDuPJmQ+eDoadXNe;ZK;hNMhYJa#G@7Y zlcdmbg)XDSEJ*B@Dz~4#Tvf2NE-E`ZF}Vp$raBwzMRz*QfUj-Stn@~RswPFdE2ZGU z$ppUk>Z_tj?7BXAHaehf5QksJErxpVOB;o(}q6ZPxm z%3zLVfm#S2TF9V{6j%vzcB^T#ITU8_9(m&ht!+s~O|lCtRX~>j*gz-0oP*!IcP~Aw z8{WhD0Uxp{2CS6T^5>*A%qJ7E0;a)~x9)JQeCL@n@XYphUkwOt@~paL6`&!geD6I3 zqt~j6;Wa!|*Kl!XXJocp6ETJ+JA_;m?a^c%`N;Xz1s9}LMa877>)K(JtrYy*uY3jm zSga&zGWV);@GY}hKkpu)k7j|XpwVAS+Foeefv0&@Rd6v`M-pJ3b;-|R9d3Y9)%-xe z-DF7nRK3+rwjMQOp~xzKL!`b|xy3I%w9xM%OX!S&T@(<){beo8iNYIYtZ)FTW|Y)= zjcZ?a7-*f^q`&*zbMU7heKg%`RiHv{N70x(ksWqusIIzHz|5voGG|?}a-^B;)?xu$ zger`253gy1{0`EjXfl>6O{L%g#vVccjIr2$-*uiv`Td z4K^WU5`I@$z{mC?wkoF~z|(@3G4&Bfuno=jc9nvM7aJMiL@Nc$NZq6Dn3QQ+3tJ(; zPrmvp+$28g)G%d2%nJr{wJ5Gqa*D#uam6_JZ@%&sc+?n}qKY32lBeeL^c~4FTq)S7 z>jXH%;4lvXtkRinr)2oSQTd2;c0@LIH9u_!h8fb>0PznQ;D)V{*`j9$yRP%FJ)iN8@4m6$>(?WCZgc}^j7?%BKw=;X zf#3`h96*Ag0FeSGfwW~w04bV`Wl|JLi?r;LY)h6!SyhoTXfCT1hNViWDyAz+QZa3p z<0O?TS2@X#xKgQ=A7}4<*IsAsb8qLzE1c+ednN}rj-_H}hQZQ2dj33I^y^J41v^OQ zyG8h)gyyR{ZhKuf;BZG(O4#kGo2G(Yv)K%^Qt^C<*J^Dnrkt}dttyUk%Aj!Li;75L zm{=P#0-Skjt-*Os;IsStDYuYum{Cf_#2^SBP%vD~un_e?WHM2zS*=h-j2DgZg8MJO z;~h|<2Z;}$AR!nQa-e-!&$X|#?tHiXhJ5hC1-O9R!P?MDN7wUnH{T3raoe2$>L@UU z8(-Y%wX;JoslD~1L>Zp+4sX3f$qQ0Uol9ta$Gw+*B4sKB?9XNqnYzwTg3^rNi2t?spE3 zub>T5JOchVJVrQPRXuhI-WT|JP!u)p3gzb9lvjUfY=UUUpZAus-07wqKl3;f5A%3c=lHauihq2DuP1?Br^*jDLViiui3k1`I-y@N~ z#^1vjD3NGXE-49r_hHZAsEfXp=}y}w0$dUSOmXs86Ce6oN?2G6RavpXL&sS7ax%Js zdh5`hzwV0zV=Xj{DNK0X`J#Y#z3pwVqjijJtU~8Nd>aV?cQoyChHY(+J&|ZxNZC=? z!hO*yvC$ohn?1EtZv$SU1hc9tAOBR3LYtw_BFRIg;TW<6%z<#UR-km(ifpXy+L9US ziX$0ai59fTw4H)!JPqcFiWV_KDE#7-O2M|Dt8~dpilA1g-Pz05tYf7NyLMc^Yq04Y zOpv9i!NU4V!Qp7sr(R^{`rQ0H9<)TLKuHOc$(S{8D9NGTF#)C>>XL|`&;T&@KHLGL zfd9QFG`-1q95;SEWVMc31%cvYyrQ6Ex-K_OritPmy*6ttl*pjQS{o~pAOaJvvo!|( z(Nj;sG3Q{Jn5h6yZNu7rZLZLz3Lg1QYe zHG&)AKv3I=4_*$?6P1!FSjxAe!@8k#8hqd+9`@+q-JVY2JMVlar~%Y{4xxP(CB;-M zWjr27ooX8kjWT=CS5=kJfAEMU?E7fFOkzud*&$M@L&<_9-T+P0^x__!FHc4z*lwD@ z9R?#MoODH8FBIL4x&HLPHon`bl!D1*oPcjxa4+rlq0tHbo)6Au@V&RcJ*()387(>{ zJl($^Eeo)&Qwn`=^vftFOim7hZn_Bh!3&vB;`zQV<z;(QVWA zl*pXF!EIf`iK2)a(m_rSf9P@N;C$1-&OnBL|ISWqU4+90XM-j7zx7gJ>VT} zBjwt^+gsa-9`Y66uCd16kPwTKGInYzQpM0~pIGw!q=Yl`MUrVAVXRYG&O6!|biIV1 zk6gYC`$E8@i!C{4H!ZCUTW>3iM=D8+j=9cfu3v}0amy`W2Il?N1Lck} zTwF2mcyBvk#51yezjQ(42RXca)%;0M_k;XUI{+z6#bAds6SrME8 zRk{$@Le;f3pJ(s2GX_qQ%AW&mDXn3nDBuqtdn{?47U+Icq`39f*hp(Q?JIRG4#laE z6@`mk!=KpOfq(Lu&ty9m4LYQ;hRAXxVUi@4YRd-z*p}At)^q3LI3hg1Z6V-~KlLg2 z*qL+7t_zJ!99VuZS;gy2OmDW1d$0ynXxv|@j zm|66li1$dc9k!!Q+q3Tt7QPdN7r~=Sj5iAZUlXd^^`eB2o;(TKuQOu|>?s9LczjMf zFbYB61v#})kOV%6tjp7o{GVTYEEWlOnYT z4Wc~Qiq_(B2BBJHX-Vi{No01(?ELw|LwNu3<2~9--(*B5U69!IFeY;IYj0CHM7zO< zF%?#MbT)&(^Nx3Q2_JslgF$WX1}b}*p%Dek+@WO64rt`#=P6d0aSRFJ z7^A>hmog=+VZUQRBv1_jY7PPAg5S5+8mzO>G9w6@1V%mkfuvF+iBCCzAjb64L1|d> zI|b)TN6d`O3T=0h!T)gdz3~4H+Pfj4OgfrnDw7)i?LaDcM^Qk50F%_2ve*4vp$M2@ zEHY?&{PXJ{{2+Y5A2xBc5WtUh4R^F{M}rdrUPNr398y1w7nI6$)=>37WW60stgIhP z;#i3Hs6<`~(G87&`Ff)-f(f9pHJ3yNahs^QP6UA{qa-B$FYWKcUwh~cP$3z1PBSF_ znSzx#@JLyf>|v~ofros?SQ-Np9EgyKfJQf=tjdJ$@yMl1aN6@MX<*U}iaNNmDUTvt zlvQGcf@ib_wf8k+0<+mC@5;JRgYYX4J(MJT7`TU@-;Q&=z%3cB^~v$H z8;h)QVB*&4xzPyjKX)$DOInY}-_si2u)V!HpnK5=j)o}wylTr@xL%i$tIWyMChc*b zTqapRLc*?+vsD=x-0&PQ#nU+l7FR1VB}n^Ca0N7 zArbQ+-)myl(_qIH4Zd&Ty28C5GM4IfUKrd)Lz1^}U+loRrH9+W*3i8JvP--__~euD zFxop*d}+dTYd9HW+vCh2FPu6B zKl;WuU?ci8SoS)Glt-=B@ZQHChr`U8iwPg;@*dU zFK1JWZ_Nl!aTLQq!93<{DzA;smsmum@w49!q%Eu6-JM=AqM1z3o16rWZIAB6t^8H; zs?@0~0kZ8&n%46YhJ1B}cg9@r=_chH*!qE5K7`?2{PzW0SMBpsNfgA^DQ#8w%!F9-(4k3VcMs9NrnY{l zI77_dk`itaon0+12IQJCBwWKs&Yp!$PYJ7-Horuwbb5tgOwKIG#jcNGO_;cK*R)O6 z_BAo=5dx0kq@1w768(1cEP}s)@uEOfE?wg5G6Q@{ipExq^eQ%4sLCn{08uc3srq`( zN(k{zb)c1Aeu41-iWs-3D8L09*N4L|u{ve=-=Rfy_TT^}ZQJwOrVnjW6dM0&vCwBWrnab3f>j+|Q29k_l!AMh{G9?W~ZQ<)|_=fu!An0^tv&H+wMF#FppL441kZP*gkJH1MnMeIJ}c8)XAY z)pDbi_!&wqy}^TyH3FK^QI=zcwH<@ttV>DK*Q>ITFiqC@1aC?y;Z7;xU;fb_!QI3? zY)Hk5w$f@sOh9~vdDL<{3vGVz#X)dWs;g;=bO8q3Hu_WDmWPcJj; zdhPMTo891j60jWWxZlxrDbWbf`p;AA0z(;X2>Q8y`-2~ZKSAj5Wt{Xa@>N|Llq}?426EsYbE8wPleFzj z&my%XTJPZ=?Mn#{UbzCJz!gXFD-?_+>0%`K8~=>wva{G$C=TLw|1{H?rPz-mQ(#i> zh>*Oe%!_5hNHJJ=%%%Kwb4k$wN<7jYc- zphia5LFo_FHY4F0_N68UK(!BeC)z$^K&;Tc#x%^Fz>*9Vx#p|BUFV{+W6phyR^qH) z{u+3Pkn|lNji4g)ble(N=$;qG#2F|aCC~$Nj5<=7))o&U^c^P7!OS_3Xe`;gXT)JvZOb+SrzS{fmV3rQW) z9pOCGbA`p0PXw_(gGL8E?Jy~&V9%MjFEy6MRtm;d$+y`t5`Tq3&>&zCb(!(riRW_= z6=M~yR#+EeumM(B!wAohUAq=R5b*~2f7?aQVIsp#Smr{&_dof`E(m%Q z>s$yZNTuwYgSKrWwJ=nwiU4yQsZxiu&?DN|&%wfYLJ9$w&!30J^R&-2O(Nl#%+kG9 z{mehZWImglyVZ41Go4=N7>#&jW{)0Nm))x~A>coJ^PBM6op<(HsNI~-Q@0SlMP$}s z_&rYb%i&fiHX!2s6pV^{z4fmPNz$={6kz(tzx>N^ThoAX)|(ThiCa{HG<~NqdPp~( z){@yE~QV)vV?_F@XJp;0cW%Z>3>S4;B#+y16*+ql-5zsvO<;92H^sR zOgUteP2r+ND+Z2X1SnQaDvJK0cu(7QKp9VWpom`VZ;a=i9FI9kF3^qIM}d5|s-g7> z%^rFPTJ`6eg%Gf)>)t~Q8-H&!im24Tao>ILnX6a3`8NUmC~JD(3qQB;xlB^7WUv-P;!M=$l~Nk5(lBPIav1cL ztb?%Ly{+k>IgwIueSd%OcXECcVeC8hdJv9@5utNUt-z-dh%F72 zS5Q!I0PW8-t2G?Wj5OJ<(hyZ9&N{S)&tAC_zrX`$&%*0>cj5Vq7h%t9*5+@lj4eMk zV1;LuTB4{i;!g;8e*b8+0u9#`0;tv+uI%k4ZJPyd?J1S$9aHV?kT5jJPBNf^Oslp7~heq7QSb|`k?Q@wSuhV<$X zrAjFS4H4WJd5J!JCs$fJCxT8eyLkIy|TU&z) ziBidIS3-u_EJZIT>%_8X`R@5mSlSt0FWjgG3y@Hb{Ys0@f#mfQr%u5?eC3tiVNP4j zynVDq3T+Y!Un%D3XU14KzP$~{7mM`wNGC^<1gmD)Qa!_=tu6SKC!dU+z+AjKRaG!W zF(k%tDdEnxjg)GR#z~na?7dzCcM%Gvf+=cB)H%utBn43$nZd#Y3a-BgtAk~1`T3jv zx~(lZH=TA5B1oR1KvELoy!L>ExFDQ~0V4;JvZd?h9A1N+qXUH3e&o$>j_u{C5b)^X zAq&D%#242X+b938XrFOBZHKtIVgOthGk9ZS`?48$psN?cxqwr!~BG?HX)yos^=0+nj^4s^URz zja^&yP6z?hwv7iCzGrFGS7oadV@zz33H&b z!5N7rIn?#K5zYJD`rs&ji><8~S7yjZz@qkLSvq#ci+}#=JKuq4{rbgzfoaW5TwpcMSUOE2|0d~N1=>kNlmNeOp*z?w#;Rb8xfNpN2> z8E#CnnBU9kA#c1x7j-wBd-|mi0(KXRV>J$n$TDkk?-ZOQglC?(5m*Ir5KShAp~rA`ZA}!i0OE=qm|n`b=d(fCF*EKfgmAZ z(|2)?WZLaGUfesG#66!N`Vq*}@3)Mw0}-YVbc?YyU;@|Hdqz9a_XZb2z^o|XuC|32 zZoRedEv!^@gld{5;XhOTYdWjN*k3vZg*8oJKwMYa7Ph2>+Gj&lSR-lE)k|=j zma;pbeL!(#hu)e9`TzhR07*naRBW^^&n2$4VgY;cP^=pk0JJXzJm#y3lK8mis5PNo zc@ZTkj;MigNnPp6m05qOR0Pd6ZM&Su546C-jJiin!?w4fBOwI**-J0M1tJ&`fp^A4 z=}M}vEro!$`@=vA0hfGG;GD$Pu?yv@ASVReTGyTLvrE&Ba_BodtzkSG zCG%31NeYFKkp|UstTSebCowAfeYhZ6+5Q24=eUJEl#Esc6o{Xpvo@|tix?6bRry`= z*(8Y|mH=&t&+}LaaJaR+Vst|F!Bs}rT$1%!GGj3<1bp|}HBkN#-`(7VljCvX@EC-4 zK70BU+`X|8*J9|@6-vRO5CFgXyYRW~t(A1!q4AKCGO~fn()AJ;n~}uDLS9Nrm=LB< z=xx%b~JI-PsEck!&8V->{b9;mT6_I3Z|ztGG% zaAn!Mxdye6$F_(;&5*XB5*;7=gthR&!$Uac=}=fvX^Y6cQZ4e_&CpWiy|k5DQpCtY z!J6)8>wX&z&+c2(B`(HyAY54{fTFtUQwh%2HEdZ6RtUJTw+Fj*-EYH52`7bsANQ#4 zm7qEy6JF&%c>CMo&)@pi1jG~)Bs?z)-}{2KFe24Wd<{A@);Z8v9czz)2weZREFcL{Ub`@70X|1C{O4vY-0iJ{n8s=^}4d;n9*@KL>*&M@J9+Di*>9BVP)5y=}C&>ms zjmJNk@qi`jR@2!uVo#h>Fkxscg;MY{SFXU#LM7OTSg~6Rb1IXmH2dtkv6L9Br0CwM z5Z#C#s#J0`tVL&C?-|s_WbX~_It;DVgkl>cK*^yIQQTzKp97!0|Mjnj|K#@Dq4fI< zTjD-k*KnllOn1Vy&ljCY#neWqf%&Vgxk_3T-A?8J#gNwDX;fh<|M(de8h zR3}vw@XBjj8wS+EIreNj7mZtz%#UnNoQ2Y$dCS?eQ6f{WLfmH#2a5>!Lw1KXQhQ2T zz(oNYjLx(ao$qZW1WeF(n2yGgikHrqW#Y2dnca6m?YQS9;)O&z542*$?|o%=cUc{f z%9Jk3O(Ed_{Egp$*D_M5n>Zk%jYGkLA+U^nt15IZI->=zsn00?DMocLsU$N2xhM*l zj;HM0F@E=^8dPN(YG2Vq#0mjFef28LnN8e7s%Ch(;rAMAp+WrDWIRFK3oR26a`&XE z>)5^wpEtpn2&Lc;KJf|ot2To8*TxbP8g2+?&<%t`=GOV|egj;;cV*J)=zaHKP(mu!C#nkm!=L_X{5KkV zXGQAXHxmM$y!qxOj%Yy7qe5e>AUbriuEDr8so?B$!*yS)${sZ_%!Uoo^U&CwiyVUV zIR#K#QxsjY$^bp7u+R+od>EodV10KO&*45;rkGMNYw8}S-UtCle1|UF zgI$!M%Zz{gvXkmfXiz7h$3y2fS+0#6zQ7T*p$ep#ekW5s+=#)2CUbav+k&)|u^@l2YNe_>I02E~ZEa^dO|r(rt*zwn&f26hi;gY^>E}Fn z24}ot)GBaR&DhEcrQl;#12+YvFnW(eA>j9)cmf{w_w+akB9`fn6kbO=CVJ%Ba|dfY z9DN|Mj1hvS-qcEgu?7}W!Y{n-ZE&=z;QFy+D{&2&-(G6nRq#m5fP1Yn27dOr=itpn z(Nked4nybq20}{q#x7%zat%NgF4!1l5|N)Ut8^6nNqFqNsv}&Vl(AwATH{KoC;*iU z-f!O6fbV?hL&QpReWY`E&5jW8zkl+Ra1h#>MuC(fLmA}x=$f&#bf{vj8N_*5cf0-` zJusiaKmYKDvZ!;?o{aZrhVJofg-RZd2?>BPRJX>!0(B-rQWFlS5LfO+m6po5&~ZKx z(mNh5#$)(sS;j($w%c)nHENn(A{G;ejG0VK{1Gk%tHX5yK&!iZW}rK_F~oiuXwi!m z5-+%0OGCXRc~Xx*vXq3fy2684K?89$graqI!Fy)HA;*6+nrbT9GW zpJ-b+iR62+NEyAybkB&MFDweOX21$D1gd~+bk-#jt5jFq*;I-($A6z112@m7;5?67 zDHT10CDAj-*NK&l!k4^f+`?(%4^9)8hG<^POa+$AN1Th;f{<0de%vPF8q`#RGk`Fe z%srJ>EwfMsZVLhb{@dS%AHLxYv8|{W)N|BL4!+qDf$Wn6 z+WkNPD9%uVbCJST1)ZyHC;{)hbO|1s&EWSx^r1wViCy3*S->3+NAL_rbw(3Pt2Bx5 zuenTGagDXm7#%&Bxx~yRG`LA01@GH~RPY1ul_~=gD@zx76pwlKWnk@Hpx^gneL?N%-F3zUK~rx~T_0r_3bZPfVv!3IWHBfmbeF z>H*ofM4bb^_E6Wmb%*%RUQm2qKs)(u~}VPH!vfW7M%x8M(uKQBp2B| zn4PA9TMiDAc{>GAm1UV^hRSDGLI{|e4o&Tx?KXYPlB@VIal3nt4|FMEhN@2~1e9nN z$pS5^GCS|#q&I_u+O7u^I)+;x0*)lc541|x{(A}`psZ_eCtF5EFuJ+u;#n|3t1t$f zF;Jm-oyv4^a^NU@zus6B@b6xI6>0{Ny|xE?cqT#NiVbvp%dJF!l_7DR@puBGrtvc} z6-^X|{JrlDLN*x-$EYHQTk}dKNi&CLPiTpR#uk!LcKoCiJcK%AA;659QPxE*P|3c64B57 z_12;_J0!!by)XJwkR???v)Zr+wIl~z_?|8^gMaGyari&J@eNoQ1AqL|OYno2Uxq4C zrA+s+_SLi!eD}x(u72BOTjOKg-p+`c;a0suR;wFAz>n|jM1ZA1R>Vo1WHi@XlO`%H zw@z<>2CBV}hzv9Icbq&0ZixaUW1lwJ|0+ zaIZ7?g@6>NT^uPT>_`dIlIKKo&VF-iqu2#rztQ5cu9J}vZJnmBQSA+l$f(d0Z5wmE z+i~0W6xK$;k3gzk%$OJhPU{}HQ7}nk49vwrMdG0J zn37)5MTcRPIG35_x{|#3O)f5l^*fu-dTYKRUIOQ;s@r?a_Z(>rkM8WiXW#a=wHO}Z z+QvTFS4wqBHhS)cyhmBOi1x?KfGM(9)>?xV0@Z{kko=Hm~p|R z25>Y~`yGo51<71NK?(&4P*ml~k&M+K%eqjJNR$y_%WTJ^j=cn65XfP`O!LJeIe=)O#@&YAj7zCR*SPXh ziDtzHTQ_m3iy~>kIZuW3ac)4#?vv>b)99Q zY)z-VeHhjs^>z-r4C^Yft)d#;uQimJnY8osP9;^M(?3DtN0W9Gb@0dSID;?BQ!@h_ z!U_QwXEQiOC`eqAx<}^H7;PWor(wEmTv8^fNQ#uPc(_uQAdppaz|Oqxrkj#NDo2M5 ziipcNE8#@lz&HbxlnlsB3jzDHSzI5uTVj-g4|w&rfc{Pu1@mJdOP=>}Ur5n06b8#_ zGP;V&pyM&ziIC`=&8qTdS5B#9)E4Z=Iaf!uLL^JA82L7ByG-&zmq#vv=~f63#;B~v zH2o5o3X_0zWNxQwN z8b4)|R_4K7n06+LaOs+JcL|&;X*vn}5_W}g^ z{->KJ;kLhFKmjfSkBEa>47d!Ue;v@%DlRfbGdpA8?z`?vy|C9%_6t~v$eCx>|2=IB zyBI{fs(PiZYbjyMtYI2Ys*G_=X-vdx7-Qn^jl9%upzIb!krlzBa;!Hu4eVqRX-oVM z)EbVKIa_B%D3~&1GSV|d$$&4p#EEunt+lYbu>nF#c+cJ*{Mn~JJ%~%d_z`OUWqpFX zs*vL7twZdZut#^XxRT!|S_pXU{`;X>(J7(hHzSe#u~HxkqxhDipG$F~@jWS3ArrY) z$^|w?_2$ZT)5PpQy#E%tDWwN0NThOwlY}K=y>F3e$e*oqiQ*Zp$O4*Hp`;~jL~LKz zLnfp4q0U%%9zmuSG-=o#k9$^zIY5OX5}_MDU{yW404u3b#B%*QtifKDSz-jb7xV6X8pQMyfS_>!0!DW5c zSqn;vZd8L_$I9LMct4-dlf;#~|2Z1f@_sOMH>F^c@T9kkB5@D22!Iyuk0W~M)GH!z z)Ln*tS}O&6KEW)dj8$`8*KCZ^Lcpc{{lssCs&E#W#F#5uhdPfeuvAG{kc0b-k3R_$ zE8uX*+QyXCvMg~z)>TPTDR_uv+!Tq6=Y=YR-s5Nx(GY}!hn$7esO=v3<8g6$Bz1VO zQ!?AigG6LR!-s2p|7_;l*oMtw!|&}e)TQvZzN`@N(~mp?FI>I4Rx3Na|0a3{!PvuUoq*^Fa}S ztI|u|bBUA+v0N-Z2q@+Pi(AnD#&&n`aVFQk=Nvq8^UY8)N#9wN_;9kuN~sRyN|J7> z@JK!^Pn6SB6OXWo(wjdB;wD#jTm%b z6QeLA5BKE9j~t1ZirB%bnqCs3GJN++LO`=&mTbS**3NU>xt>b^bhj>z;d} z#ObQUk@qcdtZZxOgji;Dz^c3l=$`MG5}gDB`iD$b5L|=0MpQrxPCC7gOL(8 z7{{@I#P6Bgv~8?D#~DA5$fm&draoQ_S%GuiKAEw*js6@fNg%0uY0lw$kM|jaoCJW_k>y(hmdtv@> zesdXkqql^Vq`lwCy((~`(_w$As^F(CUxo&^#~GlVVh*R7UxXn;ryvyk5HCpy|JC!) zgB1eiNG&f)m?C^ZxQ19MWLn+x`5d;3B5u5G|9l>3YPh3m!C2Ghw`b7cR30}}&W;=) zifPR?&L#TR802WJg^|`PH#-*5$Z<(&f`kD<;WfX0=@P(i{^oLSoXqvB?a@I zVZ>9SxoGI>g!OKPfUmyv63oZ}6O_(Ei@k5jXxO=aP9{c)iU$SI($TI+HRAm2%fThY2lTheL?TvL7|5Co>UHu?!lmt!zT z)3Su8PM*x}LGGGqk!J_!yOAoUR6KZ-HRF@UyRC&U-FI)i-mp)n{(1tP&PfS35fhx& z`>rRJw}gA18x=*NBBDp35m@rJq5x$rSgql5RV8=~3S`5+6Lh>A5{sI_m*FHDcSW%_ zL$D;a%o?O?4JU2yyLuIb);vcyWO&6I*_ky4cB(42aGR#-*)_&RK?GS=R!^P>*-^BX z@|ql&BqSJ0%826C=z)amxu6ux$xXtJWH`a#KsMOg^_#cd7U!pU)+(h0r!{ObRlt&4 z$p~u*0ar$&*kaq-zg@A|9^P$;unW_Aw=xYdU7Dd;RLp)<+6pVa#VX>IQKYZ{(xNU{W#peUGH?8VBu?mR)fenbxa-;*vz>Th%% zg*A52Gzm44S_f0Q?Iw+Z{;YG(LFt^QsxJ331<{38yCj@=Jm$72R^T;qYGVWTm+?`6 zGqztLD8-^ba~7i4wzuKjcnq6G*$ebp#T;~~(5e}WO-Nj&2m$Zj--kQf8l3Ast0mmh zap1%g>fOlSu)p})*E#_XGC$9Yj*MW=w5*j{mo21i6l0_PS7?ZeS1Rub+8unAl>d?TLa zSwDg3u4j_8X)97XyOzc$OSKg|mDD6Wfo2zV?1?Yo(wT0{)*L{t&+W&_l`nx`pfwwUn`h?|=UD0Kf7pF!Bj9O|YLl za|Vnn2EP|hQYaNG6f{E?#?D*x=H~E22maD?U4g6mV9Re@xdMOp>eYn$)H7}&>S%UN zhp}8Di1&4rrBw>Hy;b$uy6la1lu=1ldWc3d;jAz#sI|^o82f{#PV~#uBB6B4GvwPJ z{xIB$gv_ujXDB*$>$*Fn382$39X7=!TV7^*6_X(ptQvJe1nC$krJ(foyXj}}{uuOH z0s>y?zJj036mLy>J$yEAor~&3not^gq6tWuhX$k8S3WjlYgk6zYn#j{xRydhoio?c zxX!uhe&+zb`&~FI1dRL)2nX?vs!BFbnNj&_eH)g7F7CT{5gclnU)WsqjOW*JAX=q= ztdYU}W>G-t!FBih4e|DkIcP>~qpqvu`<7niucuAVR6GtzDHAN zL5}&IE4~#<1xRw(jv%-)8jTXV9@Rfcq!$@s2ioH17#`Ko{5}9o837&c&x-)wlOj6% z?UyCo%v2cM_pa+2w!Kh=Whyl8Ss34Sx_`a_8vV`;N!5nWI(K-ivv@_cx$qu;{?2#8 z@A-q7ChP@DG^tno>y?W1xUhDD*ZsY1+nX6bb9e}!J2>e0y@Zv~C5JZt{z1kr8EYd9 zt>u;hewhLOIK>li`-*dLOU#bYAzPzaI^DB2(}j^jz(G4obQXGD3eJ25#|Ye7_c$W0 zHEcMSaOA036z0j7-d_Vdrdc#z)Lx{E7A9)Iq-jy5_#2fG1PdlmwCh^eb-do&=hIGK zKZBW>8JooVq9~FsCVqBDMk6@VG%)tyQs-PcmL}?=iU2sJlnG^+QfN7?ft;XOLGFd1 z;439%1WIVtwIaidf^=uN*pZa*+u!^qTt}$f@E+TfNq3kqP=DnC0-KZZS_fe-3l45Y z*1`k+no88(d)E!1JCzUkxP=icQ)!^0Sr!gl#@gN(A>8CgCaLtM9uN<}*BRcwLjLVJ zKof#eno+2q59GsLCqJOG@-Qya5(jSyTlA$u<^60ZMnt zTPp;-Ych$~zu_I~a!CUBcjNIms^S%1D9B_u=Y>ZR_u7A%1A?pI@sCQI#LMuy{~^A-a4RwhVRkorh$bQ;R$P<%Hu|EdanJf6nymX5FTGFzy%Q=B;=F( zp2nCYA;L_F1h0S$W#k(3YnI!O!I%Sx{S>Y3;y$YCrS5%jS2G0b6HIVc;R{Lzm{*}< z3DcA)sB9<>MyuouAo*mb^EK2-hz@56p-;6SChE0qA1{EUBZNn z-b&PA=ME3Ra(pm*^kc{kc#iOCf(2i$tfFFH^lYUiDpcyde*WG z+JD(`QjxnK?`c5cDUTMM(?NWOwzBE}{eGq3hd=W(a5Sh0F&{ousf8-+Xa+PDx&Ye< zap{x-BLw{Sue}C;_Ufw%pp0hb#;6+#s)}%DDJUZ+B5(yQdh892y9-(fnEFk6Wisg> zoKnL6n(jl`+P1y{0S`;ssmY?XEEvQf)U0B7u2ogRo9A=*{(;>NkSzhY~qX+1!TIGY7{8A=MpnxA>cw)W#^mg-oFv^e8TtHE8I$;qSo5;_|q=I zcsyoDSwVN*pjLe{k1q;1hRutLOl#gPaSW^nG(!WE84;g#72QTn)eEGz&8BQ?I9hgM z^e%bNn#^QZiFyqEJ8hq@>Qnu>zuy;l{eAXEQaa2J3 zx~i8fUXP+pch0nbH^>C9AF!hw);8CH5 z^vlV)K=+lk7K)qw>G zektKUe(!s5CljzXoQtSQ`ekn=bA`b`Omwidlu$8#;$>N~4+TGD>jnGIwrzs8U7{HC ze(eVFYbkg{F`P-dL9JVVJ|01UlhN9en)sPNfD)w8r8&(k=J1+LDdDFsUW8kTt66r3 z!2kdt07*naR2SX|^m8wbMm>QAV%r7m4Xx2 z!m~S@gS>Tp1L80@LjA<@s&qEojGA7z2M3Z|5XE~%XEJ*+07zuTOp*XA zH8>&Q^|Q_)ZO$+Zq*6Ti7gd+kOF&AQwMk9d@?Q42s;gw5ctn~4NVi-Dk0IJHp;kr#HnJYx)5e?y;QC{?41zs@!M}tiVf{4$Lrv5 z6q9g;mVVA@ZSFBS*)@yqDaRU7%!ueNW8m*U|9qnJAeDkgCzHU460u^S3sR$bH3x?4 z6v%APm;pok8{+xf`d~~K5A>b@p zbWNl%=|Q8AiJzz7nHU?)GXeyZE;eW;!DR17sm`q{Cjy~NuR2biapo|f2V88?9v;GP zeesLQ@2qM+ORYir&B5MBD&@-?B^R_@PAb)Y3Y;@TidEcYC>X?m%PW(39^fjv9I%28(%b*- zb02}D%=L%;blg)ZH7NpVtmP<=9A!=Ut{6?yg%I%Q&K7793W4sK?jw+87^{>7n8@Al zW;9C9EPT#|1pVgSU1)qqpeidCWGtD2Abh@(67J6c&9&AbPWi05^jR2Id;98>Pr`H8 zud_-zMTY)DGe(6jF#H~#tH!LF9NsziFlzX+ZmX2OpY^l+pw6~M?3EC3cGRX)yh^PM z7?K>0L-d>tA>irxJkBt0YFnsQ9O9J+($H(JDn4OwLcss~r7tDQhjm>iU6b(nRaLG% zz9}=$qf{EMR!b>fEXj*!kIDmQN`mj;)*`JALWO3~nrv{ZPcJJVIgl&_pz5S5!6~^C zMIQDk{_eqT3b$CfmMRU_L5YiNg%$&&fU8%oB-f&~hNERFJt~O2CI^hA4wGZ7GZDwBL)YFn5yU}ox6R%WD#jSz5aMzR=xx2kl|5DRa70P2hzCRYeK z20zlG*H1H^7-i;}n#{;8JcF@6H@FULE>0_|Gmi?10LV1PgziHoI7tcDiUN)c0k6wy z`7Spjoz32eDFYR5NkJ3Ko4w`1QPdtUH8Sb*rUP|GN}1@#V@|MSr~*62fYQ1bAXyp} z&L$Z|E2aP{tzg4BsBb`%Jd8OMla0=uTe1U&(6~r$G&ge#GpSY7H;i7!i!(6-pm)sy^jDT}VC_<0nYQUOZQ`5>OTv&~%^y}Ga=x~#iDm@__L-|Kx1eY<<%+#Wi;j9OglyEV9T=}=5- z(4LAc03<=%zJjh>GJt4S3O+NR!~gopPeMa(Dy~RF=FPQ2H=A}4jvrd{u{vTj#S@vp zfmZquA9huMqzGy0Z3kl(YfO(~wWR~hL)joQ#$fZ!-qy%yFQ7Jf8f z&qm{9@vI6&+}NQch7-%NNV8IE^=e&%K{B^t6ZI-MVvCtGiwL8I%Ky%O(Y-g9oaHQU zxlLY63ENn7W3k1y&vIRek}qI&%qs*BT#i64IZe1mb*@}5EKHOrr!~gE~3f%`R)|99|YTdgRxM&JR8rBL? z%--#-Ypvn(bPQ7I?1(Yf4J(X+));6A3jy!x@u=S|I-KV0a#ey4xe@kC*EOtqoz~F3 zwYE#<#)xUd#qHc4)3IyoudhLXwxC3V4^1lsj8H|uN;D?zyrtY7<*z&ER)Sn~_V0Di zu?=rbOqmF?D6Sgiz$z!&7B&Z3AUR>2k=*#yA3UqF$edp#dsV8jMf?|=XyMN zZn17@4WB$bgn#qG3)wM22%c0DRAYrdbkHORwdc&Pn-n@B;NSf2@4<(OlHk79@XX1R z?3x%ev&$W0;M*_0c*9h-TdNAnwu$SE1KUxhvId!^Jow;)aqJZVegi^2xsC>RpQMy9 zn@)R_x}os{2VyO?2B$St$PF>mZ~lL4(eoTN;uDj5g4jPAd4E{PA$IoR;x zFR=qQAUZVEEg4*+zF={T$;dh#u7V)bb6`^3sa-e+n@y8wh9q<~v@gPSj2H^)L@Bt8 zuo99vUoJfQF|E-1#5OpC&>xy9h3fn#n<^qHx6tOH2jp&D zb#85CnPi|PGOfTBwH@ekgzLIemhgl7?t`OhST8<+A~zSCSrxBsf=+irz@NV9O>hQn zsOW&E6u7cXXP(BuM~s18gh-`9M`vhoc=V!#fM34vzBpq%G^L5s%<3cciLVlxW!z-P_M~|82Yyuz!8%Gj~baZ6R;epO3tC`{B)QA9>u@DcZ6^}pX00A4<)gP&t!_qmItPP7KZ@I${ z-}B%5#3$f?diiBurO(T^js~u$Zt8vk5VYxur#ja)X}l)}?z}0{UlViR-KbH~8kklg z8923MB&|Ly!XZPE!?>-qY$4dlm#YUTP61ezJFqE0EKxu6hVVOHB`an}KB!bez+K~U zhh8QRvLHxz>ywIg78jR+(nS-3n$1w{dg2BFu)?+7g@_zuTJ3%G%o!-r{iR;rV#-UDihIrA!VgMmRQxQ}>VC)kN_aNDJz)mZ`>uP^^h_o|hBF^Y(i$ z-`ummrHAkqLGWiqHVB1?>coe8aArJ?&U86r9D2YDA>h}3?bq0(j50^?h@wP^Q*40> z0srH3&%vKQ{dC+@-0YA;=f=Y-e5ULJi}1YlMh+;m0Rn%WK_#&N;7C*f~P;fnCWi4z^uWtA5OCx#Of zU^}QVdCYa9Nhhi*pZI3FP@I)?#JmiQjjq&nRQH>WMm<^5ur9ZmYL-h>aMx{B96lC7 zjOhrIV=-w)=qrwrl!84kVkLxt<88aL`d&V-wBS?d`*%f?gL7pGN^6)QH9IQ=OzJwW z6N8Gdu?MPd7DY@ju!9^G>JdV~9DTocU%VLNb*keX0#(SiMxN(aIM-|K?PjW0Ja1T~ zlkSX#kugh|K&=KJs@8gGaDWd}DWOKe(^v}+G6=;W0E2^MwPM55jVCj~n^tXIwcvWv zko%!}MvE?7!;#n;R`6@@e?NTr;fH(G$-#6A|Nes?^kxcG*6ru-+Zufiksxv)^;KhiQAA(Q}>cg{Jn5{KRQ{}HO!6aape=BOjRL$0hRcokH@3z zp)w@i!FicS%SC1c^kdG!brig-vIOgFs^K7cN*_L~Tt=9No7*d`q4oC@vm&UV6b?pL z$77g~@A#G5Zi5Fsn8=cuDiz1!x(UvI?yhrCtl?!~G5>cU)(l}+oYHJJGyKl>WCDNj z?6cW>*bXpGCTpyf^F;wtDY!bFuPi#SY$}%+L@Qh=v*V~OHC))-%)Z~Yajb~We7-T*W!OV&_0Qh(9{78YKDw-k866F}7B5#7i*ygaH&Y6Z z_|Mo70-l(6mfCawZ0n+kF<(jvZ+g?460xwJWV2FGl~uIm9$4c7+NSMh+}=jcpxLk* z$bKVGjOjboo$5A2#^~QjI3od+0sS z*LA!GWmNJ#%XpyZUh6Bj38vP<&m0`U|MIo3dHrk&3n}57A@f4j{7yhvGGLD+2!xp` z1|4CYY6fJIv$YH~I?A<;(yUAnx>YIo*WdXLl&I^%NsPW|NqI0FT!br zDy2!uC>UW-u?u4c1CLq}*i~kBH7ToJ1>7`E@;xgQAgKG7L2EgSD?zWx8LUvHtsN9B z77PF=SM_Nx#mQCoc+9ma1l+f=7`*NgcQ_=8ic1&^G5II@=U9JRBSd#__rjO~$pkz6 zeP}#6Pm+-E`gJ;XVSJSwoW81>W&niNI<_OJm0qp`-{qp9x==O0WpfjL|MQ<`6LLyb z4I`bLzc;SnaR-NsyCuQ>;zw_{T*dJhql&z>C0*6XoXKnQjIAj)3xgiAn`6oUBI@9IJeNH{VBnaPS z;_r`TtT5CA;nh~pX-MKN?%Bqp< z4|*u!11{*hbHFh=Wh zj$VS2$jcVJaZ#+WNfI<7mAh05?ilFENTP$l;ifpjn#|hngb?UL4(+Yp1C%mWo49>B zw5ag=9M+vyxDo;mH#cFY>1-H(`?c5LVb66`1aXM9tm(o(^fxSk`e*>Ft1{6eUnTQb z7ez#sa?~c}DG?sR!F9` z3N6YcxTHoESbgaNp?G}n-S31)oP&GMoy#90Qo#9!c@uAYe*NNEUUHd59V*< zK-e%yZ5(`8B?LtxvgFuAfkm2!q)SQ|3juFGdN4T8<|x z?24HdIH|09S`R@n&$EDy(PCr-eveuE{!RtPvkD#7jm z?mLx9|FCc%KDV_MRpXv53V1_?BbpOMc2-`avNzxTa9QIoN=^RTZfl?N!Ui+XJlnwet-aGdUd3a>mB zh-UFh2sq(KEFf=6TIkvt*L83GamFs;y{F^uz8qr?B5boeXSz1@IXpX^@*+Y^SBBg7i=D01R+4nA zjvP5M_&!GlG#ozV9L$ON5uJ}02z4LY^A++-KXT+q#4dEPO!eYn6{vMy&!7X7mgGQ5 zpYznO&CnTWje%#Zg@5<-)2Ti=Ni3_X?2Q-0?`}E=);X|#)KdHF+HeN`*%!V5pFUV7 zQx!s1=em)Yvb^aW>~1We%!pZ0wgp|IRDH9vNtJ_2Y+UDqCX-Dk`V~`{$Ayb)z3N&bViI}R%Nu!-IHnD%l}QQh8Z;d4fU=0AOk2z&AMhhLI!K^; zzN}ITMokkB->Ry!*?w*E)kMtv7z{!J*78bs*u_l<0j+<~5$%cRfjx?$i-IH5y6zn+ z|J$cN1&>=BX>>z6(4lMMkQhREpVOQczm%};-!Gtk584)t5O9JVyt!wI=|msc*nt1* z=YB5v_m}4LLA*zy6#TOfJqIs6@Ico^sOt`_r!~x-i+E)#de1GQt)+xprc>C`8a_OqudIqg#9}$d(kyMW$-VoY%clCyZy8H!m;B30Pw|)4YvImFdKjK zp@-n7y<*#VJc^x}UiXW!HpXT&LI_w00srx*J_lu{5~lBo->XmxDpy8|?vJ7Cj;fEw z#17w$8sEHh?Hb(SwdkWi0CN3nnb8%U^GYQBy=q({rHoX#D795t7JBC7c_LmQ*c&0PI=|g>!Ji8{|m2L>6x?7D;P} zw&8S7<;r6ga?+ZJk#OK`93ArirE_{bR*1aRHD;RB>o~jz^;F*!0zO<6u^RmBcnkml zukP;l-t%(PbQ!SL@W!TrJ%V>gszM}KgS8Ma|5Yk}jTQvxnN?Qv&s=4mJ?#$dHVwd! zegr@H*kkG5@|*fDbZB$);ex3;tky7_&AP6NQGGEZLLH;eEL5NS0|GSF00LMHAp1>5 zxi3(x!nM5i*kkY~&p*$1ZwBx&Dag#gw$|{6o-tB82e)Q*wU^iY<@4v^ub(>?DX^|6 zqUaC3|0Nnv8mdGWD#HwJ#dvkfs_w*dR$&Kn^v}>03aq5jXtWjwKALnP|82p<*(7eS z5aqg1mV;`a7mA{%a7evCaFV_0iUd=j2Aunb{6As>k779Y9<{ZxIEtV<#uI_6DE8^1 z>3ZJq`#8u%zx&J?c=NGiy`m&i@`Qlj`OIhFS%1cDmqpkwOlE;DNP3Dw;Quvi=n64|GirHD4`u-BZ?u^Z4SdRMKf{j zgVisM$FSwA$Dwge55sT+20uzE*qTgYg{QUl8qF$upyB7i`C(%!(?SUN-lskV7qtdw z9T;Q56$P9o-$xk(x70O!V0RbbTi;5wqiGk1Gf%-S`-kfqM3g0Mqd*8g9D@ZWm*^!% z5n3hlKW?2V0=(tyB`u;ZhW9ww-CZX1Qo=7>xdPw1^G=w#f&~gC*GuSnt;g^L5Y~4d zcp%#H$f@=PPBHb2pg_9IOi~oyBP5bWN*LEw7t>Jt*a`tZQ50~R zh?7LLw-B&@1Ey8n;Ww%4p1LNk8k6Ub_B-y*h7qGO1}6SI2+y@FOEBJesfYYufs^^{ zwQDJ^hrv?hG$2Ajk}!q5-ocP1w+!bK1_ArRC9KW!NbbDf#^>d04Y{v3&*yNWX<)_( zC>4ll67@iq^4O@=>~DH9GeL*^^OrBf3pd})w&LUpv@Wi66K9-^9HAnTcol;vm1u+X z{Adxv&>90{V|$y%4#*v1+t;e9SS0_dgd0z#k9 z(+@ukpTGU~01xUaXKGhSoYN zf@1n#ZmbjL;e%ZYV_=T}bHo4Np8=an#zr>LcFFiy%##DT0$yPUhAoz^-#u1(Qs>NTPcsiEsz5x^73AuCW## zoz39Mj3r@s{qd&hB`ZZy#Es#Y%Caxfso0j|zH=}({Qzg1zmnh~&j%fK`fRJ?B>Ftg#SkxrZQ*TgdM}IDo(W z%2#^N$yy8J(TLq|-Fiur!d-tqmeSES>)}9A&-DI}CKLGOQ>OsF{jH=ER(jNQj&j7s zL8|f4mgOK#QV0PL4=%;L}4qNyN2=x~gCkVOZ8po@v4uMYM!~ zd)63>gzrA7s%{*J&YPa{Tn5Kr7@KcSBrEP+Az*hjf?s^kd*C;pc?N1G0pCDLKK3}# zLcpWW!F`F@5JJ7*)kSs0B*G21^;mM}y2KJf{UEpa|! za|05XLI2=xrC{n4DSR)mhWR?~WFeqwlK4>S9v7IUlyKBja@w*?l(jhNU%kSXH>=uc zd70570@L!9=Du?vl#2UqMt<*fJ6b8H8WVr5;apY0BDtrsvy{xBi@EP^tz!=vGf+?r zxm!sop>htMx^^w4a47}1_{1&&@>vT<_VyB0xFo2Pf&dGOP=G0>uqug0M_TpRM7d-s zVju!FZlEGuMQ=^Iq|E&bZf4l#*OF^=rAxdlXskC%b<7Lq{pZGjLkU;t$VgAS<><(v z(=jwcG(x~FCr`qK=`>Nj#OxG{JQV29@4WaT{O-#yLygYS(Ea8Txk#Jy9jGt9@B%z} z(@lvqIPIK_wT|FdW`rrS`pywOsx^H2;fI%EFU-Mx^J3A>NrZ^fj&v5HGTEjgEkJ6| z*8?v277Kl^o3^)L%ee&ADQ{qY6mHJ@_V(bPe&Gwr{0krK);jpv*S$naTgdz~|{h6aL1(aySX{`9Jt}5Y527SsUOyi8=UrvZ5=p2N^ zOc@0SN&)=N@4(;k&t>H4B27`S%6~YiD~bYY?>u-jqO7f&XW|XIC`%~)0cWwUIa4XR z%zQp?EVN9HBd?u1{8z}R;&IWCkyA+2Fm_=`D8?X~Y);{iQ`nn(8s?)2JA)7Nl1MEJ zA>dRyg1NKFI3*-?wJWk%9sInV_eIde_~oc`k^E26VF6S0EVOhaL&QVQ-4!)8wHPz#~_q~QPre+0{AQu0v`8(%$yE; zE@{LC)5-n)j(y}uhWnnO)1%P|0Ux{L4*1B~voI0@e)Z|6!3Y6|UNXBiChAHAggiA> zk;L{p!4GK-t^fB$+rsVE!U-R{HA+r;m?t`i*BXSB@X-E#Od2*a3D*#)P*4y}2*L^a zj+mOKfz;W(Q07~lTG4?yBJO{NuEmt}XL zGNu?-sbz;Dw9$!9x4Z#2qHvviWtkY(GN=S4I=bdUQtq5fG#heb2PGxE{qPX(SS;d9){=3F zL+$6fZeYUb?63Nn5TA7loC}3P=_@n(zC&PKNx)U>xTodJKRN-dlu;1w`>bh}Qm4uc zc7wueuWW6>D})shM;e|g6;$tNtD5>w1?Gd{r2=v;M-(@fh0f@HT3uOelHdW28 zqp~c)Dg|{AtC6C2U#XtLW4pU>VKM*g|nJe{rv^eJ6xrN`2%vapx$7*kGe~$P|v{l&+dfuZvVS z#;}}WZnpi95CA{;0o=SIc$XQ6EY3WG%4>!Lq%fVYy+uI|CsifFl!SvU_r8kAO>!bK zcq3Y3G=wXpa*f05oDlHJsZ;S@H`aDk&w)dR$~cF_lO8J8IXHr@V+dfU8OqPbbP9Eu ze%7lGJOEE3l`MRn6Y6Y+o?%lrYk)V^pp0g~CFp^q33nYVlbFt}h0?Es5Nk&0bzyu( z3x_}_&EY99(5$MeL5+>TX@AV$#{lBHr6}M#cijc85U`1;YDpr84iYZrPQnNf1DKU& z6ACK?Ja_gc*c<4eN#?r_a?_=Z0zm9Jk+CnP_ZxSO!Wc~wWV~cXPt%~afv(}u8gNGU z0GXv!8P=2PX@Lx3BG|o35`B$2uvn1d^%#&btN65=3Dsvhez?cKVGhk_;Q zHHraHg&Cgmh{Sl~krkbm5(>`YhY{%rvX!-Spj28Z2S=pv8CM6gZevUYE}WdrlD13a z8V1CZzbrO^nE4g@x(mQG^08jtgBGu$?=yi{#nRcu05 zHw|lKga3bPXDa~};fjJLaR$wr>HAU@I3Wbw-c(DS6+dwOma(G#G%W!n9Y`QqJBLldz0$`puZbA7rRwLO8EUZz7amf$e7|}%vc*4 zB}OS|(R`RYv`6Hg$N??t7HI@j$ZvCARf3yZ{#0>3|?^*1u}bxH9RnQ_<> zL!f%5GU2`@-6r~30f=$3D&l7Sjn97`t~l2Zk^%hW9NU`Uj6iY-Xg4sM+uquO^S*)` zsxZRrb5+ZWww0EEl71_EDkWS#IDmyx@K2w42JZ2*4UQ(}GHO_JrUL7OR8lMgy!5tUs64y%_5hq%bdoUvY3JJ)tEMYboXS+w~UL9`Lt2L8P?!8MgZo%SGY6yfS zC5(~NTlfiXYvXbE-5Md_Y(@xbG+-ZkBRT|9c0S()CwrVpI1ZR9T-;#Csqh9O0l4+~ zBS$=?OC{GbH13G5bI7Go5_6^@(U|1E5v9HhnS&|U`F#Ay5qRaZpG_U+(0w{ia7#i6 z*ei?u zdL=2mXzwb^#CjHw3$9Nlao&GKDfn+b{&6@-YyrdOe)`g-EPAsj3aE=BZRrXDhh(1Y zl!C*ulaUOnbGabY6M;a#8xE8iv)I-Rp46&yl}sfk_M?dC#n9)Cs(H#s`*M`0lI&Yfg)kbT;4wmmSL}+YJQbg* zQYxA+&7Fg?EMZKpCA6Z~IUI$MJy2{mF<=tWNpim|R9eHXwNN8#oecgX#yTbm?1>{aO@}z=9LB<& zmYOz^&uu-X=%Ntt}(Ce_fnT370TCVvZ8- z7si5=&Oz(D6TLmN!pW14GlvSx4m+aQxK?}ME5>6~1YnwgHKjsgVrr?HDkTWxfedaH zEz7_0(W-(CAEcC5CJXJ@kWqwIIzFr&u85e~-k|Y^zX|lUnh_qMT*|0MN9JIqM|4&Q zZE3~QyEf>J?;wu0GbREq6yqx{g@7|#TS)U)uC#8nAA&dy#F`_tk?{neigu~D$7n+UMaTCs53$tLh_kzj;GAgY^GHOFF*WnY}5Bl zfx@ULbKp|JBX0dmDWUR;Vz)7FNaM1E39|gg zp=T;HU{Yrd?34R8W^fhwer;NpXk_DYffNG%?2|tMuX@1}t5gDzIy^jtjqw;R2aSOu zMTv7jq5qGxHw(J#y3WJ)e8xNe^W6RSJP+t@pu2$vh>-w@fdEMeA^{M9NP&Y$fKnt; zGARzGY{`m7+OlX%DLIrDph*OgTtt-q?EYwkSdoGr;@5v$`8&%Dpe~F zXYYO2UT5ude^eg2y89pQJ@=fw*IvUnC|v1k4d<=x09MGvgRa3QaJ7AMshKs@wk;eK z1&mQ;<80a$(;3XnQ8?EfIMRW^3W(?c=MqXEmPL*T@@dYe_};P*K1auUrGAWTG6HYO;6N_sjS0!T<4Z|1G>qWLkU4 zk4oJcRfb-MKND8~$P61J;46ZXTM*&u@&6G6paB?Mu@~1(|P)$Bw!8s;3h2%A>fRki&eIx2JIFF zY&r)cEqe!3fjbXEzzL;bE(Dz2-GyU_n@pY5C<-)Z$Uuet`x*ISQ8ojb+FXSkf(Ncn z)~toAS{=#6!Jxnq7XEoGK0!IDq@w?&=bnSV_`(-@+WZn}k6ScX0Ls5GrpHmn_x3Bt_P`KeVyP7T7w^6cf9KRGm~!&DN0>+BIrCc=F2w8qvDH8NTe_(j&5j|fCG`?Jy@0{JXV(QfwJr+Fx-7`(Jr%DwAUF7 z0+q*o!;8`63IN5?U(tS^%{!{$dms4-JpJH*Ya+)f|rI&p=E_Z4VSk8m;3TXPOD#Qc8Gu zZ4G|z`RBnRtGn3JKmY=n6EG0z*H(~3;ZSw&oP)>OHldV-4D%=&;(en7mCovd>zX%< znV`k-*WdUCyx6u-_==Sthy?(XC04IoaKVFY(1xyM^Vz~k%dOA}S>lRnfD;BXlQ@ipf<4qT$` z%Jg1NCS%aLOLFhOe*I{P8n)_1w6PJIxpJQu+f%N%0v`5YG_5rpugcWuW6AuOV|?KI zmZL>+aRJ}|+M9mtdw0dK-ZX=w>A<3?tZmji-S72Wt5!-0^R|UaSuCY#ngQf`%z)-^O<)I|ybhZ`Fm5ZG6W78Ohlu_e{ytTF!n zR)o8cE913+v01?Sj7Fob%bZCRP3#;iR<=4SK5CT!x^dCKi9U@Hi1yUM!Jtr4l307n zTzId5QKFx5KA$Dn7LIPKRH~pU3S?-3E4G<`03+g~s|lcp(3<$6D5(~}KlJ$%UOoy|;Xu+-!grs04u0v8M;4VO6O_V( zb!7=3KRAF}D=P_KKRnRU5_`iTIm#G-ecNRkk=-Vt`_boc?dsJ;45c05+~%l!xw*4J z06%<4DDGNB^=kn=%Uq+!9OigrNdnCsSP@$kiR8_76 z8b&*f*1hCly)0o$?u%N61(LEmi2XS<)*4zN;1^zh9Ug4kWUY=z7KC8!B`0R<+EoO6*_0CUe`_XfiJoOtaI@pYG1L_wmarhcQ;M4ZGx~duAM#&N_76- zg;KEQ94OE8tt~Iw640#S;ELBDf|(FdN(s&w_~_mqJUE$v^^1SOF;!WsK*0z{BvpG+ zz&Vsvr)^7<+Kzhf_z#lS^V-@P{Nh)>0%!L2JmLE)MfMNxV7U{EX8(U`ktE*7? zAjhGK+onn8vdc_5s5X57GKBygf;VsDvdBYs?i$2a<&v; z8h&qu@$ROxZ)*%Vt)VW;rP9H{NTRB1*cnFCE`l>rWivx_X}VXmhB;z!2$=yE4kR|X z9lkOiAIW$oCoq%)TP1DUUMELp*L!$PNoZKCGoRN%SPCd4EFohIJbn5sm?gl|6~Jx7I?b6pZ{v4)3E?*HSEsBFX|c-kOoq z)}}I=);U-)hV|NBHm@|sz>4R;b3cbcU-ZwJ0oq>JBSG?XTO0TffB)~pPmIUW6e^(B zgRF6|{9Pv=4K1Tuhy|!>q&9{-EywovVTyt#FR!^66DGzb{@HMqH163{Zi>iNYwQ zd^}NuCP$Jg_u-g;eh#sn3<#iO9$Nmm%|q0bGz#)Te50=G_!0Z(jh!gpSJ zDXLu+RN2hm*pU|os2N}ML1!T$VBi1FyloTN$)PGoQ!et*`!KmOW4b3n}@v~K(CWgJGd`fzh>rbn~GVXd;P!z z55P4qf|7RDkAa>&IHgr15t~SRyg5>qQ~8%$8R9L_h4in#jk7Hu{(-c7~+< zvGEuRU&P{WlN}ggZ21`BtckCqh}VT3h#|YA(=s+1N@7#ZJyVC3RsFs#iUNclm}BG2 z%9sWHB~ia3lCd%q+>M{};!144^19>bdr`H`w{(>hPtHuovVj!q zM24#snne~%(C=a48l}J#1>9E@UE4KtU)G$pk44I6sm8Q3X}%sH{tYIi?U zgO8qQ(2~QlKSnTvvqnYywduX)s)O))|MllS2Y>p)3y}*gi5|FRq=zFdO9=P?k`dKX z!sqVYgU?^NvY<#=*Gt0ab!;I#$1!s4SEo~W{`m18m@8>(Q|!lpkP3|vG-7hUnv4ehgGB-GyT1#Ej0XSEpKWjSBZPppvP_bu(9)GeC?<)=zG^hqz=Kz>!b^vT z-KY({_qK7#!JFNOneHN%S`OHoAjkadcnt4(%?D1fD@l&Xa~dJ<5RT2Uk1z?GZ0zFa zHLG{ATNb@`Jy&^S6hEe`(Qcc}U?*BcyOy#`=E8F%z~y1lkB6qy6!1kVTbx}|PG1gG z<(va+41DqBm*Mg4?Ie4i8N`{IMvL>v%U8DEGNX|I#=pAU9Jp_VxJIz{GswzRg z_LS0$0jV^!^+G1~*kl5$XhYxMwsD@q9l%(X56f&~fXO(cKxaIFBB^$Lh0~(>y|Wh1 z5`zy#%ydShaZjK^5x-`xYoIfl*$ZCKMy z)4A`|K&U1fhUZChu7BNFTecdPN2o#Cr4W6o2XMLaaIHg2s4(C=Xnw0#G6qkC8+*QA;HBa}>4_CmzBnSoKujD3F8* zzC=DcA?+(iD$O3m|mxjA>I5pL62E8BE^kXoZC$rK znjfo$9px~~&2^MFgP_)l^yjVCV5MXeB6g-6T3kNJ7}R>=GFR-BccW=xPpQ}vZ=1$D zZ%LS;*5{O=8c_<$;xO&TEQK?XK9-w5D(@gg6QnRUDG`;1Dr&`R@Eb`HOa=E`G?^Q| zA6g%mk0uCMT9oyIJVRNGLR&s=RlYsU zb=9&6bt#kXj1~gcM-6PZqs6sL2|w-?AdOP68Yo$G1X5O!{bAiA#&V;Ya6R96?KLO@ z7HZ&n>u^{G?Q|sf`sn%dSr^3c^`~43|J`@K10O(%2tETEYrzNsjWO`@@#B5xP(Rk? z5dOKn7MMTA;{tNCa_)D_f%q`-R>;AmCupT;rgLMB>ABib^P;ga5m(`9cZ*r!5XZY` z)u?sSTEK^8L_4FZ**VwAMQRl{pwj#YFNv~{MuH~c0~#q|HSs97J;b(UHX3cKdafZ%UuA@@>q@Y1gYD4z}cTh{Rj%bn`lFTiJbC2-`LI`+} zxsMcgbhWDBk6wQrjs;v0L&K!cOKA-ggq>-%?utExA=w^4#B=9D`1^zNdCzrGWfIvF zB$3mM8(!34pxyxKbqPY->bF+$2bnVme5gLFs!Cd3K^d(G!9C0^dk4_sLn7aIY-kLS4fYner?U zsG4n+3Mo4=4<_;9IuQ8K95V=HIS?F&sSwT;u@QJM?jb9Y#vq>ytuucj&r@% z0w;+~lXc^nU7NUzEJUJ}5D#G?VCHPk;Y~A4AElhe$HD*rAOJ~3K~y`XQ6s3$YkE&8 zXfL>R7DoVBs!Z$_)SO|+?$S92RtWg)#fuT$ivbYUFT8DHcwnuIKsPA_tU3p;o;|}- zVRoE@DdMS1)COIU^?AQzE)a*ARgKz04z;Q2VT4tT8f#&#X<&{)Pw2f@orA5qW^H1H z5U^Vm@Gt-H58->yJQFu$qHioEe13Bi{>2L~z|7AmDKJS%*`un+C7?Rm_Aki6;|5ya zMP>o*j7G7|M4vf5Fd8A?ho65QzHsjzj0x2!sk;1iRb*iYsz^DYbcaV6TI)z*Y?>ya zMPl@`9H_RA(y}dGnIw$wN9l~q${TbKo2E&A9%~Hb+Q76OM|H_-V-?NC@SlD9 z)5!>xsw$qYs;qxIotJaI6dQF7UwQsHSYxyv4$2a~^}>sA8MVse{toLlf{*K@Aln~} z;K!eQ5-P1b4HM^JjYxm9l{EvLOA`7ZQiMjm($DMZeXXU026N&Am>ZodT!I`aXGO92 zoc{N40fJThIJLq#Vh8wjnV((fg52-D_8L4`mcCu6QgDUVon58YF!JbcgQ+KeL$0AL zI~)+!+Ma%}K`qxa<1xJXk&l4&Es_VoJ|hR-3qM;50na`BFkIi-N*2M& zd=5>Ri<1RSU-xl8!=Z~kWNTkIdlvquU;p)PK7<~aF-r93Gq6UtcY1NYol7?PQV z_nt4Z2+ma%LkU1&9N_n%b8Y-O^uP^O$wpIquxY*`P^=5CVSo+BNte{@@Sb-20gQ8-$hNL|_t=9u$NdYhhNF@Yczb>^k}LH{XPB zKl2Ry@+UtD7tyl`lrJ3gB4$TQsH!Rg5p&Pl5Rdp8B^9~qGEg0OVJcOQ&`NC~Bm#N`SVbp?uD##*@M6Bz0{fT_V@tgIME zH?DdvmtdKs*J+9D8>IKbjR9#)t83pW4%xuHai8CbFTxcLUfSJ-Z$A2HXXH-3wecZ| zKMX?^(%)o&RBTIszqHu?T6p{_p1;YqXO7-vz1;QyvrQomLej6Se(C!Wrwp3o33mnP3 zo)|%#KX*RvS!E2IVh&yUc^fk8q@Ak7lGS(ctTDZ{6$6yk@XYEe{K4z5gF**exbK&Y zfe#1)zkTBdoDc#=Lck-4GKr;{x#EP{y{b&C(7w$oz57*aIAgLEbUZMs3Yw+?B?O!$ z@0ln-A|yEVuqZN^jqu);a|@4i>{^Ga>2RQJggsAuCW1Pj#QF&&DOF0rR0#NmOP9fT z#C7P7%>7>4(Ap~v^6^xK_x2(&m9$$tK-{it7&F$7^o^BL zaNZjD`nhvS)kQ&Lajp_t-M)3w`A%1$QI@Wi0__iDB_#-%pCNCf)#L0ya?)RGk?u1ld>IaaiUJU!v=BOR6lT zQr;`3KMrZZS5?JcM6zkZDwyCy$XyhhcclcuW<>qV#zfrV^B*>+JoLx88~#^hQdU8WWR{q9}S* zFcpKM9WvuPw$|B1Ax%or$2NtexG3P6)pa;aX8k!mgK!>bMv@obJu3r$9UL?A%&s2hiMNc6&(co9bxjG#_x z0^M|a!4rQ|g0M#6ZCEe0Ej+fd!M1Z8w$?*5t=1Tr6NEC?*1+O1QQU~BPJ%bIg>XwxN+`94QV95uSSnAN z(Q-D3PAwL+dLPPV7~CbPS`^|tE5sX)_a@nFi}yO|97x2=WqHUMpiZDiPHdV@AG9r$ zM^N~Sf!}K*P_qZl=C&{f&Q7L1@Cw)33+sA18iDk4K)hc9C`>UGN6JN)uyq8rIqn&9 z)q`^bhrX2XTTed?fBwcBFflyKVw>P>Fj$qoULgeB^uVvs*;2lPtt0&b-0FYp;ziJ9)lniDU2@8_2&03svDy8lNWvUVg?tiH3IR6|N*pJ5 zWzr!llS(msp2pLs?11xFlANF-MKdy~(vK7IAs!C+m7<8uBuTFez3-)+9k@Q3By?pO zbGZ&!pvGOyV7F*u*BArWS64fSGHnJ;QF59STsKx`luv`Iprb4(^tqf;u>1e>Y2dT=Aop~%m& zs9dFx5*|4`gh#iw;!I^sz-PE+Lj@1C*0I`M@$*_eU{4qh?$M~}RgrY=F=wbe&KNl9 zT+HtALY!0;+v4WXr=>A4K{AQTXWW)#ZwIp(%txc1po#XuQwstA@a?zb{A*}@aNJtB z--GV3lw;TgjrXhOvh1QLh}gj*iNkGZ+{KVWCUg7Wdg2NA)~#D$j$l4P$1xm>AxJFN z8O5%iHnw*O<75~&w1HB0TIxw+hxwz{B_OQUcbsy`hVoLzC8`8)N5DD@s{>U!mrRzK zWTdOM%b56CDOsu69PqV=4X7$8Gc1UBXk_Ftu|5JTS8-&uPeODdEo67Cg1F5fh!A2tG|mO`5Tzj(bcgm>8RCHjvqU>2=Y$F=I|(DqxeY zHO&Gq;2a#YU6pPTeLB2mi_V^4#oT&*3#to&i?f`jJ1zRc__L;Ja?Jkt!n4o90U4JJ zc_Sp(fLi5EhIZ?m?MYXMdwJZsgk{om0qy?g=Zlq6@X^TxRLJb8MmF<7Ze6(oGs0(2 z4wcgNRF2euOlbK2&DGV2n59{C2(s@y`Y7BX`nPz)a428eI+js!uAlK6rQpW#ZvE;nv`HI%Km*4 zljA}sRhSU)_L(#A#Vc0^t7JTj42f|_dgjRCjb_{@i1E2rQXW%T8s4h!LI86%^gpx>QMnzauMky;8KFx}v10E7Y zG2P>iNSspH(GCAP*uFP1V!Xi){fuSC_o1v(U4vOwbyQkEH^wot)(W=9V{k)g0&t_FYEfvh_8s>J9L^$6SwxvtP zrSWiXnqKm?>zOyfT*@E`TBTIybs{A+9yCq$L>eg)Q?MkNB;5AEVDQ(FmlEW%l&Qaf zPoF*oGv7X=<{DITl0#%V=Moel-pq3Z=1@K`t~X5rh6u0eTqmY5rlJGPXQEXp{hA`) zvyu1i-*fI4O-}43R7jG5tAe`My0%H18zZDSRCZ62Hrk)IP&fyxjAU(?flieIi^mL1 z>pgck=mCeZaQ|o4CL7D5F@s%V6hT{^)QG@Z3o~yed9$iu>f5&Wh+h0=)AXKK&=Yq9r%SI9%O+F$W#Ni!dz9KO zrqsRbMoqS;Yc;xD|meH4(@kH(TxbNy&6n{5Vt-85>KD* zP|l%hWU9;4#6w&7t_CfRT7T${$v6`0Y>Y>vsH>hUbnqI~WM62lLCL=Vydq#+jkG+Z zk_iHytv2Jc@<|Ow`!i~ocwcpv-*p7u1{v(|EEPGAaCdRy9Blf3-`m@RkL>Oy31^7Q zW7!u&it(G#T9{6!FrJLrPM6afjx#1+CFzjUguAZmsJ_?Rx7Hhp*hH_kKLd1rK|FAH z2xoYjZ~-wYHO#UGj$}Yo^u`3;GMdJtpSC>oETE9Ku8h5c`Wpdbd-W$ zdh$v5*3DaBy^DKNC|XQk)})FN4+;u= zSV>Q2M!9r^M7xc#cw}gaRYnGy&ejVd;MDqB56e~(v9O*}+)`6`uR|*tesMs}hSpVu zL|r%}u|pM%8UXi16t>oJW6~C2*oYf-4Yw~|T--EkU}6mH%;&w?ETuSw-_b(AZ~gR7 z!`qiHM?`1H?xxm4X&p?<;>fCHk^=llJ3a;t+0js{jEh&oVMTiS6;dyXViwLpAyO~; zo^&sor&()za;TK1H}(g-MpTR-&ln8}GQ9EJdKx7 z^VzJc1T$Q4V@zU#gOw`-z)))qO-#J|2hsLu1mF0`N0LIIL||UZ7`V5+4If!uO+lxm zI};qigb=Xr988RXT}IJQDFv-k&r0y6rpoMUg!993hVystt-6ZVcM07XKX|fd%zGq zECXR(DFvkv@Sohf2e;?*p2Cw<-Qmq;9US!u`>u1k++j0Vrdn{Qm5gufTu3d2L$licjzBwMlA)*e^YnMn{o^EVS0!S{)kJJg0tp_ALD*}-T5VWhImH?k3 zfXB~IM^yzI%S1z@gjJsyl^%(#m_yl+ae?$*1(mU@HAl2L#r*j&qbt13Vr~jr<#zUD? zedNGuiVfN1^@cXUxwejd83<26T_z1;$)~gv|F^bwZ*Q_#n0IU6!^}mQ++gf zoN-H73x^ts4|>3Vp~|#SBO+Yu4!a?j`_xlq!JKea7}?yqaf|nL4+!@q^v0y4V04dt zQZr&YI+GBGKTo5zr5H~JDiDN4bOQEc(>b^`ohCEjWxf>Hgee|W105m=u3hU;p-RDho11=4#EXpN5dTzDJ<$y|wzoJdPl3Y@ zKDZ^C3l@Sw<_E6gkXLmg5$oq*_a+ng&X>N#{%+~YBh3egzCU7;ypacK$s>r;(AF>) zlpP6}`2L@7YFP6b@S0!C^xi4oby69QG_Fv`LIC{cZ^C-!XUD|3FgeiM7D_LNoV$OT zn_*@ESYc$aQ&q5mW_3eSxk3oIbLkQ^==&#q#U(vDKS{h9+2cwGkj5me7Wz4Mg3A|8 z`iRzoW`J95;E$90_lp}F!|VwBOc@*6Ck_weJh&O+%_C*Ypv0AP1)~@uhsAU;WLs+0ynEO_Y*S1ZY0Yr+fnosF_|$wBL|g(lJsf!uR+5YzC{&fkQx%c!;%iviN568C$`JO<$q4170_c*6=`8^o&x35YRXWE93Ezla*;gVbV+IibM0f-fKJ8oA)l8UFJqU z);iXg;rl=KWAH*%#l4OJO6xvQ#_CcC_~NZwaG7g8OPNT83L)S&HUk-u#ViN($0ZR} ziiv@gOIzexYp_beOSf(%R6kpm@Xz0T6V9R$6AqBHi3pw%c1pNFylHUC9K(g+%9tM;Q>mZ8lVWLe)L_niUqGimk$>#4HJ)8jru@Q z_HoQw*I|pO@yZfwxg!yg6Nf$uvV3Dd1E69Go~qA)*fX!jg8r74rx2&fsB(Z z>M&Jg?EJLW5okg|a4`!+_kCU4q+J~DU5hFpm*MS(*FCnn3J0@UuL9?cW+)IzA`jx+ zoV~891xUsNo^X)H0wq`w;(vSRN8veSV_24DJdnn96{$jzYg?9aGbds_&cT#iTQCOU zgpM}+JWo?L2!m+FBY?1myZLll1%^z2KAXj4I48i7HF5P(XUE5VKy zB`SDqQTn}u-~SZ{*vl2ln^peYL8)|Sy*$K3g7 zl;W@P-fRZnymLG55nQnKlsy@*3xi_o%`g*JI$_u-q&mkvPem9|;k6%{OcE+Dmh!!P z`Evh2=TvoahVThGoXqud0v1EQ(%}OXXbceLWfAS5@R@q_eI^pLm_tgvpUptvK2VBXxO?I|zVUDPWfr~FQ`rDxjSZSJ`h5`3yoq66a zs+3iIZDijq=;&|^V*q{T!lfSWElR#PK<9>Y&`^iAB^+GAAbo>1u_ZxsWDLA|=T58$ z@wIYY1Bd6fl-ec)G@}u$uCGIBOjhQ$ZJR9X19uUE850HpcGiWbD>~*<4JJ=)S?&2u?s|8BU-j z&m;i1EqX5w*JH8ynCFqtobCHNFo5lx{d0&hkE6opz*;z66#fiam^ht7`)%TESN!4x zP^loa)XCHxRnOXLGgyJs8^>)3JHS`%nY&~vhBFxp(0CJMzH_i@Q#GEQC1~s3j8q7? zy|o2n&!v=v=s(o1%Wc{axL29EQuzCqFJF!=7voJMBFcI;1*=tZ|13(FSc;3*uxSiD zSeEd>cpO1~HL1XGW?E$uHEzDBmt?rT1I6p%@1O)JCQ6xSQ#;qqEHRyk2w>!FFc*ij ziZ+e-0Ij|5KGuQ8)v2`>YX1x>U**g*pE0x;gDh?(1U%!p%+}hD4MOw=N@JqzrW74& zH(c`ygXK_K!=tOK@Rx7D4c0&J_07%rbCHFT!L2N#0>%3l3^b5R7dOVpS#DyVfU<#wbwzkvE zAEWpsQL8#hOnUt04r@_moYNG+N8pi*Mc0Kpjq%`A3Yv_5e+1|uJ&fQ=c+$s=iF43; zkgN0}LE#x2hQ`b((uE?2T4X^7d32P&qQLAMM4t2t)s%DV*rmCbXMHLV0wM?H(TLiUn0Kr5wS)49aSOiBrBZ3{p8;Dd>R5Z4Y=h>woNIkd0vIg$^!f8Z@F2lsPvan&o-Me>F>rmzyaG7bYLJ6RzD4^gM ze9*@~qc!~ELl5;Tmq@KhIw+du+LvV+0cD&{ecS{jlct>%F3|}U)2)H=h7bZ)R#paq zfFtLUAkR_BBtw&0m}Vde;snj!bPiNf#?M#PHPm&J-~#A+ymR72;-)n;^5U2liMR-w zRjykL-+$l%D45Qe%_PBG6-npZ{W)zJ??clx9aW40@zIW4>|UVfQQ3v7VAv;gzn5jn z`Zuub1|i^agolV-Ii=vHKSV-X9giZYix;IPJ$?N;+`f8sK^a6`=Ehps9FL*#CP%B| z@#6C_G{RiR%QE(;VHR#Zb+#KRRnV4Y9391L5dvlzhDO*+XQ~Qj1P`P#!cQEPl|{{y z^--cZeWm(m$!cB0?fK+M zSJ{i;eC+ylxab9ee)`ELVM{JLn%7Bk9|UzQ!PJDLry_220pM#$H-R;s@rlu$w(TVw zgoPkFZDTZt!Z+bc)AZUxFP%HbYB}dJ+L3?F=tSnhTFTGdB)PEpK+A2+%q(IMAe5=a z<}k4}8v@i0BTzH97S6UUOc>eA<6h}XQgtPyCp-ws%5ajCgIP-0-{0?f)8lL0n9rHl z9pG~NMHCiyKyt>`+klXUQk{msPznmf=f;T!rWhu($#4)V1y9_%32&V{*U4Q{ba@Ey zL6aSEGc~%#sw{hB94sT5R6Ih!Q=<_`nI?iGj6d+8nb3~3jOrb()*LxZ90vRxMHB=D zzg1(P4ww;tZ{tkSC|;)1|9yKpht(tS__2V@>nkgRN^@&R@Kq0Nn5ip3TMHM;GC9!<=bhm3Z0SnFB{xQ;m3EfPRVHRx3YqRyOypLpF+lr^anG+g zb%gOiOq>&x{NgoFY1M3&uwkNrq-ae?trj5D1A%pK>=@3IVlmd1Rb~(ck>m1Bx)09rh?8l)hD*?L_5L52jPN3&C z@lM#>t)7!mZ*s8Y6$f?;;2Z+CY(_!DIjgX zA}2DlVN|J??E4L(p@KWe7R*ai%JY?x4XLV$(o5FuUV2 zuNj%6(SWhc50?svgscf4cBP+_;yE4$bX+`rHU*&|0G=@hN>9a;QuP2AA>*e9oXAKR zI_r}ANdY~aj40;(hgtKB+uL#O#dQN>=Yq?$rGy(o!2kLW{sHXy@BPP5Jq2IB|Nc1t zqMOYb&2Hv+&wN|!D3z>aKKrV*a25qfN z;NFJUw^$=smZMPqf?O!=%)f$d@iE2l#bwdc4 zC>3SHjkPfHF_nrcZIvZFd-i;yMyN9Qpt0Y##-vy( z>50GAsSxlm!L}HauKRUsS?5G<-cPIRnNO1R0L=_{f^uCs?Z+*F-sr4_$z;+2EQN@Y z)!}z$r0cNac&ths51~D8y%j31@+xa#+XJ>jTn*22Hk(0R7CqKME&;WIA1989+ULdN z$Nl(}cqNb|87HPzDY!&<;R#@t%-Ol3BNi4RW(xry+TVv2uL^h9y67gCD-NjEfA~LD zVC*5>F;i?nf1(%9kY>R$K(P=4b|w=L7G?36-oPDzQQnl1F=W-LP~iE%xpVN!i4)mG zAhaYLb>^Z9LSgoexY0lV)Kk&4CGr-(wDVszp$ z*s5|aA~_WT;>C)Q=z-HJKnMYswzi=4f-#?d@Im;@#f$JG$BrfMbxlgx3E)~vn&U7 zxQj@gNrU@(aBR{x72F7~p%i?usbHHV0AnFw*IKBAih&iIqOh%h2EfS$%_n?jUNT9? zP=!Xhx`7$dSR3z+P%5rP77%7S&uAkhye=ic@BcoWUD6rhDp5&X#*8sA5(40R--EBM zt+8E!Sf!zVH@>TefBvSATUFh_JG;B^gP;F-utLCgZtOs+=ICwUzrJ5qS-@oBT#|^# zYM)eoTC2f?p+UL@Zh##TF+wPIzIWjQ{Oj+14-WCq`k#p$YbI{3p-x8ZgyL=+xvw*= zVbv@CJ#zXCtK3->1sH3R_BxI6L6RDe1E)5n8%B9%(%~3n4xsldiF|4}Y;nSCybGJL z7M{9s1NMDPQG}xCl!CDkaA!PDx+fSjglTyz#%0bBos1)tQsAtEHKpL`W5*KQj7Fo3 zoaq-!D^J-mY5UIDJl#ww1r0L?=4PjFT)5DA|N0NJx3&hS$73*9z{F?P;Wb{FPT@PB z{VaU@jW^)tXq0$&YboQQEfKF*NC|V_>cbpwtrS>iyP%D(Yh^r6vL`xEoMpJ$${3i0 zN(uvygn&2h-i6CPLl4MiOz#p>f|U~XJ>T%!$_jjRHcK`SosB%=U80hM(pSR97^sAR zN3UFgOa4Io%E^=P&h9R_P%&!_Ga=xwzx6Hn=I+kI@Bo48a!x-&2>3_OKM%kE%rgld z!4RrMplFx@#Xcbf+-h6cX6DTWu^4TbU}IJ4Tou7(nFaoS{*1jiO>j3GvO|m;6L)LK zAyExT)&}<~DFpo5d+$YFX-$x_ToqnM>e>Prh7s19(M(v37t;Sv%5wOSX&P3B*;)%z zAprjHAHxOmnZmQVDz#+*@K~f$uxV*~a6MAgA2;B>PQ|{g{?T1bP{z zV0|)4D29<%s5L0Rzl8JxI9kJRef;CeHE@S@xVBa2lJR0&*DTHV{jjsY!9>Y!=_0nfA~FCor4=~8+|CS`xza5Y43Al z$QXdT=gxnoXV%x@`#xkP=10dnKtJLnWX3hXemO{xO5hi3Fx%9OQV^;9;_Btc6Ftrv0$XjRVk6}Ld>JzA%~ zSS;A$cDy6*apkf@=f-d>(H*x)X#r$tJ9iAC5Yq8Zc!x8e3AA^%s~_qWGM#51vPS1v_in&y?q;2&;gU+ zgGQsI%^Q+#>?&^zxK(tO=4z9u<$*cp!Y$~X&Bfbm4aOi24E^! z+1>S+t=9!(|LW9c&Vl2yQTe`9xKLLKdnLDaR?V=tB(-D&$TRg8J5gpo?=Z zR#IbP6rhxZ?Vasj+pHk-tuR-XO2tltF$PwbcrGuS?{O_2&1j1^O#|P2t3`p$;6AR5yAUUU`q~i7!kt0BmaL-nhf;p<-X-5NNGs3ek zGqYtn-k72ptwNkxIukp}yvw3WB&_Kz5+LRKc-HuPBV%Apk{wp|l%Up!fTvhXAlKSU zum$Ka-LI+$mJ0#LWWbm>2HX$={=>Jw4bL!uvXCr25^y4fvLq=op2+cXLN=0dmMaoN z43(8#R!Tuz*Ik!lz^yLVYL2p;WM9RRrH0t#(WJG+<%QwJm3%HzK7h&ov((U=B~5F`UabLb$YpZ7vp zc3gMzdv#gDkDfULfAVub*NN9?4ZB){t17Sqhjv3$w@MHE6uE=Ox}HpJPAXJu6~#T` z0VpLq-yU2?=$>%MXnZgZNfozcxfGm+E8b?x5QA$Fh7&Xczfm! z9UnAJla7kfIl(cTxMyGcb=}j5XKcB9PM{QgLVpM!IP=*&OLs8V!o`y(ShXQcUFr1D z`wwHas^DW+uCS7gwR2FAwn?al72<=^L(pW*9dem5UJO!7*uV#ZpQTvWSJo>t!6Zm} z(#;qTLao6%+f(CO_3f|__+IoH?$|0+a*l1W+CpF~tRh9ZyG$UZuVsvl_iW5aQ%;+< z=aRLWpr94BO%oHasL+HAArjqv0)!Jnz{_iE@TZ^rWR$H`T1OC9L&O=1qDb%y_;n`E z_S#%h^fU1SnLJ>MmrCxHgpH=|bmj@updL`Qo5qdUDJ9NK-&LpFS*g>yXDu4kvkK>W z!Y)|DLZUYM&tAV8*F&N$K()m)Y@W#KDEmf0E!p>9Dogm08#fX~G@6Jw=hFAixS5rH z|5Gy?%NYI8gG5RhM{QMAv7?ha9;`*H=tD28)!qArws~#_{OtaIS84inR#jCO^AL5o z5CYCsRgAe+S;7UhpJ~j(g`oBCje&4fW;(iDY7I{!>)poF(JIpEqsahW(@sh#y`haF zqCw8O%RHd*%tzy-9N^~ffU^yWdf1zY~ftw3rZ=Y zC`;HNIkzv1Ds-F`;nqU{s+7h=^_|?O)Uirb4QM5M!IlPa8D?;Z5g-X@ zC?*Sa73Y}P_@XzDm7?#QhYS!D*PhC>%M#$mcnk+?YoO6Vbiz5AQl7BT>SHl<*Lmr-#ER916IC-{ZOx88y2caE1nu4X=P! zxB{xW>Ls*zZP5V4eg0~Rgf4dvhFYlwsth^&LXavomiNIPQq>D_BPjeGKRkpjkA^pD zG0r*fDVEk+SS5#|V?c+NRJRFmNtrB~n4RhRM1_hZVcbJe6tF5KT-w^|p~#IfJwp%7 zN>^^jLz05E{&KgJpAn*G z@)f%j9&eDe@EOl?&d5s>Ygn$Ly}GsrQ%}#t=aup?FUVUjz;-hJzjt031GQhnChEtl z-X5@sTaI6I%8X^5>l`M-8CVfkQiaTt;`uBkTrvhqXA`ASVN_Q^86-JLt^Q~L53}lG zz@aU^G0N(O#AI+gb_Y`(j7f}MLR)KUZBMKKx9L7}>J%LJH@l@qALu}h)P|6-ARw5? zXge?DKvST{rgJa}hdjyBC>3YjFZw_k34YHF3e@3H#z^HrQKrJo;da|XgZP`=TqyEY3D1+Z^(RuoDKb{U)y^M({p;|fYir59yjc|RU;f0GU{eU# z-rnvhv0?rGj&Hx%6tzboe|UY9ou3V@$JCiARrGTiJj0O0YgLs!o@uNm%CghR#$Y>t zIN{eT$><_henPD?S+6+3Lav8tSTos;t=RU-)%4MpfxDF{;>QL(kT^ylt@78VVucW^h>~ z$<{PuJ1V8@G{ybTt}`N6v1=qH>^Ds^8l(5MM$e@pw9#INl?VZa&c`Uzm7t&b0_u9; zu?6i+uA^iV?`^3RoI^?G^|NPTXMH_seQ$)ZLXpn$OEN;!4C|&90>1v}2jKb9sN0J) zp$Zb@Jsi?v-&5RJ*sr0$)F}CHJgWx-?dZri6eEr#9y8MEr~=I|qpKpNgf-v&42jsF zA9`U-!cp&K;299fkY;mkaU=*x21(7e6%DFHWA!X0tSA*d)3ftt#Mw-$XQ|+zDi@yv zi)w@xBNm>qDP_wk1?N3@q6a!7vY~ikNA!7yV>vF0SPd2kEEAHNW1|sVMgWO`(o7C1 zxd09Y`9$M?4sS$>J}dVO@H|&51(yyEVC*|Im9=m%8b#~aApE0HWowjzkr43RM;?J= znaYqe*P+*OnQ1W&Rhyx+G)7+PNlQ8C30OO57mG9Qo)+^GQKUdYQy%%tah5Sn>r+Jm z*Fzi5Yua;sVcIsv*BJs<2<}0@e61+pk3RLOn80Eoncx71leyrFJtN?=&`MWAzy+=2 z+Tt`EG}HDE9Xc$~6xSnWx@0Ud7p_^ZmvkB;8s*SBTqN1u=eU4c^;nmi`qa+|*O{Y( z9j>gvgesch7Pv8RU@gc2QJ}B~0z1JiQ&}X3cmAa5 z_nmj(DWVF>C0%FBE& zNkY>qC7ETCUtUAv54Go3h6Rg%HY~upX;{~#@IhOI-dwaoCEV}<$1rV|0Fr5m0u!ZN z=mCWvtu>5Rb!z|5;`s>E*h=8PUCKwNUA>i$&o`NU*yv8spi zgVu1SX%bmriB#J(gFJPvTyW-5pq!%0H_~hTGod0WEn3UHwsKj*$hY6Zfq{QERI>)n z#-)^SNZY|Ot#TYfvG*u+GN+*~SyV9IKgXLU2K~Qr>sE42+*<816hcC5Od_c(gn(C% zAHoxBYYWB!Q3Yi6^m7#;@n$&6$cL`Ouk7tWxmAs?AX4`i0W;7lz5}*urMhF3$ zRn>Wa`|if7F|g@eT<0`VE|5H`%uuX?R|D7mTsCH+GPcxr11Hc2Lcm{q=}R#6*SYIl z!q;9wV9<561{XkFm2|BVaAYu>AxV|aP>*8_C<^%0?c4Cqjq6$Dd(zJL$-}&^VI!jO zyCmW9@fd#N`R7@{E2i{@d->VRm*I=2P9??BsTdDaklk~KhjD#Gkfbq#iGGeQK9uA+ z#;&@mDiCwd(J0fND-pumCG%`g2P>7Ozz*J90>P{Fy_&c15hnM+2Gx#&;ZKlKiOm<;@)C zy|GQ``I3o;FA;s=)(g!(IZy`<^aV-^=zXY-i8}7#btWWXbJ7mo z*yxQ>C_1=s4z|m3@tjCPIQGFyXAtz9_>fc*6sDb#Q5wDnH%W}5mdyAbG#+F%K@!5@ z02x~gm0xp-c+Nn#hYPe>ArJ~C^j_A|7c1el7h@LPlPb=}FJ^CXqadji99Igq(ZSgW z0l)sC55WZwMqMpSP)b5wFBI}3d!?>B^-Bb@#fiJYtz?o=l;yBwF}}`VjY|t2+&6t+QgWs(iU`wBQljyJhR?qZ9HB8 z?dUXL)CJH70GCGJ}DXcVeVRJxVfji%A{B4eI_MN21Z*7vQY8Kq#C zy2JUA&&U|KIi13MU^9pJpIQTd_9LHWX`38<40{I%1`L%@s*HhosFns^H_Yu*5g06M z?0Wl9Dg`(E^SG%L{I@^(lhJjIyPkq1;r;et_kPcNYLjFnpMwgQ8UQ;QERjs&$#sup z=8~O3?s#VG#kG>TLnwBxq=Zpb!QOnHbWwsnIY(LLT*|`NLxSSGqT5iS{@rJvgI~RQ zbCKjo34il}2jDhlgos7Qk(z0xS|A3twT723U5ZwoQc9?+GCTe#eI?!&MU3GTbj;n$ zWY(+{tV#*Dc6K7(XT{ra$ASlGzQ@?bB(X{<*!G~pr05K;oCpLMVptAf8WPtXFJQxp znfYr{j1GHg3>=@$V7qPMY5;u?fE=eylbG`0vy(x>r#Ey>2>74>**}9{dG^_4ft)f1 zu4F_eJpZkyUyd{R+=Iltz_Ac;5w$^wTy^l~$<5W0?1(aIB-+bc@ zc)}l4SX;U&sv}XuhUVs4YnYD5y?gcR4?Y;}iaFZo0^wdPZAEKOeH22#F(Kgp`p18e zbOk6_bQ#ar6-7eV3`sBM=^7#6I}be2F&R8%jD8MoE!K6N$iNEkx|UmG&RSUUrX0(7 z@swG^(dQ=C!mO&GEV~MReRDnQ*S*w$N=ldt0mp`_B_s(1;Hel(6dAYJT_r`{6XI zMtfDU?7nxv1R}>cM>%UdTRSgQ(37O}8Pd3_V9Sd=+)o^&z?Ec3H~#ZhCKj_lu-eyLK&{~ z`odSL3atMONfqn=J$JT4)gD36A*b=raix_~T_8aBZ2?}g3xFRwgr`LT+E>>*vl(mz zFpzWLbboZwt13`ZWy#^qc{2+k;5TmFinfV8!3;Ee%{@!YS+Q1iuakkRNz1iK2kt%P zRU2bFF&S$k`a1%6a$N!`p|)nJfRt7p!WUO)ju9w1${##8pVN*>0@h4p%zo3r$dA_O zdj?aP0Dx1B?Il9 zp3?pNnsmlMi#g?RjP3VA;8$c>8^VV#V-dVpC3_O_xghb=Pfs_;8|P173{F|=gS%Yr3?<_%d6cBYXu zllSe;qpIR#sR|jUw{4HdaB((+4c+l&H31KH z?b!+rt%aYwaG_WE^o3~5f{Mk7hcM5M%S1<7!~W(byOA-VN_#2YpFKE8o<&FixS4QW z*Ne)IxhJ9G4X#U2LV7j;03ZNKL_t)FX^mn74i5N zZ+45+xt3`uUv3)s`t#5CT9^%~+VPwOw~n1su!k)meVZ)aV7%o{pE5`+Go7v{h?il8=@j1xSq@^{~S6Rzg6UBa=YRkvM2uiQcbVI}%9 zrwKvp++yC$;5@?5{pDA`3jgXie{)cmA?Tv-RAn;OGRkzxh?HAAFYos@))kqGRN`$-ShiN}^i9Dz5^z^Lf%J%}{0Qm~2J=**t)Q}uNA^K*wfrv$ca z&d!amDCmz0_~ZieGU?}dn9t{NhMuc#9nw>e^V`gGo)sOAf!>puOO*?$=K}X<&yN_X zG_KaVSK!6jFQG8Hj4d!tJ_7*T`H=;80MmOaGvgB+OU52I#TAL1>~e|59VG#KFZ1QV z;K`VfF~C4dVZ&Y45o2>cDoYTUv`({ZwIt&;#=ya7)S;A(=>R*v)mW9)AoYbF;JF1K z4NaJt4+g&J0fcB+NJF!-KtE6kfJ4GI7SbodLXx={)_;zl!T65(tOaWFDO2%{h_Pq}9sOmR5#6uCsyBh1>BPe5W; z>nUGTXA{s1W-bI%5}F+0nbyb$y2Q77KrJoY{}FOh<0=O24|S92JcRdu?(}K+(CO3h zYm>=@4@y4ht!384pMUC8@E0$<(0i7z5LwuihDv6T{y=l3Llnw9STE76#;RfdJ)<)o zsw5S%X6BNp@Om?);CR)r^frmwp_C;P7z{YU4DbCxCg>Sb;m)j008z{E6092~dd=%? z1BQ_f=I&*}4-exQBu*8?k3w9ktd57t*dzJrb>TG_WOl9Zq`5@lP9<6fv5Fl?GC19Z z@c&K5ry<5dt;lCJus4}>-BK#Lk{P2WRVjL}(wI)9D|A*emaz_F1-P!25KvkJW6}{y zTocK2w?e=#zWOS>_10Ux7X6Hg>R$>-P<0#0#f7}~$VjEUkL8ZW;sF(?i% zDq{?+uB|Q5!2WwI)rmmqhomG~pK%W1?t?BqWNIS%kjz||He-Pv1P0cXgaW0A-mXGY zeq1|}zE6p4FozE7M=xK7ZN$5k7@^y1wWWdtiBeTjz*+D2j8V@$(*e{b#D*pDK+2$L zvCU-f&?47oNdhEZLL=whU=J($Dp)Il25t`dpMG|g}D&0E+x#W68_CE`~uu3 z1iZAl$xjsPu<>vO* z+RkQE=^n;I3K_*%Y9U~MZx5bFLSMoIiSbB?>VPK+ktMkCNt!gk@{$&v5@y~uQ6k`;8c41} z%j>y|7ZXaAkrGZ2x&)P}+)hDg|{}z$R8hlHGip<2Z*(i_$(ue$L+b>Lj%O zTVvpZk3PzZy0pe59SfZ31o=cfN7Kk^7eD(39p+rSjdrjWn&4i&iUeiM<_a6M-(@%p^2Cg#BfuSQ+1;6LqTwLqufq=QfIpGl+G@MB_t?>ca*<7lqHi&=s zIq$(hk$~jE{+@{A}p=Y&X!*lm^fIDH9=Qi2kM=w1Tt_#l z>K>2-^HlroLK)}CCIf7ul}d>ggjp-$bc_9Sc_5vUQH!|`98r(>RJM4!76F$sybSLLrXGBEqQ>isf-9jpq z^Eben-7ot4v22dt_*Q+C2=)M~){jWIctMkBRzu(D9ym}*34iC|hv9=~&w{ZQ?ln!8 zmrn1|F;B}40Lkz^$48?C@XDd2bIAj@Pa4u4I`38K!hvs`gI(-PKpgz8_{tRH8>s$( zNjUtbw~nxBiAJqrDyY1USr082v4LFkIw&V|PP3v&T-6v}<6^VmzaSfRk<8 zS<5n-0*PB-_*|%{NJcqCsOg#zusfY1%!N$W!Duu}od2}e9i5mIy%R4fZ7h%By0fwp z_dD%ISwZ82nMAZ6#Q6IAQkCcUWy9Jh&PIX!^^W1uFE zN4Oo`1$;x?trkj8hPLT40eK~v8+PU|1v884Dq|C8Gs$MHYZ#42aYJlyh*u5b%G0_q)*y1h@QXHETWhnDXCgU_VjU9nQk92Yhe)U9A3f)*SD;aJ?Xi z19>%2<OYQ4h>S@fnh#Q#ExH1F~Tf=K!262_=!DixmSF6H>y6 zP{KGTuUZJW#evA$wkJXT`uaM2>!p{_p3mVz(zTY1ERvC0reoI=chWtu6{VlyID}i? zG;!}0SW?1D(EKk7aD^l7WV1lJ(~c#&x92Alm?PZ6bUKX%n#+tff)%#$GRRU&SQ7&F z3Glg3`IL)<3mFP==2&XU`NS!;^~`VTDs?y{_lAD1LI}84RUnm4z{f)cCBEL)i|J@2 zah+2+j1~GWqK$Q}%uX&*l1jQKw@O>?N`Vq-TVYuSr;ue~xVS?<=M0Cyp{JCEMY>o_ zX;scuwH75D0razOEqv(o=}s~*WWYg|5up&Dy>toQIC(Pue^n`Hg@9A8$RcPtx?Jdf zXsuzI(NNA|3^?jlpaLq=y7|PVOHqSaN(q$^a39eu53MqqmD2Wil)**sF%kkEBUPdE z*EMl2&gQMPFg2$03s(zn_}$3_4suqd-o1=grbBoODJ7Ibzz_cTkKr+9Mk{l^!lY%U zwPt;l>3Hb|siGF^KNavO%M!6S(rO7`$2f>WSlgTDDWzZ)RW!8izi1nZ!IrcleEA3H zXF!Q1cbE*#10|VBbAQ&BxYz}j#KhX>0x+_~6=)5HtniNixU zfjmYe!Bv&MNNS4$3S}b2Yi=w{%}%gcy_R-=4fVQNMAw#w3H4IDxO53U&*DmmYnm> zT=y+{W%x}K0+A5#BBFXpA>gh1?t`~I9~-|{ z>n-ze3oEBBZyC$Ku`w{!8cNh|p`oV{7FZpU>V*7KhJ z`ON2@JI@1f2jGGLELep6AI6)aepUEnOjiEbRXh|(RXS5+2 zI(7DYUKis@dxcXy=)^N(9WyOT&mut?un_k`;h9W%kYnVAx#dbJsGA0Sv=7GDMdGE~ zP=uDoWBA^jfEx<4dd!HZ2x=;gJ0){8CpCt~WTWoBsWW+pjupaQobB>tv$~-7%UITe zZkm(2q|`HnbuEDuv@jF4LYJ^hh)!DYg69_kH|RtzE67hCnM`2r9K3vV1V8cSn{b-E z=lQCFedbVQje)w*;Ycy0sk8MVs|c$3??@~*$6d932${rhje3BUQNPo=88_8xY8 z?`-6)IhH(!!+pjXm?;HU1)@^PNlto@sYwy%G7KzxLp88;b!P3tq>UYDZH-cJwy=Sv zPRR9P3n6|6z7AG#jY!`ojXlVHqq9D0_#q)vUDraR6#QR*{KxRSw{C5;fE_YqhcTiw zT2vbYmdp&hI4|zHE|Gw6^Q47#6~Z8AyNR>Tg|+baKKMcS{zy#31UaP?Jl%Dog)3gO zlT}#j!`ZAfgb=+Ago40Yc#J4Rg0pa`sfXk`3OA4NIR@wxl@%#9(2(=J3ZGZb+o791 zMTlx*DNKLvY$1J-hCOA)8fm0MMPg9M{%;wS&}U;Qfl z!1e1;D+SvExuXgJtjXP-yi)L<8#h45x&PQ9$15!@Y-pyCHJ`z<)+8rAe!#zZZ~!lE zZN&sOJ$NW3I2!{y=-lk3`98woY4 zm4f#+4Vs=%Stid^RuWjvY4&kDXLewSE0Pp8vHNBI@V)f-<8Ypg>-fysTKPK#o(Ul!zFzRt$mE$y!IHer>8eV3^#h4=C%tE)rcK*+}^NML0ZW-IfMZOt0{CJgD*5=ol?>czSjE=4&bTn z6+CtIDlsV0gN_Iv(8e0L9yduGEljnBN63Le`4ttL+k59S!;5qfE@mlAM&fiBCKr-) zn=Ns{q8sX1x1g1RQ+s=vHQYHo; z+frA}lENm9_n3~oQNxUTYi;im$M%9Viv`>`bt*I3sg;7;ZJUi&IX_^)UBR&(Tgyh^ zo@K;jnjw$ptU!EhLV*3!fsUJD*L4FUjHH>|5ck#*l2OSFfIH_XLY(5=$Vcwog9jr^ zbx=KPoyZMRxJDk)sxzi!RaMExR+CI~V@yikp`ZViix=TzM@OP8Zv9;~oSDtwmS9ez zwH|~T7;6U3RZ`J2m@AQvASDh7qmGKOLl@3L7o%}sx_cMyBiB?i=%Mhnjuw)VMdQ;% z{xgdVcTHjwal`%cV~@ean2b>#qG1qT>!&VVg21}GK{$tSZH+N03t2~Y?y{~EjJivF z*LnA~soK_B_kkJY&+Zf+&QWJYrC?uxa_RfrxN(1Gx`EM^1FOwR2U9x?@JQCZWOKPf zKI?4JcN`DR=WvGlkVkZb-&@bZTozRY-r0>vk0di1z?Urg)G=6-7r<@7G{_TT=5biV z(r3-Q2HGxp3Ix{ial$Jqaj@{vLh-=KmdGT(b?H*Zj`rESS;HwGMB<^VD!6&-6dcTE z;y%lLLjswf2V+wLn`4I^?jx7k=!ovEIwFxaeg_;uDy87GPylW+6+3a_#76YX2@0w@ z&cz#R;fT5N@$p$Us*C82Q3_6kIzx`AL!!4fE0pQIJlfxf{r!D-s(_60(P&K?B%1qf zjDgmBxKK9<89_9rBWv9We36EbEdTM_Z^J+O$Vb)%p=2*gQ)H~Q$@`opC~@X+)=}0& zw6lDWlb- z&gRZUZbZAXkAa$NPZHfP!J=S(r|fOmPqCtJUyAf&%gW0fxBTUD9C|yx~@|<#3gQHBr~NH z95xL!jCX@Navj~yd zCzqK0#u&H|s<_t~aL#9kTtl7@Lq-f)SL=ON_)}(kLLFiQRnwxL+N2f&lMd<{E;eMO)&uwkNwdE4FiAOR=NlF1En+_-x3SY7IvuD;iS(z2xa0*QHVlCS5zw zo~NG=E}1B0q_O>dXt}R?A+sUl^)&r^O)yx5SXWbttaOn5%4@H|4{mRRj!Ak>knI^Y z9&=kV!AS}bYvGWm2F8O{g5GmzSuRlM=Q*QQ@<^yk#hfr|p+(oSFm}a1`;ohM;r48n z)r#H9>LpL>PzTt!lmpcF%YvE?s^frcU7BLo4YKV~s9=3rc{?J(} zb|({>coQXJx==w^#w6kbg?*^4W~rj{&cPCy?t-C$BNmg#aa~J#$Z~IJBtaK)K>AN?Vbs#0TuTzr=+>MgJ5Pz;UCP7doa$gWg zI@n2`4*@=Nc-W&(L_VdIf{9Xa7y=x$ZF=~{A{I$Xq(kT2heqI&WXcAm;J$X!BPP!E zYtCA@HJQMkKoH~`WF2bQsw#MN#A|*GEg6h1x-LB@TZ{uxv`i+QR+`~Q&Fnz7rFCuq z6O#sM+LqQjo8?ovAa5=x!4P57ijZQp*3c>i|KS_ofbTx?$ly>dITa>85V5K42)wx! zO`(u+TnpEByWrVBCfB8ZSFw0Z?%Q92^PL--?=t?0hi61(H7kTYVv zhZhbH;qHkO1J*iq;M)@nd!~^%p5@Jx-*s%CkYZksI}$<@sj8~rD1?k0I_d>OvtW<2 zDbP)d%ZW--5o1V7l^Gg-;6vF82aP2ADv?1_9BWm#BimqVTWzJ+s>s(R4MYa zWT7c7+R|+9;fEfQJGewJ^n(rEI}6v(o+X4u8AekC8g-lur}e-l7OQ=uwCLKz&1|qx z;}HMGC{DqyaZDb!^d1&f1(&^tZG_jzCNv*`#0DF-TIVtU;)g#Bl~QmKp*f}CLH6@l zbl{v6H@F(-q*XoWwD}=CozDJRF{OJE0opXSpz~%<7~~!6Zrj3D@4&K=REdDIKbgRi zs7J=;m{Nd`BpGUao|TZzBc1C#6G&9ARK(QI!DKQKv$GpxU>>;_v;(qA!9V=er{LX- z1=P`IQz-=(=ZkC&VrrEVOmTeF3|qm44G$nJF0?T{|6t_0;rkvQ9v0VsTUE(h0*m5w zueF997WUD!Eu2sa-dROO!lLqFl42TgUr!oz4Ci#Kuzh)!)=@vxRGHxHRqXFHBN zXkt*Ps-lq#y|!q)pvl;R7BY#Q9MgtyCP~??E8%e1Cd45ViG4%YKMl3D@S&3@;Sthd zWL=#xa4mX%b7#OY0k)`*+PFj-Q z(9U5P)-na7d-txf&!31*ghL?~HUa{+Udv`Q;~NXNuAtYJkOw1hG`Rh4Nh92qxC@0b zhl^eE5)%`N$2gj61cItuI(ZW2! z$-lXz2OSHM001BWNklUsuW1h68OvK9nPNt(My>8Uu?sUzY3^>5Xm8dWO^#U8L1N z>v|8ohg)%DqsoDONqbFVa=kUj)`4q*I957b{^n|HO*kAJQbR~MSj-g^;Q>j|p0xCREM zN1@l=J~5xeuYd4`jBTFCa;D$ls>pt(JPB&7b2OR2f^6gz>fNntn8#+KBIZDd0vtF8 zHx3T65zmZ`7tMzK(<%l3=68Mve)WkbMpZ4=T39Lt_v$*K2#$^E-adB@ZpNa+&;o_+ zxkiX+E`82Q7`>neiDrQ&bW}$>Yo|5rcn7D*Y<-V8^l{&FO+D0wkgY*9G?lTjM9}p5 zT7%Lmv)NWk!5-r*gb)l#i-BVpRNr=>T4&nRt4hKD{tx~E{K^9l6t&>E!0*I_oKlh( z{Sy1JYBgNSL%*C-Fo}_+h7dlIDGa;8G$ULW2xNQ~tqSH0YZo#H*9b9fdwYAdVe_EV@5U3i4`0h$6_~w->@XvqfhhQS?iOxA_eHcyFtBn~TAf*CXYUXHR zWFkaNxk)?&Vo=((LyO*8DQN3D zK3hE@l8)&np{%zLj7g8{bQ(tj*4ngx6vM|x5L~IqFLEu6J=SQlX_`VRrdl89xY=N` z3npeMrQl)+u$W9z{wr=SJ5`lwN#SJqy44$}6e5mx=~_SkG5g>L4@ORlHbR zAta-hmNR9Qf+u6fF)pkV(b)_SE((#L0g7klHVMX$Mkw@mCGTBoV1p6~&kjgC0-@rp z+gb~|L|dLVFp}qO3q}zaY4j|U*p$o{XjNw!u_91|79*o8*(@)tSeRVZ=e<|1Bq-an>%Hwg{Pr7fz#Vc3Qhhl!9+4iJVWzU_$3~! z+ji}>y@AMhmtQT!)xx<|gA)EJ)!SOx@n$QDSk5%M?Wp7|9 zMw=jJTI^6VqEZT$!EfxoYLcpiIrUe(hdpcI?|D_(F8fOXCFwX`2G{-(dV=oSD^i4a!=$Qq@JMwyG+qoP!->;E}~5 z+vI7-y3LB$O|Tx`>pA=EdIRCmY7OVA3Z~8yYu}uN_x9UwuT5j(-V#DRSc4_RWDx8` zpm?eeU(Y!0KsJeEgGMQMs9oPzVAMG>B0pF z&Ou9we8dKIPbl)P@9n{f)KyNL>(jw-USln66%PLW_*z=bp6%V<0_o;2 z335Nf)51vix<0Ud>JB_B7-+X-#o4z>^M5*Tq8Za2BfN|{W@Y~`rz+7!zRd_T+8C(Z zkgQh`kLuFKJ#h}EL}%G41^@8%*I^lF@ExjN#s?jASK^xuW6F2-*L%MPDl%r zP_+f~MVH`hL`}N3O^4H1pperlV$JskLVn&Y5VW!2cu?^7 zFEu<8+%9rM;(MOn-5rI+u>tdJ&5F^(+dIc5WzS~Q^?`0k)L+vy+03JqBkYBaZLwHn zm1avWBF<%6QhkO{!BdBa(S)KCvy%D$yJ+d@o=Za9}_2~p&*xrUO3DKvV zg+68ib5_uZ4u~dk#(jqg^R=NyOKAXOu%(Yhk)rfL03r{m0*g z-+kc)as8IO$rB@*ToX+oj9Vgv6!J7Eg8%fL z?<6?VMFLvUW|PRgxYX^q20dxhBy)0psPnza$2qHsqlmU?GLw_cZHwJw8tk$Zx;JqX zRSI5iThMVFup?-YeLP^Ey8r&9pC3yl>~E_IkSC{k2jNaR7yZ&-}zisr_Q|V+SEvR zAF`xSyjDj_!6#0g23PgQU$f|HH<+ul{j*faP)S^W77ZobA%uZ5Y0Azp!(0-r)v?nT zan1BPbe8Ot&B_=9cgkWR&vacT3*k1X{APGevWYVXgq=|**%CkLl4Olus7b+ig&wdJ z8vnk_m*H>TyqP)}E*I&%&$=qUadb+-ci#UjEXe|Nq`Py(Q~msM39r59J>Zq55YD;R_ct#K_U)FLq5RO1O+H z@9ddl35!4Q+;ecUBpcIOJlLejVQma7sw(5FV7O2sH);jH@Wn5})3e#&Gq=&MdqN=V zSscOKYf-`tfD+PDAwvv7vHRJf+$eNet7o*UfkVKOa7w`ha&ZihI z!WliW(z#<_kxv54fcyXVfq zGe<{7hBsEB4VBCo1Ft{yP!EL**VB6sH;jQ_jSO|AH9R?=!?)i5esGC}-oOPim#0KT ztY~@eG(PZ?ZW62ZI?Ix#4?NBzJCyY}FQOdML27*8UE=kx$N`ieusy=iG7DoqOPp#A z7tfz(E?+)51)@V59+VV5mhPh^Inb4JFzq@BR)%vu`%EjL_^E`TpVD)5y`bxN1>-1A zHX577d*|Q)HTeRBnL)N}l;sK@q3pDzfDL%lN|uOaT?6f^?)O?74N|T$(=CH!Ko17 zNU21E!|~cKhB;9}UI@K=9C?;f;+W3~riP5lraTjahuIJpPw61#1;L628Yu-gCKJ#~ z!%kg8PzwI|$9@dXMH1tG@u^S2J@Wev$x@KyWR(5Rok^v`T0(yVyO+t$ju3}&pXXyb z&2kwQ%cZ!tom{(Ds^nB=sW3kVMBtltU6)8nrkHFr4o@A%3;FrGcj4C6t0_4v*=I5s zzZ591nN90}wH|-(gg|iOuhWq(c0YD8v}#{jn;>8(n7Zf!YjMhES$G4p*i*6~T&#Qz z*N=|PVq#S}kU&HpfH4N%y;{M0clJ^xUXf~(F3QW~Aeb8iXOx1so_Pk&@9jm#s>w|@ zl!9;Hx&^1H?wx$@_pDa%FF*ZhmswSxcr-~KUNoAhYH*PeYAe*NjE zGeVauNE1Edzo_VEJtdnXMd-Y9aGrG29L6lpq%$YSH8b1@a;K8KwVQNV7mpIAF=so= zY)B{g8stE+O2O~_FnAbyYJs@NZwd2sPmaJX%%hIo%b= z(SeY@y)be+v$X~H9US!XXfnn{A{w3{g;=Mg9KF9nF z5|NegPG(BMFI~BU_ge18=>;wMl?MV38o_}rf1oDoDmjyl^soK5pLz=ZUW6^Vs}E0_ z(gMShcE9^g1GkidKmFFX;0qD9J-1#So(nO3MK^ui$Bsa zTx1=u+eB8Q8#8t1B01yPHK$!VR=m*xE!*4&HiJ3Tbz?Gt>un3mu7ePbJv3n~XAdS} zjM5G7z*_jTFMk;xuBvp6(&y6bL1rB|C0pWH;o8nl?*}eu)iw8|KSqd9Hs6XrOLOe4 zF|e9U(rbqh;6e!N4W4vrbUmXjC>;~v>^vP9q$3&->KH-HjG4(;3*Xq@1{F;~4wQmh zj97IXqN}tP^Jm#-*P5DSNQOTAd+~yW-Fc#bt0YisA9`DQf0d_D) z_UV3k5?9S(en%kXjN`;c6N7Pu+nk6P1Tv$E``+(;{prxGf` z(YY=XHVC8A5G|>Xhd71hTnO+|+rqcM`Av9lB$H{ap&_IxBaxHX*nuw6RTh*H-HnJn zspcNQu_$TC23HZHm;|q4sEm&HvyIM7&ig(X!#S99gBS8TyM^u`u!oo5$1UeFJ5f)J zZK!;We!pw6U>qZAov0gVWBL+4NHp|gk8F?&V_+5MccpG!3-T6Qh}5JrdClT^IqW

ps$8yGV#()oD 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

JD%a(+U~Dg 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 z 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 diff --git a/examples/love2d Threading Example/Res/Parallax80.png b/examples/love2d Threading Example/Res/Parallax80.png deleted file mode 100644 index a7fbb2563eb4ea370cdb6d389eded7f0304c0573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358538 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%0A>t^OG~lcmk1FJ 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�S0)_gjl+cXw05s>NDly>!dg)nqr#xB#Vf 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⁣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 JPDHLkV1g(6QC|Q6 diff --git a/examples/love2d Threading Example/Res/ship.png b/examples/love2d Threading Example/Res/ship.png deleted file mode 100644 index 242ca2b8133fdea561e2a38b7b0ba8a2016e5029..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 427740 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%0A8(Gwot#o;l^#-1t|KZRt~xL21{b=PX( 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Ξ^u?$ycfY5tm(=QSaFhVA}WhO%9^>4_CNtO+v_hV{HNaS&dqkwYh~ znzen*%_y&f0i?&LqGe@9>psA;uGEj9b}ag&7jqzL;rMFv;7n_ssqI{~eLAQA+09L+ zPit0BIm-R8f9%lb;+W@l;~Di^=Pp^1j+zBpaEjYHy5yf39Lw)sD%WDEd6hsu!_=ZK zDbb6b@}#3fYpSq^|AH%G$vA~xqE)@z!m32q z_jLrSF2Tyf8_W}?zjejY@5uv(HR=Og0}j@S1Ds8M4#YFT|GYShG%Vl0Dw7Pd)N?xj zjGf%1$kQ0JQ%)^^9^Z4Q|E2glu|XShIrJB;+kcRgj*O@_@g(&Ka7Jvn40ZlWXy~{7 z3GAf@J7H-9#&~>3toChh{9sgkexC#+Pw)mMQ?8fAIJw{?b2aea4M`XSA-{;Z;41i&t>om87xd!#(MNROi~H1M zQ2?Q2d{)xPpq&&WGWG&G%jwwGqQ#Oh?$~|n(G{Ln5@|^1)e6p$@ z*D5Qp-`ID86&3*g(xYH!>E!`D^A=N@g@yo-uA`=pY)*A_K7m$6F!&`NWt+#U6;w}Q7ze6yms z>%oa|5Ds>QkG)`2h%Ujp^)@F?i;u4Mq?n|5E(|1s`NiX-kh4#?fax3N>$M#ZhqwHXuxzyQ~%7$V`O@{J7*V)wZ< zn?t{}EJ*h@`zE-Pf296Urx1~rZ1&mX*i@d6c8v&^?;?HepG-O;0FIN^IaT-n z!f@yDa*cWBGwP3a z5Ncy6)rS@&o#Y$BJvPK3>VM?~P?N!(R<2IQJ9}JXzV$oC98+H%vo$>73zZt>e6)XU zw3PQ;wijG*x1oDFtP(WF#pamIX8+Ro=-ppTvZLoe^fRT$HOF^ z%>Gg{m}h$WWQ+vEh{?EQx5`?mz?A-3VVx~*%$PuPzWf#9wOSqJo&S~G2z|VNVgtQF zg~n<^zSzdDOCjDk16UiAVo1pJJD$FTWJiIaa^fv%({321t#olg)JV#D?PFda9=?Gj zx(>-^A*mDs{_id~>Qw71WfA`gy7CBobhw%Yc~C`9btx7I0UI7NZ2T%k8OlDuYMQ{2Iykj}&5Wt<=LiB%e9oVdcKv|2JL(@sXi%hqEU_GdkPmY0kMfh$ zv8qBCK%RiHkR=B=k{!p_^gS_&j$PZ&F%^@zVp0HC(tyq`{L2^8xbJ{&{P7DWPR zSm9q4yF>&pwO5C(DIYUaPdLlI^292o>wcB5G}?^^^MD@f8Cj-9driOP%#~QEx=gTr z6>$Ts9o}$)2od2T&;PNeNS4?ZMFzAK?tJJjs+=!`%|@VQ+})1pU>5mKzPAacwl;qr z*DZc?mYlj@-Lri-Of#}PO-_NOG#!ThcKdSrQZ~!QM<{&3UnZOFR&FQVrRutBRDtf* zI_#c#87M}!C*Ux%Kowf5D#Y;y~sRwc+exalB)CeU&3%7rFMVWNv>WN7Bb4agYQUB zGssoStBb2?^l5k%QB?SsypxYwDJb5PYtOtO#cUNzA5&ZTyqMuAr=Ma1=kQ z6pef>u5d(AczDL_Jo(|H9xCAnJ85C9BJ=LR1DJ>pThQnA7{cwd4t>z2fTn7J)kFOo zjw!5!AR5$TgkiObbvWQ@r;uk>-;$u>k=hRUGJifeR*kzlRS-8m5Scl%hXjO;Okb(= zIH^+6t}FiM7C#H$G70|-c7#WClcD;%YeDgXsEQFQ2|Di7m2p3GfP9MU^J-Pv{&!kB z&f@(%BO7ZA=mIA>Ab!td9ddX5@zK`zV@=rP0=F$ePtL^G1t{GMU@T!Tg*8&EXQcr6 zv+I>5l=$0E>3gFnnl>e2Yi_{DVqCi%HCx|i(e+q8!+7zTOGF_Ap~BzW z^(Qb3*>q%4U?)A?^7HC~nT2lTqDgejJ9b5J9ZWlM8&cM@zVK1zG!p#UaQ$^#V}Iq3 zsWOG#BLP+Kk?%3}>j$r-c$~ks*u=M0xs_SD^O(-(F)A-zUJ;hV0U{pQ)k%Ett&bTm)bZT0sjZC`H1=mBih zhX33O!`0a+7T8}O)f=#eTBy*;Z+@{ye8@*M^`3_)=n}Nson(Z=KO^I$+{%k1F z4zIEr0Zc{DY^`0uQNXA&BvxIads!2RVT!SqSLkEB3aWL}Wh^e+Cq5H|M z+3jmB&pvfn5Wj&gM%A6 zeS%@VL}ATpLo&DYwPKHlHtNaJ)9PE+g2vb%Fv17eBdZ#A)(_XUjArzbUKQ^P3=}(q zf+gIcp*@+;TPFd7q;s3+Ni6K|qd(*f3p+;b@;WZC1_IMck`3DGBPf!11`ZT`%ucfm zw}vC<{Gf8s+&LGwuzhA(x&fQ->2{x_&V3$36%Q>O)BLJi)`anRaLpU-LyNp8Qj)C~ z9jjHnfihJv@=~Vp+N&FWy?SJcGU}z6>aIYb)#;?Ke;a0~l+k3NP3ui+-SH9LN++-s z(=eU6Yv0w&MI2YfX`pw3A612S5PIGTpqdyzeYmPcEwv(_ziN<2nM97;rayEHNsi*Tj-*=y50ZLQjBqiR0mQ} zXA+@)_gNZki(JU6IZw&(P3%_APrWHy`K{;b`%hKsIMK)ZuH=d<6cJetFZOqoYs%zd z*cf12r`e$_lLwfP@(=6uuC{rX7mGdpf5NyeR_{WB zZXFASn#DzO52pJ*ck}*&t5WRL&E?_^{8^ZRpXDOmWY5x4vg>u%UFYByzKxcdq{-N$ z@&O>`JNO8)y!Awb6{gtT@@Q`aX9==@ef{G{9=*?tLts!8r{W6WHW^>xMdFa&xNqU+ zN}G!mTlq=o-AxdS^_x`|_|`KX@5%LKOIgT5iIU->sp6@Re!@FsZDV5I+Z`i&(bCF2 z!#>sIRmUMBJpooC#QEw>&HLSAQ1?2T#RQ4&3RnAIHkXz7kdQx^R7Of;3_oc*a25Ih zzgL1?i5YY(f?|*c?PwCfcwI~4fFYz?wh{?dw?A#}znjdIAdRI2#cV_BDx@s&g902X+EYHV-JR9_OYy0k zTZf->0_Z`wlP|m~UZ}pUI;)6%(4EE=Z4zNqCXbb)O<&$nZk_)d8;XKbfcb(QoRDW7VYJ z`IIPrLG3dMS1r~WfKLi8oJl(*+A;G7JL ze!lU5z)FWOi5GhkcGUszSikmb55A)LBc`Aed7(d&!HV0TmfMrK)cIV^Vs-l_9X;mb ze6Bkfs^*cy1tZsH*ba_jwsucKiq@ZAEIP1@M^c64NNk1uzi}w8#t%Eb)R`}y>T@>}gOdkoclFC0%QRCP3zTJQ*LJj6dAl124(#-LIp%;(6E= zo1(rqHRigAeLYq4d(Kb!YDD#J3SUN6`;%l0EjDy*#STa1%mwhTQ@Eztb~oQ3EXfGJ z*2Qz2onnpDSc0esTW<*}E0F^>udKs@Ln9X5%iR?xE6CjLNF^;Cj5HJt(XLu-W=`tS zd527duzmuw)Rt;C%>zZ|TXNY7cq0SP^z5l4i!A>w$9;(OkYeuK*34f~h4xt!48QC7 zJa?QK%Q}n%<<?k!!2!vb^!gh`dx1jQKtjcfPZ!6%RTNHPLRusRu zTpU&T4|*^wrI5Y;yiN2jvbMVXm;j-Bp0)FeG%e<(P>KZbH?W?W0#b*x?|;^WWgV@s zI{=>9-DUzR9@7svoDf3l{c2&!cnai?KKxdaxeVujmLXJZN2%8qNg*4`7wI#qDHQnN zi*$FSddu^fW%r(3R>hDUEYfTpc^;NKyQL)TC=seKA&z*xyY5;0CE;Nu{Q}Pt&r-CskMq6Ca~}`lV80rko;gMu{u~rb zP+NPMy$lTk>bzvLRybje6|FsJdw^*3lZAlkRt2kNrh$nGe2&iu*G)I-%bO3$$R#HF zcK}i|6L#uwb8jIwMaHslG@@mOK)t6Z+85pc<3&c{G_OT-IGx?(MO5|D%5gq?%N=Gb z+t&BRfC}NU1+|~VI&?#(*FT_Igr|x z5Kr{Xiz{K|QS)DY;rpRtzXeWFV!LWt*w|<$^!M-Iwi6BMhtQb(P89j_H+iH*p2|*3 zbZens{_isCuBF}|Se8{Y(W8W?Q-+I=vn?_-{cRkt?&l0PxPKyv*ncYl`xw7XZIRI4 z?(66D_SZZmU$@##>~pbjcC<0xU5J%pf#LLgeZ0t4JHS?vmUGRkxFZT9C!r8cYWdp9 zL-(RECnx`m>tEWfJiGrQ|A)z|N)nB%SB8@W_|U?J%Nna&&vxJICZBs_Kk?&Gu?q(% zeo>pXKn4&>m$B%%xvH`JWvD$$NBu~mVCWs58RUJ%#Ks??YhbnUb!sw5!0UKc;zs57 z?o)0I3nd*5RM&LSsYxVW)Yw5H#eb|Jh)Ji$p2 z=-UW8rHA-ph?&{8@83L#;_?)mQ1@4%n4Sl!NWoKQlmT%W)$j6=YbsbzL`?pSGTts(km17N2FFryn{fqGPO@AN2ujZdvM)KaWd6O?3-QA?;9P zhWB%`1V)kGletadKjNuR4uGH|s$?v07OXXcR=XKiGo6;Vn=M>ThNijDH+ zvV{%t(`8xRRvVb?3(nE+EWEzV#p5A~j_P4>+Pj$ zqKJji2M)_t+Uv&a8U0PcZ;Hd*4YbP+DIOcGrV;G?n+6f?hUHmA6SaqWUYDCUrY~tL zHhl?s^D6jV_cPtx8~s}|Xm{m)(K2}~zXGzoOU3J}cmo5qCmO3Mf25J$JsD5veG)ZU zO}st;S>-FyvRB{bLqjBgRXgf@L(c0UUJ$HSh>Tr;)jVKX7-di;29{ z!bkmLV~C2X{Da`ioxooB)S=A}YVsV7s|9aYn?02tx}FlKd`rhEaKIS^Na=orMXD-| zo)7__*1acmm*m2+=EH4Ia_Gv{8vQwiPg2=>$%D_ros7agGkCjNE^K7DY4EB&uh;uI zpKK|WNXlt?P?bEWvt~>(aI^z*Z=IJfo2C$(I;~$C7>;)}%(3>KtkSprFfx?YS5H6dQ3#$M8cjJMh~E)qpk*V z>wu#b=Lg-7Q-~Yl`$N}nt!_;&{vs)6OozxM+pWE-ikVZ2lZ8xPSNzCgh7ZdLrzYBQ zB;GLQ*>jl&+16`FoB7NAp3Pa=3NK>13WQsKU!@{BN-!2cn|@F4n&qbrim+L;#j)Nb z!r=)NP``B%owLh6P^4!m2@di??95xN!g_Ql6ft3F*nodjvu|JS*E%_6t9iGqKW6Zo zv7Q~pEp6V?7L{=2U96i^w*2nvxKiB?$OT|PWSY~0{L-cn?f)P!naVm@ca2!ivu{AyMn1E+A%_)dVIpsb2 z#xQ+aG5i0$ylBLK7j;@>f7g~$9^a%`b$XahY6wDZCo1{B{^~&*bUJjP0CET08j$62 zy0*GB?H2VUF^PI66TuwfrJ>de7&}wXJSJp8h%8-CUnubUf;K$g3jenuhIqHJ708~p zV4c2}-Boqi3aZmVpT0cMJAn!M@-PkStBLwa0FW2bf2xN?2US#618!55#4Y7vPJ=-u+c>rs>EE<=cFt^I zW{ZereHc^%&ASJ2ucW}c1Qd7TK-x08IF(ElYRYMrBbK~N91vyb7#q+AXEL zZZY7bU7Y^UK1Gq#vR8tXnp$ZNbq_b}_f)S%JjEY;9w9=@6?j!UkQzP7_e(9WYhI-I z5ES%ccjLOR$xpxX0^N^*RQ&ysRqk9;edugqE|umsw;y0hm2|iB?@8BrUonz*9pz_g zF8|sx=mJP%GFANs`{Hg<<2dE8=WDn3#V#`ZmLB_mv;e%$O*arUvm*&khghdAj>4yD zV;r@2Qckn!M9@6HgjQ$g`tLE8yVC-OK~9gFPaSeA@?a`7r5yr;;3+%Ml@%aqQ|S)F zL-~s=8~{VzLae?LrlenH!(MgmZaKBfFOV}g^=VMYD~~W7X!a_vew%nsl$VsFGn6&^ z#tf@rc2O?-(W}$}b>{i-MCeKVNQP$4+LJ4iCv>|%2j_Qt+3XX$e?E_>8Xdc(%{oBY z@;b8pmm<_0#Q03=ypwUV^`^o!lX(y5-u;sT?6>~2fQfGMO#S zYBiPgqJMF9BfBl%E-X;U{hBFB4L?AxSC5{OFW#Bt^Vz+20gP|`$T_V4=~p_6$7+Db zo`-U=`XPb7OhK$G4qRHYq)1Z5oe{2;=gk_=Gwgv#udr77>DOVSi@TA`O5zOF6*bztXGSA@;>8l zY>i6^cF5Jls+14IfF|R=ynP@{O--t14qHvx@4Z}04{fHalNt!J9?MLs5h;9^lB50h z5W#jxjuY`mEccq{?yud~YCP7AAJmXkqN?w&pSA7b9K&{8#!pG7d>QQAt2(Gu9DqTJ z3;I5E3-ANeucI~|&rn&BlWq|%Ky2##yU8zI zMmOK1&-tmUAAWiVrnmQvRZ0H6*?MZGW~n3at28+3>F`J7j&eYWzeHOk2b|BNxN*9UQF3>if&2%0tR70 zQ^U4A7__Gm$)@}@LN;AVdUJzg4WJ|h^1_Gx6y&L)wg(g@j;85AB>*!Tiv2r-xBwfB z=uS%L^-M&;zoE3_BBh?seH|)34~RXQF-gGM2s6(T&`%t%hNv?l!@N# z+`m2(_8nP<^MQQM2KM4Ub{<$BRLL^AfZiuL)M1mXs?Yp$cT|^Nj|j=62o@;P!g~B} zKLma85SX;;O&^OUMP?nQEbEB_I$%1qc2MCAzY}Pcr#+mhZ$D${ZXr~;OGu6aiYPUXMDyb5o~LiAf@#996-vpeb}XN{(kwF*W8gCNfCz!n(}77VgYpW zscbSFBpwIbV(5fFc<8@n7Lf6Nh71&yYj{r2BKlkdm?0l-iNseYX z|KQc{5hwg>9F)BKqJyfHI-&7g{U*S9@aE9SWJA>An^drps0~3XJ zY(B?|a7McNuWd%}7x2^P9gdY!Sg-u-lB^cV=C4J&I{eKJ}c= zf0PYmrk7+MqU0%Te2}l~86=Ep?wt#*F-`CD`X3?fuAETC8D;WPGO@5|>lvENU3cy2 zLo3ZpYI?`?#$gJ5SOQ1zK0`9M{)}oQ-K!&7_Do*F_fMw>%%CzMzTHm?0ffIc2>sE| z#G5a~UUJkP&4pTvm|?5Hr-APyWRsv#Yr+MBE6YB8GtpXOS~9Np1|okQi{>m*9iyW? zVkUa2EM`8!3l-=*0Hwt($9|fL#!;m*mk{8KmslJX90<>wr349~o3epYbY$(8KO)DA z33G%bJPVItOH$yOssOVt9RNM4#|NgeOHegDrumEVT?ld`vT;^Fh*`NX01?AIL1Tt- zVk@-f=~yY(?%8woL)YANPgm#GAPeffRd76>o3FXm%-N^CT(tNgT{T-Vk{*D&z2KiDc$ZOUcm}+ZbuFNAHObO86mT?40R}GI8CyLCVa;`ZJomI8jE;ZVRp9Lh zCS7;vhb34Lkhm%t!@frTe{8*lQ`CJIHonW^(%oHB(jg5?cL^xnA|;)Ruq@IcA>AM) zf`EW@cQ=A`r%1yB3%oqfZ+`F0{oL=Ie_&^JzMpfhbFOgs4(m;SXko;oyRGbmm5-sh zDzW&_pKN}{y+K~hI7P-fMpJi@BQ}L2TvOQXcv|tvwk?ZtZ7C!fK-PSB+Y$aM(fR6z zVLOH_3&GV!_v8EP5IhYM_J42lUj2uDFZ%NLA}6eLZZ!vBWd$FhPY1qty6VRE1m2e? z^-7C@7ZYLy4Pt@RdrN^QGQ*(15+{nJM4&(9%E96&0+-A%WnDu+szEm)asrSd!=w%q zz1|?FGVY?4^w`&xJ5weStYIXrp{rCTy%g{C9jaQ{N3JI=hi}XAV2@k;-Uba-w~TlN zr@}jk7t2PO`UhSaZw@kP0oEe*8VvQFA#jT4gJ{Ln4lmCbcu3K|u0pbk%la2oxlbTO zd+GaJmnNf(WqOQXNw?I~{qx(u@~XGYySG8kUMnh~R(P>~#^LCx?&##=wgjmTc3(PF ztG*hNjCW3HE7y88l=)Ei`i6b?^nF?^t`}<%T=bru^JXT1tE=&N%G~=6k;Q&@jqr4L zT--}1M&45QeLoTA$%8gCmiaz~P!m72JQnrV@75Re?RQKhpKuH94!OH}62f%k63a+@ zj?I9f1;XFEKGcV7N9OXv5X#-Etw`PS3rUhHn_d`wra3Ks{F`d*gJ*w}XE>g^Aozw* zCSj`~4SXNLmBJlivjQ$RJ*kU!Xcrr=0|c_L*NK(1U-szk*o4yE8l__Lrgu8RQ~eU) z{`e?WXywz~wU%(0-Fh4baS6V8tz|9Qg~2}FLK{`PQbW%q>&YD0F9`$t=`r@H0Q?1-?{)$=J`j6Sh)^Mps`Ta)Zg(!;>X`TAFY3bj1wiQ&+*M)zW zH3o-6bcB#wF6stbVzgqkQh))t^px*s=^ny#m%&uCA=P%7rp+D{Uv`)!k<sKjVIO`ml!21{@=i zOA?d%IBQ^^>HhFXOTTYa=N?Sx2t@&aPmboLFWxdK-~hT`xFc|&LJYTezfMreF7 zFVe&tz0!06-1L4>la`{iRk!t{e1ViO&Jo!tiUt{;>X!`VH(3{Sm9c67{$Ek%4&vR? z;;Lh0Qwa@rZh{STsSuDceiW)zE2$IsG1SIrEm_}4=3-k)OAVODbRh*pe2@IZcbvU^Y-i9Q*ay8 z@=08F%w<>5(vMi#n3pnL)REu6(ZTf4S4J$_zAAbFJ#Bf-H+ppUN41PR&cjThjQ;-Y)JkoI&hM}zIa zT&%jIXId}0Z~J$bZ4j(OisSxAYp$zP+Q7OG3#HI+D6>)vP05RZ*Rd~xNhQ`9!-0>3 zr!syBd9v7NR;aV{sHzN{Sj!T!TBaf(ijJ7l=Yv1`I-mo`_Rt*zrHL4jBnSGf&WfXWKhXqYjU1%8_T)^K3_@>%K`!4^a~8aQOC+_cxj8VCJrt>in&Tp~on@ z&&e0eS{V&DM^M~JDbr~I?qU=>0QspQ3a@D!O=FaxrO<{c%(Pb*o%%1^THD8;X7~+e zJ7&UE=4A@?2gZ`YFcvJn{6M%*`4yUS+-kHP1jf2%9Zs-+a;F@>g<2W>H*cZ~lyGBHs)MaTjt}Rw)o!kEBffAybkALZ4_h;8Sx9ybk zctt|>|KQ!Pkre`Q>N9UtC=or2k9~#p&|6V(Egzz9nNE7nJ)-PMzNBTrG1T5E<@lp=8r(xsk{49%HCkVZ4`7RezO)> z4ucSU$vu#4#=QVNy!P+XZ56>dIhJnMBU(I{1ky{HRDHcGK^7T#M^lui8p%G zeu8J-G1|}r53iSxu7Wwp&UfO7;B`;rx>e(S|Ks>|?!zf^dG*l(a{O=Je6KxVW`0C# zqQm0m$HcO0AL$V}x&ZpSwdhVd=}NFBb_ek6gfFiTXXWW*l$JtbpYibUG4$flCzNf`1lE5yMGC(~^+?c-Y#tqUMmg7M7nrcF?^R z_0GXBURBB^K~86>j0p^B{XWM9v7oR8*F_J1al1|XjsiY&H(a*uHTOVSR)ut|uC)XF zU0+xpYA65cDaP4d6nlJ+yY?AZkpQOKef1jkKWMVJ_hj_eB z&r&jyMV^fNjZ1c-Nhp-wj3G^x-R$KY4WW`!_(K~Log7t9l)pM--|?%R0VkD3>vfFo zo7)rz>(4hk_+p^7x_V~Cf;x%=#$LUvW z0&f!<`U+fqd-0Ww@LP+osx}fB+JmJn!dpI`Tf~RouS^ces>Q45=qV>MnVK(N2tJfv z<$D~8**TX-Qo)~GfY8LIpBlkx;)ESj@7wlt^eXUJos&uw7P4i7$1Q#!&j4xKz`;t0 zg(YY>e7+sLpsHa2t#LR`ni2yggsP-rw!E)lRJniF`WJcwGs1RlM>!E%6 zTr8jgB1#tI-xX%;%Hi$mLAn-AX=qJQKMR7!5^-V`s2DqBR8v zH~jgL%|G!eNQisgHa)M#ug^jheDIP-q7#kA4Dje!*_tASSPSO=`U`FZrZ51XSGGU+ ziAgpl?;P*ew7rY4BEQFHOF3(d5v7)K#b3+m!#knlcI#7l&h>fgZQw-2fb~6g1o|*B zD;lE-foW168Ta(pccc0nU8P?>CY8OG72Z&5q<&o`;W~qX9s3dkB_ef|V^`6|b*lyu z72mF`w;m>&mbxo8$4%TXzFi()#)tW2XaOIeI*u~0w=bR=JK%t6YEmBKe^XWdQTYB4 z&WSM$wg?INt?}k9WW3{s6M}(?D`5VYL$ueKB)6JY(^F+DG`@(1R`ci3xHF-&j&@_h~&ed=gho&E=|`| zZh8vZdV0l;Ruu9ik||O|cB9qE{Z8e=!600gscr4Z@V^6@{+&b%GIjSd==lWP7eyA{v=dsA6+6^kc{b@5QKpj650L!{)^_Gv455YKx=0~Vn)TuC8Q{zW zpVBFcQ@yav2frhF$#p&2vtgi*87F`(kZzBs$yHV%r2Suq?Nl`o&ILs4!^LelB|X;o zR_9CSv;{gr6L24PPGbUH;j5DG)2P|WBH&5Dou2~NTiH9rX54UkpvLn(cEK?{+cX`M zR5e&Z4tXGl3xZ8<9o&KrIjS=WrxPn@_<0uXnW#w}^K51wPnS>L(t(zYDbd3O@p@)W z7$bck4zVFd-P1*c^m?dTS|h3Ya+M)A==ptSSKz)dj3_S};+b-jPpyHr@6HYTS(2wI z){G)?sOXYH zut1RNK_rPTo5o=(VW)z!SEAG;dY>>BK}SYd*|Pt(xVB$_u$8Gki52YA~Hedt1an#AVOtWUK;J7)O5XD zA^b$dypeqG4*7K)*^47}p?b@^^UALtO*Wgiq?gWpjg=Bsk5evh#kaok8se#!zt8dA zd*Vg=PEx#E1&-8Gr0dscCOpsIz;+Dv3He1p?cr-*Pt9iOZdCdbr+k7qEId-t$v0jf zx`LnWq0Qrw!LSq23-KBejavj0bBe29-Q;ik zJ4C@f5Y?X3(;sMmu`>^4gr1Vj8bzY9ei;mckk(dJak&=&-pZ+iy5pc61%au7c%}ky zhdgaTVj;h{0eZy`l2x1&9>3NFEh~AxoqFRt2K+wKc8t(>?Rx~z;-bMaIkv^6h|!pG zW!oTT8pKolL!#V*Rb-;DZ3H&5r?grc263}>Wo1kRDlS#g6JxnD6Wr|m7R=slpSRmk zZ0Yygl&XBcF-LXK^eOiHMK(boi~@iuEmAOGCNaA!D;BkfeTDJae6Xeht=G+Du#58* zgwQUt-5iT;_fXVf?bgNXgI{R-{C5Dpgy_)t<>{6+`~eVk!GrD9HwB4|ZqxLi3-{^u zx^X{_8V95_j{Bj(<)`PwjJsaV<$XYrc55J35}DyXB?woY1fABQzD;oz*c^*R>!+xKGRT6+3Y^%Q0+XMoh9H19&UDXQK^MAO^9IXwdujuT z@e;!WE;6lLkPc}1MZb%3!|4Z^=1w_s$Ug5n7$S%~T_hC$oR=VlhzISl25iYZ8rB%g zpXHY#CC;_E{iNOhZJrYielkspO_}Jmq0YNrOAB(v4huBV@g;Y?8?524s+i`}#?1?* zc2*fry*PSvwH7BM6dcGxkVcO0ucB2a=Ey}M9E12|6(f6s)#3d>O~MJ*vDycuBBep^ zPa@mrhkgziM$divuYrMW$CSU_gz z6enume8nMoI?u^uoZ;I1J~<7^wH4(PUt)TT_Sd~~t(qkt&VCqS7XAo%pa1+Ba@%&P zSXbkX`sHo#2F@?Q`|8QLt~fSdhc!IB0HM`+P3K8`)#EOmugH7Xb|R%5hr#=pjTxa^ zT0h=2p3{)vU% zAqqEZkOL$<;|lwUGyMN^0lKyLZJfm1NOgTx)}l8tTccTxpP`3GdWJZPDg4<`)>T+A z9{xzL_WQl+B_N7n#$HtrcUHlscn%twb}oxfx|S344eCRuS_VnV6Evo2*|}*h6#g6P zH{Vz<@nd|hFGAG_+APS>9?j~`v$8JhAx<1v$V^ML?i#$K z93XEPjBCD(Tb$~RLA%5|GF(LzB&Y^@;5?U3rN{P40p@8MPlD3|=$$v>5P8{v(^{T( zDz`Yf@+&2NgeE~3D zKyV}ZQk9n*lN3OwA!~P+1y(l-*2;cjU}KNDthODM+>$E`ti^IY6b7RWJ1xDh3Apu4 zV3EaI@XSewG_9Q69F}t_P#&UD4yh)i2Wg##Q@O=5;>M{TZ3yRvT{T#Kq?LQ%#zfDP zCgaZGZec}(_859UqZ=7VL#`Pwb-gER$9`bb*YF8>qt!fXm;bWzLM=W>)c8VWjkn?r zPx7mB9iEiD8Ye&ZHgz(OHxf{f9FK{y1k{c3+oJ3X&vX&uT_N6PDb?Tfscfk~LoEBX zg*ysAnII=jd`u`xIK<$|RnRRodc4=%PTI;DRMl|fej*LCp3&o_v79HtZ@KCTwj8w= zrgYk&5={+F1O98-)bBHk$!>#s4P8vaEeTQ8VdN(Ln_wpXZY{%cJYJ;$EirjrZ|C(taJQeb7jRdMBFfriU(I7 zE`;M^53=xu@ZQ91>g-7^oIijr+K^_ahCtwS_42>MhauMD1_zYo(pJA*hFPOl6gy1* zb6NFtR~!EN9|m94n^Lslgcupuw3GghwAW$)|B3aodxEg=AkjS9s<_ZNB%@Z{V<2KZ zd}SjLmXC$P!_hO-i9W=*m>k&|K)aSWhXZOPUZ(bHc<$!8E~DPBq_Y<~-oJpAJ2=5a zz3=^;HJXt!FoLyftYm6Z_2IMG)tfn4~=Bp2soC30^6;^bVi)@gCqY z$N9}_VgJ$!553@Qx}%eGszvtYH8Tugy=(MMEe(l(0q3ci^79le@AIcK>cJ=u<9uokz9Hso11`U z*)I-aeqr+?;zYb^+N*zjF4i9r&xM=xp4!k?o^L)*5K}2r)G?KeHYtn;v%NN{C);`y_iqUI>_wyo_ zeV6!ql5W<%_n#qbRIES1amAGa!%eLGRsL!NO?vCGOzF1;DJr6Y8jk7XuF|7M0Oith_W>=l>c&N4>zwW96Uwxg#tBmO##{Z0`nwq_s zTO%3n>B)M%ttqP_XEIpneafR}kt2bG;@s|Dhp#fcSC{TPR^fsy(84&6VsYd$<^y^v z;PKgaVkGRzk*K3i|4XH@|BvF`Lr?)b!m@W9fKW;oi&UpnI-7)3Uj0ijPc*)b5fsTCmx`qLTaDrR}QO=h0IYwYN=XeCx85-@m+2 zH*Q=>%7%opd;LWdEyp6Sp2s08A9PgcE)2X$er~<3KGcFBp*sR4_;>w1Ts}SF2;y1T zH0;V};mV8ry`3bDG|Ml_LQim`<9c|y`&jTHM*iRlrv6M-doKDgE=g1RoA8}`kOZbi z#U1T-Qc;T_NunlAHU@L@qE`{Jn&d%nV0?STKLw|~{QmQ^2^Q1(sR~|{$o|>DF;E~z zCO5>MxA^!bUxB)s(P{M1Hy|V{ttHCyq$x{Pt92sS^k&~fizI^P`BJP_=8rD3$2$5$ zR*D4)>~^X&I_F{aVA^}eCGJ*C_1rH@X?e}9L(hMQN&kDqEc(xgS@Dj&!1VMlsE{r- ztFs2}aNHsa*dkM*I9=ZLWDM@o{Rt>0F_9|)-SBu+TOQ*^HrRUG{9zP~AFnDaAddk) z>-va8F_K6Lk@Ep0eoFhp`e*hO<#G${C*W(nkwS_8VyvQSA?Q{>vb&p&F8ysD_7rn$ z?JtlWxzJmIG6ph3@CvaG4E~d`XZ+l<5QP02K43w|H-Imk8ijR2wY5pMHX;*YBOfaPNCp4rfAPd@JA`y}0RF!Eb; z?$PuOAT(g7UGK@5jU7mYQaH}8fX~;JQpPJiMTFL4_@MEW2xXe}O$DHj@0#!&YPFyE z6@Bf^_4c0Q`sWOlC%3wn*-|9raqi(@`wC70J25(LN+E!hh#=>e9}A;7exjKsKAzfL zjh_dGQ?dbjaFz54{oIRhmHW)N0irRQk@|jzpAl6gIN)h4jj`Cc90>G+~?T%vFuCWLYY}99tC8q=)Ovw+$y2-x?E_oqE>(u z#^QHEwY00~)x2};p-x{aDO6i|o9tV=F`ioZZ^Wb*a%c~&{=)j)VceNqADobrV-ca#z*Q$*{4opD)!-;_f z0R;-OTaLuYhm}qKcE#dddkLwD8L)U=FHdFhGrRC2GWjx3>zd4tBG%L_elrg;#f=$y zDb{6l20750dW!lgzBq}SnhQLp+CL3-PxI%?mb@3Ci4kSZ9`Dl~`buS7!(Lx+*WC8a zC$QYta8TfcZh*vLx!VF4EBE(F3{}T3($@^S-0MLTJog2lrk-KDzXN5xZ$i3iyZ0yO zQ}4cqRP5Up%Jh3dysZMHqouHTNaX@?G6_?uw&s{7eCl%E$zbK28LAy$@GQUwpL4F! zig&zTHhI$p@b|TuT*PbKu>7p1;ITYOA$0L^aZ=TUthjkFEs%$MZ^tWdp!B{llD7i; z#*#74Rl`GFlgQnz)O=J)^2fnY)399XwY?c;wh0z8`Wq|qtSCD_a3N$B0Eg5`8Jk!C zphq+081u^y+vA7x&wSp}7X$3|DIaY`vVRAGPA)^6!p`HS5r3|yPB-XE>~B-Xeg;Bt zShBEa2Wc^g>8Oas>=_K9wgQs5AhX^_qT8DQemt+3S2X#e}t+ zbdcwLYFXb?p3Lx!@0(lj$zcT+2CxY0%}(x3*mz#QdLpg|XcYSvSi1azwSmyX@UD?E4nV^BUA+RkVc*?XluPVd2u;a zd>A_6-E^m(#TmtU=%HctXLFu+SUflL#=cmFM`_dII@{N%A)s6OmT~i~Jf>Ss_(LNc zqVF{_D*?iK4VgSmm`@q^0q5bZ#U+0@W+aq^d3?dK{>aM>Rsa))b?P^tw$f|BAMAYW zdaT)mZWL$-23Du2D;s=9=Kt*$A@(1hfP}`>VPMsAg=b5OZWm<5Gx#k|6i^R4*6jyD zJr7VU_{_j^F^&}*@6-TbN$Via7&pMsV}|6{9-k=Rl#lT#0G)^A3%XTp@@jJkcE)-J z+-}!O-d4ls0yFv!S?!x(Ns85pN8N%eExC&KB}2#RfWMJde^fhQ+-267D8)@K+H2-( z^0ZxY->a^nEETEs^>}Qo76aO{=?gq$E{Ie79W7*f&LLr5?~f?9^7PEN6Il%nETUgF zmj~fA6wK|}yw8{N(D00+>w0ibp3x8YePYPLu3ay=2fjM2zANA{1LOxKZ`|EuvD(yk zC=wC;AtYA|lsw8wO#WVkMhqkEE)*an{Q2KXQ|_dU!J*F}y;>JevZw21(<;D@hT zs&tZ5+i@A}U-b0#Q@Qm45<{UFWPvj{6X<~FCdR(J(5WK0zs+tlNZxkXr@o8l)NEaU z2gE7e4zK~ejbiu1xzJZfAE=nMnJ2O6Ft=M<2TTc)z_u*J0`rOJgf`qhmAa9{VbG$f zWyCt;rXkxmxh$t0+YbocRSv$e=ZMLc#Q4vlZ=%n!?pO-$rh3kOVG+;kTCD#I{Ii$S zMplM|Kb%Zo^9Md;2MNPi)07JXC&Lg0k6lkoksQI3_5PwG6=SLm<;=S%BlAQf;?$#i zel3TUf0L@A|D6PD6a4A;Uxy3Pnq2o2)8p&=WXd{%h;zRhp zpKIFK6ctKN`4M}x?wG4Pvv8M*B^{_n6-k8;j!CPFSq@oIrLSw^UI-Fttc`I5X5EfsHQo7&DRW8 zr0Cc!bH0t-uoLF;jbRwEj8yNAH?x@yk#4PkG-qzE?P41uGB~{Y^wrPi8sbq6mbqQz zXeNj3?V8Mk_VA?yP?R=qy8Qz*;bHOdfv#8yuRTfAxpfCwFv{M2U?kZ+$gF>)AUU7V z*)#Q|DJK)8SRVx2Xqu1EkNpS+Od4AXQ(>SSc>=l>ui{zIwk+-RO2{ygT#Apx;_KS7#A=KxSds~cAa^iU));6W&Q3Y! z_Ji^Cy?$_-ObxDu`4b^92jyBjXS?S2b;^*t4jG|;4^Ny)+)V8E0|l)q+fk9MJX%=`d?VTRiuP{V5B*seHakGWjfMYnHfrqdqEZWnQm6${lDkR zg#WHC`wU$AQ=4wG4=ekzbAIrVKe!D79kJsn4QB5ew-@gjYF+^Htjgdrr8}fM#GkKod#I1;zfSpaZfv_y(84H62r!@l; z#`96TIlDKb-p5P#Iop!E%d5hxs-gT9s&XomDv|d396q;XG zZ!s-MCupZ!5=lEAv1ll;jW8|_Q_$;Zw~k$Lx9%mGwpx3M!gm#=GGbx896i_JJ}Ra$ zi;8-EDVJqS29DQ;eYs6?JRGb-AL2R^{90#}Zt*4QS2sfnIkYPq?3M5eiUcJ@4&3G7 z=gi3lqO_Vm4=-}D8zr)pe`xEtkW(>JE!7v@%}6J2{TKa8@pP zkFoBL2N1vQ=X=1t#h~yBy!O@i&qB}udqB66Az{(SNqs7tDDA210T$&6N(09+aiZJv zlpFV#S0|btOp5N+ilq92+W#n5;+NXej~wJA+1h~``cbC8luk09;%Crm$gbn;_h?zS z1B6K1H64mSr6FZC{{t6@MB- z&ZTHUM}!sJhNT;T268ZOmasJ5k9|WT?NY5OUHitg3`gE^7=0qiEzdB~vZEyiM=UDe zvJXIk>)=a)i*BQAC$tgd?L~7>ivxyxd*_$E)Cr>?oiSYJxfG>&^ELR!P_Z=DUZZnOEaRrk&ava-DGFyK2&?`1&sTKJge zIBgmo7=?SAjZ61=zhE-SY8(Cd*)j2E48}(qutU^Xcs#d)d|Z-SCFf=dc8+1dN+;$P z>q+H1s?qZ=70ik)6KA!NP;Avp0Q8 z6mt?;`|10I?+^7xz3uRwZN`3_g-NCacJ29Hko9|n>6$PA#Na6*C=q+QcE7RQRr3O! z@)QZz_Du*scMC;Bqv;r*XTn0$T5@+kX?`1^{j;SWNpsj5ai?1@4<*L=XHhfbJUIno zDsKL^&H1z9vwE2OtN%E_AH6?r4RuNfYWMd{gl^y8OwI$(d`vC_4}p%J-Wj{bu^SB5 z$_gTi+N2coFypb4b>jDY_Qc}Sm8J4ndcF^IiaruoPDFdk%h(2>NoA!Do^#3}N#X64Uoz2Par~jFiI$xcNY4FHOn9;v}_kbal1^`PS8tX&s3)b!++`Vqg6TZYyG2YBU|NL%bF=heTXcC(l?#=mW zwOi84TY|_nb+?XeO{B}-M9;6tXF=_C??U;wcz29$EPk@TVCu623~8bcHq}w-XJCg1 zSG9KE0MPPQrCScXCbS|7xB#8h7vel~WJ0yygX;viCEgE549#pEeoNfGr$#qSm1x$% z`+*(0@NB>~EOTNL_aH#A9p&+W9J*$79<|ua?nYV+>)Nze?r|GCyyfL@VIPO?bn9j5 z52ty+cA3Wy27Ni>(4ZmieP~+l@){MgX!n11j~$8w(Z_aNm7rthC#xurceeJB&8}li z+77x^g15AAn6$XSeGG-Q^3sit0B0Vy1oFz)^h9@M^%=Qju82+feM`wf47PF1U*@wY z4obFvl!zZCTizo{Y~)%D?s+ubtUusfCgwWM`D_RBO+|o1iPmBn@@p5Wat@4>@I_SR z?&hb@C@fok3BF*t`)C#}GRR-6IY8DJkVf>B#RW7^`QFi~g8Lr(gmvXbpwy>qS<(%Nk~1(yev7tp1npk3NnZj#~l?r+$o1d5u90whDZzT(yGs1;~emJy*t*bt4hx zG4ckM47KP}wagFbfGWTdkuqrmzqZpyAn&9CCH+s*tDcHc5O~4|Ob$j}d6w6o@tqDm z4THNBKMaM3dh_cFfV9JSks5`AP>*|NVIx^Z7M@#YxL6PYqKNp?f`UyUb5tvIi2AHU zK$I`84N$XBWoA{D4jbazG$V@F3tQluU_NPX?s~`1h!FqNF}AvlyhlZf8jS2qfoI4Z zXA^ylgS&>nTuoJ^eVHKOy;Tw`oDOfEc~s?|OTig%Nh+L})7 zwfi0#O((ptOk?ZIYliA%+eztvR0qM7H1NLCmG{E*4kKW7?1I5$vmgV{N-8NmpiC-+ zc^J}R%9&?w-gk=*VIzWkIhtPmt&W?Q^Sd!QnItjt&(dj-i;Y5goTnVA`SR&7RaA@A z6wdON=NJuyuBHMG%d(4F zQv#8Ev^x&d%$@ll@XPN8{kHi_zfXeC{A#bn7LE5N=^Ed7^f4VyefFkxlJ+bb+t68?$G0eP_wfdZ|?fOmBJbu)BgKlj%yavG*3LM+@UpYKX2K6jFr zw2NcL?J6u*E^%XDjm8%n^%cm8nVt9D^XWP$^+wd8DnM^FBTDOOiij)OO3MUfPgYZ zywQfaKX1iDN04P-e@>UN_Q=Hj0MUNqgGr*MiO~FCE&x8)YM-v#SE;7Pw1PB7Zi!?ruU9tamUW;V;VzG~^)TwKASjey zy}l*36cvkff_N=A83?{os7Vj7$rBdG0_;cPYCLjj1%-weNsi0X4!)vQk`^B!P`Qx* z(V;AA>i;@Di;qLoyd`+=qex{AnY_ym@fltw&ht9+n9wI7KXv~^m5=%&|64ZdgEbY( zfd>BOT=6YF*v&CId>II_-jxu|Js%$)f+lPph0-1GlYeu5lQ#e_EYJ2U$PZxp_fxEZ zvxFdl5*z!C3usL0*j|+QPLq&n9Wa>;-x?*L>!QXt@>-iibBzN>U!Aq6H{j3bGR9XT9JtTv3QHb; zQ$HevOFn@N-?D@6yA|>TIF0|s>^NV;m z#qHgldtR>3xJ>(tY>(RDZ`P~!GK}P0+~;#ILgtqcs!_ceT#BIkA?vwdX9s_br|#*mjT+V`Lf4NJ?!`P<7j(=- zoY&R^DQ32vs%Q{)x+a1fOu3J|F$$cZ z(VcKsRaP2^?wZ z?}GFkNp>9{Ywt{~UI-~QF_c>Ut^S&5MmQBUWD{9wKpNKL($Yi1r;`%?M`CqY{tH4^ z6oE@Ef6?_25FAg4!sQo!i-sJMF^|dhZ8$UQFHXk|Z(3a`E=-2t=UK6PJ0!@){*Ytg zerXgjhr1{Mok(HX%jIvW$G!FMo3mFef%GX`Kj&f5`%vhi!SHH9G{I*Lk0M@c zy0H|vmOFmNG}tL+1T$m*_t|m5I|9;m^)Q~NCY47YJi*sQc$wQz5zDXABl?VO$kj|-VGFEQrvF|>V z14|G&UBTgC+E4!du-Bsa_FZfUlUeVkqx%GA&145IJBeqN`A;RNw=bR7@3e!~9}QFF zDCHmm|3>V2-}-VEW(!-0&=FnLRp3zA=LBT?S5PE2dv3dySZf(~ytr0~xi z{sUdg$YVXm{dZ2A|F#{QW2HTMtqLFJK_253pVRef8XFl^Ul_o1)BPdYk6{!70m=f= z?QLzeP0JM&m@WP*^3sp76){-d;d0il%rVA}dc}Bda4Fu8aqbggEkQV)FW~LaAed4H zSjv4cYPVJbH?s$(AZ)(FQOLCjm5?a^EO++8^$(IFt`yibZ72SMPYH!af!9XezMQZd zr&AeP*J5tdu$uGiwt)|@uyqaxuf;)yU#JOc*w0B@y5!Q^}OI{FsS4RC*qSkka>F;0s z&$fm(rD}==&~VXBm5*7gP_CKo>7;sysGYBvN^xJDh2mH2jkgAMgds%x&_e&_Q)%m$ zWgP)q-uTD)ap~d8Bf#eA8=O-SiNASJTEX2xxsneQTjy;vuisoLiM`z>7Cn|==KKfF zWTX85kY*V*(Wt|H?&j}{N{8b1!S@h)>XX=ACd%FXXz+zKb%%CGvVGPVUOR|;!_3** zn#rWam+!r^^P8IchoD%K118By%il-qFM;D9^z=FaA(odPOzc6o>`r#5M&-l!Z+eIb zoS@b&q+*rf=l;S4bba9&Yg!f#IorvF=JsB164IUpe1SQ$r4c&x0}c7q_80=HeOJa% zd95)lgoONFfZ#{h?fFz_IxTo_crdC*`iFRp$b~l~Ay@%H(yuk4vzER9A?SGXj}}0> z^yA1U@fWse6|O?yoFLknr&*$Gb0aZz@bPMx=%rD)E-PD&o-VK=R_1iksAPpG4! zIl9d$XICy-Dm$s3LEF-Gu{=c^HMeK@bx)1jX6bh>3dSI>C3|q8@WcjjwX&73{Zw_U z$(R^jJ%o?I$!?&hERio8&`!w5QEZ=OuPJ|ZRv^>o{H1cY?Ec9}QUk(oF+k@Q0s{bMHx4hdVc8MchR?A5Z(~>Pdjy(@^w$2CZg*tfT9z z2$a1ZrTWgo;CMXu;?GCjSx@m>7(rWXd-xMf4CYim0>5JkB(f?;XE$zg!p58Z45%~C z{S58gaeon^5XoQ*pS-nq^vS9Z|5S9!A}76y$yXP(==UzsEtuXS6VbvTpImni028jBl(|DtHl-sz>8n53+TT_~nnBqOf7r0@>Y$C4(iR^3VRt&f`UfuPV)29q1OaCdOkV zJ%=_T&O1jfVJBU3OXq{Z;bI1&RW)8*wasy1t{XHNLK@*W7<#W`iKZRk0W#C22VdE1 zIqCoa`*{IxIT2_RVPOPQcGeYZ~6)>s%7GtHO+}TSw@ey!7#Q@;rP~DmZe`M;7B*-gnF~#~kAhCiDhc@U_1UVgp&2>1B{mGw9WMZ`=hp znyCJpPW>O=gp)q`NIUGhXS9CdNO$z-Io)>L%@w2B%A+olYnlD^aHb&*dDz95wRIhN z04gk&S}MEXx=6RcwJyszj0`8@51HJmSz3*<%Ncc!;PnRqV~MiA=ZY-Ka(#GppTE#f z#Z=$GRbv5vx7R`PJ;$&0-giA;-(5RQ_h4~)`3PhbQMZ|V*6RClYRa|);CkeZAXn( zW!k3XIZsa1JlCc&X0$DJUfhK{XG0VP3j&pG`_3%1G3|4_lW~+-mOu_K`y78xlSL`0 z7JvPeBu=?pjTsfN6Di>tig{}Dg{GjJRH!gbh@u*^%*TY%#hAtZaxlZA-1KX*|L`Rg zJdFvFNf*nCx8um_xHPp>;uvo0nlly0Gk)ZJ8&}I#b>;)d zJDN9t-2Osz4F58zF60J|ARzeuhCgneO}v7mih*l*dSL$*T-nicVNWm zQV+8e#Y(eJ=!QiF!h0zD{qk|o2AA7)$2zXCDH%VYkxza?e|6)1s209hJWbr-_I{00 zl3iCF`-6(nwlVxws9~PEBF+9+*Gu2Xr&IyEfT%F-- zq+oFyc=Ho8VYfys?Ki2#9&@d_h7?_+wSiw;mTM@D+4J-d7}Qf;q#u?o_YF2V1P#hi zrdL~$NMx}q2wr{okVVX2E0-i*q?Jx`ZUr8&FukNO--j07JHI*je#ehbPIcD2&@LDn zI!f{V*H;_9`)ao=HePG9>+*DM{H^O9JGV0#wUt+kjw9#Vbaamv#+)bi0Ns-(Kg~zG zzK4e;?^you{&l+TQ@G$G1P~}`Wth!&v<&MzlHZ?Qs=5v-pOdk`U8=KV%&YEw^k3>$l!gB_(r~=P>}@=Q1lcN=_~I6f z(ufN35jV=HfNmP=JnFbbH+rQ{`-qR#jJvy;?L0?H-j^bzx1)|7)t6DB(*;#OU*^#r zQAl}B2D+vbeDZljZr#bHnOQGR_4M_hEZLhH#AU9J=X%a4IWhA-d#G3o)!@W!g{S3u zsYO|0j=bcfR@$H?=v0LV^5)M0#-r5PvavqF*mcvUb36)|5Sy3a@G5|atT>dAy?7ID z&F4=YYU26K;6c#QAC)>A*wG(M^4UbNp)JIy{Sl#nNqc%`7=(MLbIO#yo)7fnrMbsXDX$W2%SA1jtQ&bE?w z-yWv4y0T7lWMFS+tB0n&LpDlEO7OA2_lAn$D_sdQ&#|*qXrZtTdkqX&Lj9U9*-+_r zxSd{(2+x81d@kB;I=^_B*z>&Yk+i%`8b?MS;0&vdH(eK>VC!$J6Pty$43i+kJnEg z1OcCeWh^K>)0;oYXaxrLwP&*jB_;P4%dK)JoGQ3DiZQO>SY_2DpQXM0HSKb*U$&6^ zBg;NU%OjzzA)EiXSg>A-H1{@cFL27|b##-4!^3ZU_Vc`ao{yJw5m+RYlV@*I9_+`W z`bV$Bmth6aHj6_vDXtws&8bDNvr1CGdHmHq5hML|Z6onr^8S#4uhn97O~9*)Wv{iY ziIRFgW@o?XK@dIi>A-$KTSHy8e{GurCsx}xv-MAcp8_Vb3G* zG%)R(JlWk8R#|#|WKe74iEnCvJ70+MAu@ta;=wUHdrU)KAh}Gq0Lo(@ZDkzT@@#AG zfz>yNYPsHgSG4DRT21V(lW(_&sztIOE*f;se5@RvA`(k;GkA*N0xEu_11Ki zK=46=($wWgvSZjY)}>3TdcP4RE-T^$#>c?eK9IuQT;R%^jv27kjeOt6&a+i>20IOv z=h?+JCNqkQTs?mOXi=J!2yZO^gcOH{m$8DsJK%xI;@7HtohTY2UoFNyYcop`D{<HOe#TpF8r5wm4;+rkfSeZly=R^3}{~%@K zu7M_>dcUQZ61+$v(fy|P&Da@qW3oK-(O*Hn8jD{(%;5)1lZjK923o0+xqX#|I&N{N zjKPkczGHj;HvNRXc63B_oFj1!@BOBi@a1`ySSJIHv;E~m524YYiDTRY>tt~7hL7jx z^*|;}7p&_l1}FO1w-?7_L=#r@Bqlv5BaPPrQ=CMnTz&BL7h|-~DBg@^AuHR02J%f^ zEbdE(L_*)7`(K>b^)4aWKkx-wd{$ljevmb;gpBdh=BjSQ`7!5{l`w6iSO#r1*gh#* z)6h&dNe)X(jC`ida%PGO+RLXe{cEo4=pg1u0j(IJn70D;MU5tTRa4B*>Tgb!NaWuW z^!nrU>!ekF;v|}5J~3Pdyu>fA8aUnoAr7?x97=S?N^r+r-n87Dl0<>ZwikjAu76}D-Cl>2%lfLKx6BK)v#{(t zx3}&PeA>^E?VDSzWf^m*FzD5e!%&&)*zM`YNYsLmd6+V8ZuUI@H=I>~u&~A#*96~{ z>Gza|tknmZgD*#(v_ZgV?ebuchNdcr*kx;pGDw~$a0W;Q7Y#X77gL1`P{MIVoU=U4 zg|>kNnt>0X*81?WT>J93^JArZNP9^-8ooZ_%6DS4 z&~0Mec)XDyA%@CUmb;Pr%xU?k+O+1g>}Db(b#k$PV$A!wcJNAv_5sdlib%{CAd^HN znwBzM2ynBXP}5=A86!Y>UT++BcWJ`C=FcgZzlc40qCRJku=U!hmGzB-1JAdQ7I_bo zvYFi<1OA#y4Humu{a+EJ0;kp2IxC6=dkbZ!G>Q6i`0U}^(l z^pi!l#4px$`BqG9wsu79zJLe8&=ht0QLu2o|7B~fZcy3|WKTsZeQVE3goUsVQ_wyJl3=`2jHN}tYap3KMD)i8`}MOdu((u-+F z$hxW1*NJ_aXnJcM6%bR+1g-yjqr~AITht`8D{{QY!eC=%P2#Tcc<6gI@Detcf^d^* zq5bvk@JG4qu8r05uaxakKO%CQh|mktC4u3ao14n|dWV@ffB&W}UD+B_uhR1?I~S@& z?D?NY0|@VLBVD=Pm$LpApgms{V{)rI!>L?WKzT>ZfAfs*|2gM$8DqCcqvS7o*7fEp z2wz@LXNB$m)CE3X_;#Fj!d~7}f50hyvcw8}>huxH{}@^!H?;seTg4G_+@b;CM_7tO8 zqiq4$jQx#~`pDYB$tatZTZvLFO9J(3Iwc2xt$kB4>67_VQoL0Wj}l`K`*X%drOMwA zV%2+YoSO)q;RBtofHYD%TA}v=T7{}am6cJ(ZZr*b_i*X)9buX!c(@}1G#d8mz!?)} zN-;YoBf2aD^8N`sruR7tf#K612b>dZX{IJgYD^x1e)2F7-bn)%`J)lg=VEj8g~}({ z62~fUIm*SR4zbS*$?MxxZD`6(y?9SNh?t}bWAH{24?o61^GmVCQ_j}&TmgKL2D z2ml6?N4DuL9L`FU> zqn#${D`A{q9;Eo(3kUNLl0DEjPEQb&va40SPFo}DKF9@L8&&^Xyz%uP26V{Q>d}%e zdD!*GVr*Dqy+H?av$)t>^8FY({!k;mYxO(yBome1%3pbd!@Pc5p_ChvfKazTz)8iY z{belys9bi$13HC_U5UY;@K@ktji-jGHZxAQ@1ZO$Sh2v$l2Hqz$;{on-&#iH=EN?w zKGsE{>^wC=QkW2)N^!!B2@N?Q8i@vi8G*j9cltXnb6!(sUyRtG@w~{pR@{CG5)q6M zH1Ju|3!sq*I3EGUcOrP+AEBUrT2FI4Jz6UE{oVl{qO?nWDQM$h`ivw&FfeFEm0Weeb!GsF0az%ULePd3Qu%un4p7< zAgFd>xWJnUM*&a3wkY(6%<<`W6jB&ye-g8#ck`+t;P4sLWluw5^0smR_wbGN1kJfa zGtO=4w|zmIDen|yyNUaXoh$`72OVr<=tKX_)X|%OeE|w;;d%VDZcBd z*@IrmBxBrD6%gj&U|R7Nd-@=JoQhuan-~h|200KY?+BU{7i&))gdn=QNPpOOzt#cUf5O}O4vwZ&V7)kAld~VKIcNloabXH-^zbp%VSXJ zF{;i6ux9PZ3XnM(*T>?m-U*QVbp%9h6ou&N8-O}*yp4cEJbtFC05@5RsjMeVnueeL zcuJPBu$AxNDJq1m{LRBS3z^Q2ygG4c-#s^L5RiKWfxOQJO$7PA;akJGFd?L@(9%Qs zb*kbMf#RLg0qLKrPr01QelRfB-7l2);(pUx{W?cz!`9Ext}v$Y;wb*YCb^-yAfp7o zHkPq5{3&-b%aMqJjh4-jcw=Xd4fqV;4Q0lF(4-qKztpPp%J53xVw~RvHQfml$B%bC z@l~4i6RgaU45!OohJ*@5E_{-nui~2)HOuIOR9NGe&&6;JwmBf5@r6ctiZsn3NaseO zmLiEjhJfjq97m}MF@`u>&3hPC%QlucN(SP(ua&9FHm|Zs^R{GrwvZ>MKPqR>gN+!P zxr1H5MoPNwS(!!+T&gF;vWGc{`;Exk2<(;RYOQB@fqAE%B;mj=_4&3`1fRP9;qozJ z@xAOeGH(jj$CtEaqMy?F8%>7m=ET@pyOTM8OEEDa-sV=nIg5|tM9sHgJHM%S8iq!H zh|eOv0gjzC%dk75Mgm*-^r&QxR4Ial5N00lUq2y*mS%?xP@#N-MM$F2x@4)tX0claMW2rl1Hjb4zqQe6~m zz9h`;e|-UzHV{;gte>)BBgmkpC1>rx)`HAqddR?7S{iTjY zqvpiQTX73W|J2jAH21gmf1In7)Nddz@cWv(-1XG|Rr?$-HH1vkRWOxJ9zmz|ix zr8)J3-HEa?Hy1Ke=U}oF;fVpIhw*HyX zWs%ET@28n3zSKYU!uW;Rt;lFf$MKiyCiWu4C*~O;Swv01xmKAqjd3?d zj=yYva(r5i8?kyMw3R{f3dDQ!&P{>&Wy5yn`ZU z$rV=qmNkw^$=N+WNL)Id8QPdjrqsYsEGu){zLFQSb#q&8V%I1&1iSS0a7x*_6tFMM{jbFcxTl zkA12II7T8LEK)j2wt4Y60tKCrazLixSB>1B;~9>WZ7TSP;paA*_{11^Bgn1wU=66E5#1}E?vcs$ep zefX~CaA?Zv_%?su#ncrS|er^DjNX(EfaPWB5H5V!TU}jPa6eX5H zn%QeFae9bMY#v3JG-}G`ZVE=iEfAq~w2v$1$9~{Gu~}#Arq@|n4V=lxj7{KXIOtfC zoeZkd^UXspGgh`Drrj2YQ&U;CWU9CS0Nw&C)8n$GYE{iyFrn=zN{6%+dwSmO5xHhlE-(3yeNLQ3(3-cd%MFNXE<4X0ev&m1urUwWzRLrhqGDksi$ z$fDCH)WTNw?M@+TILA;1(RI%Nzu^-d#Oj5`UYvp5aTMHlS}EzJ@Vpo~Do&2<__tGp zgo6Ca0@~{9LDwQE4uY+%^+Vj)OwY7BTd_*UdR25S7?e^&IwWHdx>%Qy=b9nO_KnV6 z)T?y=64U$sBc>l_PLmJpW4U-Iud^giV0lZvSFAZLUkX{MvMihTZxeSGuX< zK=6?!4|Udlich>iI7#G-1=IkoG_SS|Q$uk2GD$!)Limo8K`UP)U0Kl*n8LeQU}hmB zYq}T!KTZDXnHv}Kl2kA;j4JVyV#cXT&M0hYjR@EeFJ_Tx zXthl5kTlduc&(FTQysj;+b@Do&AUG7ecm{zOCa^3g{v|_@zL_IW4dDUc)@!}nEeS@ z2=^EX%m$v*KlvQUlCaDp%q`$NeF#V3uJov!S&-n5TrQpTP;z^D$YV> zUgq9qm#0=O%>5|-4zMx!@Jvler?SlEnY3S%GRGX10_(wi#ioikLl9@}UdCDHF(YGn z!TivczUu9_JdUFW@08W&v1E_o+JiJop}0GxkAJfk-UxYDmS*}locRX^g_fr8TBmPL zexWJps}p@~ox?0PF$okG^ppebvFtq@?4!6p$-KuWE@0MLu1qnWfyCnH;qBL(i1t({?ZbDg(TVUjKiv`UoRSk&>PfhTInyg=IZ0Pxp5gexjSv66=n$P zYMryW+u?PTW0%0KR|o@T&owp$urA=u=K&D}LD}UCKKSRmt#*?kty!Yg*S{ODW31Cy`(Wkowhal`}0GMX+#0x^z96N8~s zIyV^x-q%(bDU$u>B^Ap-$JLRr|NF5j%K#p zn9n^b;pGowA)e?xBUQH3bQgE|e-wUb+xBHaUKUj%oSPbKEN-uj!ThB5Y z_;kz|e4VVep7YT100ucs96iKhE7?JB=RvTuu~OT&pUF`KE6OZ3D$f{(NMtvYnF}GL z+HfeV_WHmYR0fRYE65kq6y;-xA`TM&L6qI_74e@BM=1h$nXtbY%$p_#Tji90639A^ zvs!zwy>P{AJ#wqady8cs@Rg%TElHiARk)K#2R#I=?BeWZ^T6N@&*<5a`qM{?znDK} z7R<1mm?hJrWmT6EU>VAMl0FVT53fV7Z*dfLqPoqpc23fhn{M6QN_D2{2CcE^!GA-JW@Aq$B7DJXy@9_U;cs@ z0Gf4jBkoW6_uiPw=!pViAv4f(wyV(<=A%Xf_wI3TW%cR=rb_#DFks@n&__U`{We8M z9|;Pb?pUfvuVqQ+Z!ll3yXN;*ru4LufY4aTmd*MEY2Skb<;W1M%r04!5U9xW!Eb2U zU1PHIl-v*ZKWMwCoMT3woSak^-z>(IA?%~`1Zv;i?{5>f(RNBfFeShU;;_S+F-P%M5DR7h5w%nTJI+6=`8fBuW2;Nxm( z3Urui-a&XeN7k}54#V>|DwPdr9Wz=xW86q!47nB?$URcJN zNOJ)^#F!!KGBSigwC2ad-NWAi-q zqgrL9&oe8lBnS&=v&KnD>Du2IXcQXOmC7*!Ksix8`R23Bm9xWJVBRWLCqE@~WQu|A z)!>?R>axdXwme#9v9@gVmX40@-gguBmN0s)#yOOyrWN*b;>2@zmUyWxGG^)e!e?nD zPyMT9of~z?oVMkpBzPxj#?DBB8*+Vp;J(3?L|XgxKFQQfYl-pgWE5&YzH%}X-KO|9UC_!zEX0uC=wsrswguVwyR`LReTN$OwFTbEYGxK;VNLCI%nIF#Q5*A$ zk^tshWLAj+3z^ix1%;f<;1SmzODI1`nSIXcdBv7C=-G$7s33kFT%w>X9evv3ZO5{~uV z^AH1(vvI~7W}fbuw(v8GW1jgq>TZDyPpV81+w?nT_$0tmf$Xv#-HJH!!}r{|XpO7N zhc@@yJ8P=AbYPke;#;mbNnYs3NW)b?1SLVQ7>z&fi>oE#>dDBitAci8^B!o|VWg+? z&d0`w`_FYX$octG#hrX|9MrGRYD01hP#1GAxq0|`kuzc`?QR9)HQaO>a@D9-OF z*lOTe<1#s}kU`3(+<%Hy>D!zX)$kz79k1VlcZf%#rUlFJj7fMQ_R~+wM%j=1nS%U7 zI9Ct^5Z<`RwUVSKUX6eKjpJbH$?-*wS~|IFjG2pN8Iwp4Hy0RX?hf`A-#VG=6-|KL})`{itB7 zf&cmpj1MRdnc>eMC`*#YJzsbNxNphPY`95XP(WumB*x-~(2Z(L^$;+nCNZaYHeHjr z29tW2DclxiqI9>8*)Q~HpM2jB?!L(C`Gj1cPUk}6*{NsHvY_{JRf8bWyKljXipca~ zCTJce*$`CzQ5f?l@Ll{8P>Szeg4g&AEym$tgjNtaF>n?bXZ`hyuQZ8Z63(iz^fL~) z9I@wbr0<$j`Ml#k&U8s=%)%h0j{j~cFBiGjai7v>8o_XjRK{*0`hK%if z)mnY#(k?Nef;@@sJMkYfyEPXSEDCn!UE39;^33ItCjuXFR(>D6hSr5yN>sztBz|-n zM4&t!Y%KfQMwfh@7vd_v1aU+jQM1q-?#a+)C)B`e4qwvr>XAo3jxwwb98S22tYj@Jo%e5lM5F0kM2wubv^WA;MQQ69GzD*GlzLUT3qAQl!;)}grF}{i)hJS-==$t-a zq$oWuq_e=RuR$esFc*UUK)_7LOdHe{ozF{5j2`|Z1%E>9W-pMZ zsUX9#X7PRbBp2KAADmondN4ELdH=pi{x86|{vx*X;r1|kt1IlT0TRDn z`Gt{01+w$7w)&i&TbemrUcy`kE~Cx4A6bb`q7`>ar33D(`3iY#_+9Zd18d;BDl1E^&6yl!6mF%JtNQH64_G28d}Q;{Cyz` z)%WnKaDH;;x0K6|-<0%red}39Hz!{!6b}n|rafnM=kz3H6)Ie4SD`i%MLYDJIHgR# zmK!d+fh$!6%c+og&rt@jeC=36ktdf$X%&d0@{UM4c?TG_-#2_H$GTL%X+M?Hkx6`5 zEPW>?xm3#9iiJ;{A2q&Qid*vD@h5zlC8A1)U*@^w%^mE1Wd!YuG;Y|Ql1QH(%h*p_ z@zf|bHCcTCP5!&BBT4FE9#Y|=9+8mqTXl+seSD)8Lif#cMhLwGA5Cs1J4y3=YpFhY zx@m$|^r1hkP5OElMtTg!#QMd$z79c<1;~E&yT^3iXe~0yyj-IR%v>l6Gwe@Dr<+0m&!7 zs6L=Q@t=T4#6l#FmOjlz<_a1W+*Ty}RFJ+h-k03_^tf{=(mTB9v}4jxRCk_S6JbtvyCDacO6SYTWDKs|;&zL}nb(Qa39Z8u zwV_g)p^E&Prh8r9rUl39q|Mxif$w;G6CqXX6{~W4ZN5-BTlz%farU6s}1s)AV-g^!nXZPv6|5BVse&2z-&2 zral_Dt~`{S0hO_cBVGB33K(yCq^kScAS&+{KO(WyWNJ$lP8J0U2LB}+L5bvmLdciw zW*gkeJz2YW=cyDKesjK^!T)>(9i7%YsFO(Ko6)h~{x;a8bGQlB8r-_DLvRJ#38aSDyEM(LHr8t(NY_9`SBy`YGksGxqC7 zC+m`u9lXYgs&^;hr6O8)Ku^jSd_;Ci$lQ?FT2o^S$O2J*_^BahmBmZdvYJJavhHw& zt>DH!96#cgmX>b4UpHpN{fgy36;w|_YDRY&D%Pc+f#V`O;`5?cjs!y`sPl#Roy zeNxT$dkqn|Xyy1zB7focSxV=z`87E9wI8VW`zd=zAGt7k?_+cw6<&IQ;s*rfAOA=Gjvgt)8FbVzJ zZ}Jkrh5V%)M#<76XO4P~&zTUqfG5x7pXj(}y!euw(*P|^{bUGndJHZ}sZvRPbmy0A zUB#8?&HwZ~bHiZ%2*uc(ZuX#d7sZPC?K3|BL4>Py;2A>R~kHM9voata2Qd5KxzCU?a)TtpwlQRZGbXb2iDY8R(Tgb-2{9motU}-%mDB; z+sMF~yg(TpvdW~UW2L9qK*XlY((W3w`R{th%+Ki~ih-%d;O?a-q15-kE5TW>CQ*Fk zI6ryX>zg~Y0|B`>%DsymY_VR4-VA}zOGVHtX@OU4#MxXUI@LGrmx38D!ZdB`Oi1)s z0Xna!z&iq6^s|c$yk$)1Zw7nhsmn$73>4R9enw)CzBcMRjBxWDAoD;zhVI&9}jzgVz^tGuYg$~7@Iqqam6{gQ0+bbT}{oL)evAfM~{FgrrmC1!a zy=2wOAdi-hgvirRL7cZxRNy>l^x5vmwqvLS_PYQshBZx&opx!#HOPMjoom<)JuL#&AHbl)SJ|< z^fh{y@uBGjzXIOdbEydt&`(iXy@R3rKBYMVrnO4A3-eu;l5zA8Q`Zcf4ysJD^K`0< zlw(07}uF14p!T_YD;+4kNbk0qf;gRXGVP6lQ^j4!w` ztbPliSS*bMzN6A+(IG6fv7bo^G)+^n=>wdgZGxZUXJcftGrXb8K2D$$VB#Mk!0)l7 zH?Feu+Yi&~u+=Q^<&l$0dym}Zl=frias}++V#2rTpbas< z7Mu_q%;dN#b7R2bMq+v+q+aBKx&DoxC#iXSsNtpX88+>7>5Gs#0X~rILnbXN-!a}qV&_B+pY*~WtsHqyc;ES83UI zo*<^(!Z5z(sRaVM+SJ8|4Z{S^G^EuJcZHsHPi0>n>6OW_1wK(A&=JG%%khU(ksRPe zP=xlIAk81t(wrsZYy16iV$XxUhfW-!_sBh>>JxmmbZ3uyKL1by$Li+C zI5!tc^`PPH6V%Lb=U6MUpevlgWJQOdxJto!8j)^GX5^g< z@CwFlfD0;!>wNG7xw5k17wW~65LW+wY&O-%AAEYa(@3QSrX^}V`x&&%aGv8|r@{2T zkEcPQVgR{KAq@~fFKqOmZfjHTS9}MPQM^-7$c2q(fx?7|(1~acHY(%(L(5S<;&Qs0 z?^_76S7vVRQRCA;bXd(_TIOoG6P;?>yT%)!^*A5)JREGLNEWv! z2;z&n>0>38K5V-2ZxE3vufAu*oD)uNn!Y-;1!5N1kjh?|Utm;x%lOp1P&<~K zq&pZ3bAi1u{6$?co|1GD+E~cb7yYqCkjjr_;BXoC>VR#p(#wY-vUIS+!KtUxh4!p{ zdETMz40Z8BqNU1e58{o3?cZGq>^fk2|NJ&EE6^h_OOR|4!r#`#8Ws%QJRA@EQCD|h z8a_X`Cx5W2yKW=hSN-1zwYK<96BAN)T5-HhJBqfvObFcvrKNSvx1YcPYyw8J<>ciX zEUo{m1$bsSYyXDPe>$*PN$2d>w!qKGczB}Lv&jpfJ^kWV!+F^hM| zCD05f|FslS*_=_$+^bcjdfD|M#`+D>4nPS4c&6=_$7D)!xdK)H`K*Mf!8Ek68voI> z%R&|}QCp0f%Mxc}osJ8&t4J5nuQ8bSRMW~G2o>Q#0>KIP+1Y2iV`;m>?0;pr403!) z@D7F4A_fNi%(I~{6Nk)expsE~7FmDFb^_+~1R$zcZ&W7ecB%Zse2k`p*_foS%B)Y$ z)7lQFGwdC6c>N&4&O&cA&RB>?w_BO>Z`6FdmsK~2uJ=eL{koTfpzbw%&!_#-J7A#^ z6%YYFW$idAU?TYT%Nw$vqx143TGhay#}z^p&`igC)+vuy$mJxmrJn6)Yh(ij+0y*E zHAksAPgiUen%^Vp%U}QUD zt!TM&VMZ5X?`UUBfpJLs>DVEOXOgq9oc!j)z;4~N6xTv5xVG~9_tyvNQbYTf7TjhT z8w#k)B7z_%3Nk={9EfSF>p7Mh(ep0(nB2d;cE@dCWPy^e`8<{u*GxzjKr0Q5F*}(U zBYKDWQ;+<4SdWYwxN6^AacJ+|dcFg)OeB+XPB3_^;#SNoq)DJNB=E$sCp2VjTgmMp zQ)e%fucq<#k*fx4GIl~aoDolAN4~TdQ^ipJcLV-QQQB-Kg;E9i{wTz)2vbMYv)(6`;la2Rwxa_7ylRqWa%)G^$;tOU;}MaZVe6Dt_EJWI+Luu{10mb9TCqy$Gc|I)V|Oo zF5bUst^lX_&YYiYPLy{0)%61&HwG536lg^E9Mu88KD;hY2zL2fzAh%i&L{u zBij`y91K^A-z1~Glxgt|?kWOp1i*JG<|T~|MDj=tbJ$5lY)9K?eM2 zvfr!ZVCCGz&d-%K%?}jj1=+fYBJ2>MBt+UWSSa-LH>c9x*4$QmJ;8-jA7Jn}`vp#) z8}s-23gat8aD7R0+5X@jN_;k8Z*J-GRMxt+iT9qP|5Tl#XF=1{>D5xvuJTe$M!=>( zhpx4?KDd=|U0g!rC3EbPm_?!Tg!kTN?|RFsKZUKBw!5w&1m;5|#)4WIr)y(`47v*| z&B(b^|9aHcI-s7zeppno1l_!gWk0E$OheA?8lCm1agZL*$*#rO3lSB{1CMUl@#&b^ z3Q;t5=E{ELUBFIyPsb=JMaB=(Rw!(6!RfBcY>H1Nh&r!@??E95uCreJ>MbZ5QII7R zEpGw6uG-&TIJ?=qMy{=`J#GCsq$tO}_daWDXooI^&+>xqNhyNA{J)Q5gMW;J>PH+G zfFW};GcYam=ZANTjI3J#WwLm8TY!q{i`931xj*|4NNNd~e}~4~T=?b+-ph6f^V7|A z8NIIs3KnXY|0AVOfOebIy;EjFn@f9$XS?l2Gn|$1@QSkGHe@k6efuEpDpZUk#KZpV24+oX>((;v7 zN59lbKXVup9o_*nzTg|BgiY3#eHF@l=CCCafKh*QkkeIk>GQ;jqA9$-y_NvHH=tG`j_3~^tU>}V3(O=Q4UdtU;*uit`!`yGos7AjcnbU#epr?zz zm67NKm6}o`b8`T2XkxwAx17P zN#TglOXU;|a;f(ins>e1G0j}}eZR#ZkEe8|J|5)DGLV{H!C;C=E-!)dmjN$*1hoRl zeZV$xkG8FSd~Vz_B7ezGP09Et%U;Rl?(Mzp^EXc6Gsm8%wCopg%9ywP=gj{r!c^^! z!C8>92~j^j9#&(WL)~JpTG`(FdXSZF1d~NDsYnit?gz^7?^#7(&ngClZhT`F;7&Ru zu;H>Q{n_-%-bx044a?|E3_5-WN6_HSFJnMWj?KtxH8M(8n z`Jb4VD0Vczjf!cBqCx7wJoCt4z-iRzZII0DZ;@{4 zNH(umX)u%QgNm6s;uL<%3;D;`US}S&|7O-I{>LNJgkfNWZWM0sCeO8anZismQ1VNW z2Hm|PnE=X9SCv_pFTKlkvEO|HdU zmzldbdJln-@y|LoXFtRmwof>UrjLER*3$Lf;OyJ4ZARs%fnEJsT?w(^obP*<;L9a} zfDUCUG`v5!J^iFC9d-{YmG^xC z+2%OiL?8nqoz{bDX9bx=6x42Mg1D7Z?$$@X#D~201NP4@o*l~5m^}DAU>bH1oi4Vv zFcxAUd7DMTZdtI;KljOnkAv0Y`_#w%eql?pv$->*=V3<`(Q*6wUFPE(Zo`V3nT2z7 z#ck&3i~saGx&s6*PX7P`mu8Q5^SisdaA|i z5Amw_7QjWa5?V}dOhNLO_*0h{eGCL_%ZbrIS^cn$t$A(bXvK=*cPu}DW;gXg{$o1f z4$XdokPS0E&66la#N`-mQ#6Iu0>&HWLytS9!SBSB-u3)^CL!ce`qf<4%hNs}_Q9eH zOChUeg_!K>%>mKu`SNC3WX7P9M95{$u{hx#v@0O;|Uxr_-j zJj7~T!m2}Qg8o}%pOyK~lF#US%Cl;xS^`WR$(32(3%p+K8^F{Dsx>g!( z8qC`7{B=X|!;`C(UzP0H6*G%fW^c7G^&dxs=*SAWy_ADn-cAKn=$i!(8 z){fG?ooR)%fwNvBJ96euy*r+IpZYjbkB&`+Cfr!^A_(D%iwG3gllrvn|5+p>o5OCm+H>{ z6qEOqR-mdD!V+VxUog^!vOnNr6KV^l6C~Suqm@^lhcepHrp}unMtX zS-}b4xO1)QcsQ5ZelN-_$sxzSSPi%ezd_hvfrapoMY-kmU~0W-o0*r$)1CTN$tT%4 z53l{!#5>J@!rXE`pZdY?>pustR&`k(BQt;kWNzkx4pC2vJ#C7q&p1u3z1D_NwE-3v zRVFv!us8m{W@zsl)jeYHR3+b_k-DjTajc-$L4Fxku5qTCZ#I^7t(hk?eO)NF0 zk$2HeC^j8$Rs2U=)h|5im+P}5mDMw(O@}kmSB);G^COU<(SimLWyx6In0d17&Dj|#u$v5*|YZb{qEgf-~A8l>)P)R&-K2)yw`i( z&wYRH=eghe^Lc3Os7UOt00kOaJ{*ZMLxIHcIS~V=7EjPvBHja(;a3b)E~c)rMS9qq z;f3|TIy8H($@iva_eO&P<>!$xAgsbs>Po1wn$HE^c8(6Ab7S71U>4l*-ln|oy_(r8 zqs;M!AT$n$iekxD2Gay*bXheO=%UA~yyY3G&7~3khAeY z<$X$~)!PX*@{6SY+kniIcBbH4KdBbiG#*NrfRsvgVfaulmGQ|2J@L%aJn`#S24(*A zJvWmqf7a7;v8SQ#=OW+8ier!z5jWkXIlcIx`o#>WfXCxCWg~bpsPI7W47xfPRd6&IM5aN27>9wkFB%A=A$bG-CyeFJ$tQQjiwK1m>+k_Rc)TXm-y* zt?b-ppUCxVW~Qi`?9B#ab`@VRq-Uu7Qd#0&+N*@Gc=4PBi41js_$+Qa0Lltj*%%j^0<3)37WzwU`xySGMr7pbZ+x<{a?68393 zQQ*woRsG1O9ZWUKJ*1B)SDgIw+&?7}=hcHYIQfS$)$WuUep(NQmg8as#LhZ& zMY=Uiu24=zM3wu7M4LUpAXPvqx6nq2;8qrwjj-CDzIM7^J zG$v=+O;qgi=un7nu+?!sZA;9# zn5|X+7CAzy4_KEfzx_o!1NkB5yOlgvRI<+*4*RJTJRgHTVhQP-T!@+XE!w+X+qwV= zgQVh(gtA@-gs)iHoX^#jlqHV~h#F!97;0<&&AABsUTkAo7!ZZ4LeWLqPt5fFGNoK` zgj5qX;m82~bL_Wwu3g~>4+kg9o_mSHBAn#f9`K#a!y%6xY0RaJ)+Ov#CyORrsCq*# z2Png8*HRh`ux739a00L9g}&HhkI;HFZ97Cr8}#aAjqq+YUnT$2Ucq+Q|93`#vk^}P)}#U9CXy$x8>e2_B6o}1Pi-;i?#yRIDiXiB^e_FPn=?lft*nVZ z+4?U-S7O+P4|idDMM3qg-KpEcEUfxKWgYQ=MLMNg=Tp^ZrB!FB<8XJ{NgrC~<8AX= zgxO$1ED#-!vD-P+CRzc#b33tP(px3Bj;Pr=lj$^<*mHo;_*7A|kA(;Db1C4Jz_UWv z$(dRE1gjR7p0I24e}M|}Pk*&sHf+j<>qQB_>sqsySADy!i|%}HGs<%$9g>dO_n@3V zocmDh>%b3^?{6}K0-Pqc|NfRFs9(dakzjYIoBfE!r!?tBO z?SwW)-4>4*aeNNuZ-NjTu8;gt-${ChzZnL6*uKQQ;$?P1x#U*Ytz1!?ph;V zoO?AD*p{*}nFn0kakL9>6DE|Mse$o_zq zEX4$9uY}##cQcF{vHsjS89@81k;4OJ`eKqr$fA|R2|=ygx91)Y04|>s1E1Hgc#*U3 zFaexI6t{5Wq2Z^9OT_u1w8a)jfT$<@L7JZI(>ke5wY~@YD=zN6A{lb-laNH@f9i@D z^HE2)2FK;qil2*;+XuWO`#Drh%0Rm8jHelL_Q7)*gLQydzrN{SsYB$h;{1odh$SiI zlL3m)&+MJ}L+N{j@*|yhxi+40raY1rp2t8yn`vV+0u35xCyrY1-KqQyzJ>X1e&FrZ z!cLU@xV`W!tCY325#kbdU>+%bt%!wUj$9s2e+ki};2=^cp&^$*xP_vO-OG;LM-pd^ zZq!ZXJS%J?#Eiy*I^Yu;d}X1H{&qul@G&GaQZ}ro7%r6C8M20OISI`f)@OxetjaK{ zZDYUNM0BW*_+A?T@SnpGF*zocBrblay0sN0q>q;4+~IKC3vb5$CjsiW`EqdvGUchN z4h$bYYQF-KN$0IV(|x(oQ_vUFt+ZXKVU*FZDr{~jw4pM2a+(ny=-2kr z^wQxwO4zfV+h<9j9={?@CTOQ}%rduu(+tY^Gmgv2v>kPg>t_lS`!^{V|G`d(jnI~q zoc84;DU!WMRzL2F(54-VYeXRRrW;wdv5hFpHz(}>%SJYUq@QgT|FY6AVj?+b)9joa z^h=^ZPi9zcB66Zxx0CZa2Tcy38OMuc;)C zD@mz$Li9$9U$lqyaIB)o@pe4^taT)v37@>c6|C7d@!2?#@uz)a(wd2Ye-6ojV%VXl z+Q;`b#;_M`W`yZ=b#<~bB(CxGgbU5trKy8dj*CK^yg=sVO8p;o4kd$Unj((V3&3{? zQwi<{ot*sx#@E`l>b;Tq8|lDlac9fQmuVHVS{sFNUo)FSkkA$OJL?5!yXoFOsk_%m zX#*^767fC!wC=6QLdPJ`GBt1a{rj>_^=k|O26O#{GnXx&fDEh(EZF6$nJ_G7!+2roYp~*?#<=}t$=1&O+P;%8lK2471?6c^eQ*>l zHh?4GobaobEU+i|MFX67X<}>U?&~h~e?`q-@uMRl&3_E4&^rE8W7LX=>x}SGhwzld zj>HqEC7nbn{RZ|J;~CdPDj{|8?%lg($Dv_S*FIwCmYbGWd8ZR6zi1Fk#MP6mQjr?& zYvE-|y%fddn}XY4imDD5u5yw5x0m#=1XJy)Y`l_dqEOmB4Zf!d`BQDElowNslaTkxBJ2{ zVR-l}Zox&hu=<{aADYrPPmLtq=z zr0dFN1nEvM?sT2FaV5@nvKGqx?RRt1<;i2+S;$XOc;64pU(o#JHn10Ko?`Walmv$` zmUajTy3l?imJ&~I<3yExg8vArPY>HHVh?vli4#we8Pm<3zc++=xx2fsvIX3W*3W}_ zU5ss`cXz#WJ7^|FDd9+eAN`Oc(qT_Ufe(g$YKg7j#zFhRcDz;wrLm0c>s94pIuW5( z^Xjz{lAuN}0CsLY8Ht~LTn0zu48qsTTGi*Zzu8yA!YU=ZO=V6;BFSLR8r778n^WQP zE%{U?b(jGmm>g#<&bSwBQ&9^23p$?JLy@j`?ZZnXvP=|^*#;l?=vDDAW-~5FM z03Z%J`|HVzZP`{g@~qX1Oo115_=WcM7YKt|#u|pE6|iR(=>Z%=7;3(~7{(p459Ibr zLfypB>$CQ)J8CT?=r)C$W!J*^S+&*XI7ePtR2jX&#lW2i==EmLRM-#jqZwXd({htH z{^vyzMB7VbeP(APm;vDup(cb3T~$M_PTz zSc+Yn;`y3G)cIw>q_flbD;iNzxYluEOj~^;gDID#T4Hi@oDd+Pt6TT1;qz1+s?cn# zMB=n-LIymZ@9*%oL6S}phBXQ1F8i7ye{>l$@2lIw9t`XcRcX!Ru2+41eM1olX4Yw7 z%Rg#{;+D-s)wUY?3fi0E?B}h;KicO-7l;>iCe;0U1_NM{E7j!ZWmv%u~8@VGY{aiJ$haQ%J42PJ?-Tb|6_ruHl(tRwpBWHoy z&J-%Uac{U|LFf6|MB7br-8#7s`?41zFamdgfBe|nAtLATb#+k$iu>;#f$_ddN$J8i zK4;OfL&uYpVgd#ESkN2Et--;q?`UDEeG&;VkLP6VD5UB?$;jZ&$wyz@P~Jh5PRwG5 z!Pa2B%mY=QlpkaK$0`1=T=U;q=l}11MDPDw*1%}9U?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" - local s={} - for i=1,255 do - s[#s+1]=string.char(i) - end - s=table.concat(s) - local len = #s - for i = 1, len do - if isEncode then - self.mDictionary[s:sub(i, i)] = i - else - self.mDictionary[i] = s:sub(i, i) - end - end - self.mDictionaryLen = len -end -function CLZWCompression:Encode(sInput) - self:InitDictionary(true) - local s = "" - local ch - local len = #sInput - local result = {} - local dic = self.mDictionary - local temp - for i = 1, len do - ch = sInput:sub(i, i) - temp = s..ch - if dic[temp] then - s = temp - else - result[#result + 1] = dic[s] - self.mDictionaryLen = self.mDictionaryLen + 1 - dic[temp] = self.mDictionaryLen - s = ch - end - end - result[#result + 1] = dic[s] - return result -end -function CLZWCompression:Decode(data) - self:InitDictionary(false) - local dic = self.mDictionary - local entry - local ch - local prevCode, currCode - local result = {} - prevCode = data[1] - result[#result + 1] = dic[prevCode] - for i = 2, #data do - currCode = data[i] - entry = dic[currCode] - if entry then - ch = entry:sub(1, 1) - result[#result + 1] = entry - else - ch = dic[prevCode]:sub(1, 1) - result[#result + 1] = dic[prevCode]..ch - end - dic[#dic + 1] = dic[prevCode]..ch - prevCode = currCode - end - return table.concat(result) -end - -return CLZWCompression diff --git a/examples/love2d Threading Example/bin/converters/base64.lua b/examples/love2d Threading Example/bin/converters/base64.lua deleted file mode 100644 index 6b134c3..0000000 --- a/examples/love2d Threading Example/bin/converters/base64.lua +++ /dev/null @@ -1,30 +0,0 @@ -local base64={} -local bs = { [0] = - 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', - 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', - 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/', -} -local bsd=table.flip(bs) -local char=string.char -function base64.encode(s) - local byte, rep, pad = string.byte, string.rep, 2 - ((#s-1) % 3) - s = (s..rep('\0', pad)):gsub("...", function(cs) - local a, b, c = byte(cs, 1, 3) - return bs[bit.rshift(a,2)] .. bs[bit.bor(bit.lshift(bit.band(a,3),4),bit.rshift(b,4))] .. bs[bit.bor(bit.lshift(bit.band(b,15),2),bit.rshift(c,6))] .. bs[bit.band(c,63)] - end) - return s:sub(1, #s-pad) .. rep('=', pad) -end -function base64.decode(s) - local s=s:match("["..s.."=]+") - local p,cc=s:gsub("=","A") - local r="" - local n=0 - s=s:sub(1,#s-#p)..p - for c = 1,#s,4 do - n = bit.lshift(bsd[s:sub(c, c)], 18) + bit.lshift(bsd[s:sub(c+1, c+1)], 12) + bit.lshift(bsd[s:sub(c + 2, c + 2)], 6) + bsd[s:sub(c + 3, c + 3)] - r = r .. char(bit.band(bit.arshift(n, 16), 0xFF)) .. char(bit.band(bit.arshift(n, 8), 0xFF)) .. char(bit.band(n, 0xFF)) - end - return r:sub(1,-(cc+1)) -end -return base64 diff --git a/examples/love2d Threading Example/bin/converters/base91.lua b/examples/love2d Threading Example/bin/converters/base91.lua deleted file mode 100644 index 157f312..0000000 --- a/examples/love2d Threading Example/bin/converters/base91.lua +++ /dev/null @@ -1,72 +0,0 @@ -local base91={} -local b91enc={[0]= - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', - 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', - 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', - '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '#', '$', - '%', '&', '(', ')', '*', '+', ',', '.', '/', ':', ';', '<', '=', - '>', '?', '@', '[', ']', '^', '_', '`', '{', '|', '}', '~', '"' -} -local b91dec=table.flip(b91enc) -function base91.decode(d) - local l,v,o,b,n = #d,-1,"",0,0 - for i in d:gmatch(".") do - local c=b91dec[i] - if not(c) then - -- Continue - else - if v < 0 then - v = c - else - v = v+c*91 - b = bit.bor(b, bit.lshift(v,n)) - if bit.band(v,8191) then - n = n + 13 - else - n = n + 14 - end - while true do - o=o..string.char(bit.band(b,255)) - b=bit.rshift(b,8) - n=n-8 - if not (n>7) then - break - end - end - v=-1 - end - end - end - if v + 1>0 then - o=o..string.char(bit.band(bit.bor(b,bit.lshift(v,n)),255)) - end - return o -end -function base91.encode(d) - local b,n,o,l=0,0,"",#d - for i in d:gmatch(".") do - b=bit.bor(b,bit.lshift(string.byte(i),n)) - n=n+8 - if n>13 then - v=bit.band(b,8191) - if v>88 then - b=bit.rshift(b,13) - n=n-13 - else - v=bit.band(b,16383) - b=bit.rshift(b,14) - n=n-14 - end - o=o..b91enc[v % 91] .. b91enc[math.floor(v / 91)] - end - end - if n>0 then - o=o..b91enc[b % 91] - if n>7 or b>90 then - o=o .. b91enc[math.floor(b / 91)] - end - end - return o -end -return base91 diff --git a/examples/love2d Threading Example/bin/hashes/md5.lua b/examples/love2d Threading Example/bin/hashes/md5.lua deleted file mode 100644 index 7ffa55a..0000000 --- a/examples/love2d Threading Example/bin/hashes/md5.lua +++ /dev/null @@ -1,377 +0,0 @@ -local md5 = { - _VERSION = "md5.lua 1.1.0", - _DESCRIPTION = "MD5 computation in Lua (5.1-3, LuaJIT)", - _URL = "https://github.com/kikito/md5.lua", - _LICENSE = [[ - MIT LICENSE - - Copyright (c) 2013 Enrique García Cota + Adam Baldwin + hanzao + Equi 4 Software - ]] -} - --- bit lib implementions - -local char, byte, format, rep, sub = - string.char, string.byte, string.format, string.rep, string.sub -local bit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshift - -local ok, bit = pcall(require, 'bit') -if ok then - bit_or, bit_and, bit_not, bit_xor, bit_rshift, bit_lshift = bit.bor, bit.band, bit.bnot, bit.bxor, bit.rshift, bit.lshift -else - ok, bit = pcall(require, 'bit32') - - if ok then - - bit_not = bit.bnot - - local tobit = function(n) - return n <= 0x7fffffff and n or -(bit_not(n) + 1) - end - - local normalize = function(f) - return function(a,b) return tobit(f(tobit(a), tobit(b))) end - end - - bit_or, bit_and, bit_xor = normalize(bit.bor), normalize(bit.band), normalize(bit.bxor) - bit_rshift, bit_lshift = normalize(bit.rshift), normalize(bit.lshift) - - else - - local function tbl2number(tbl) - local result = 0 - local power = 1 - for i = 1, #tbl do - result = result + tbl[i] * power - power = power * 2 - end - return result - end - - local function expand(t1, t2) - local big, small = t1, t2 - if(#big < #small) then - big, small = small, big - end - -- expand small - for i = #small + 1, #big do - small[i] = 0 - end - end - - local to_bits -- needs to be declared before bit_not - - bit_not = function(n) - local tbl = to_bits(n) - local size = math.max(#tbl, 32) - for i = 1, size do - if(tbl[i] == 1) then - tbl[i] = 0 - else - tbl[i] = 1 - end - end - return tbl2number(tbl) - end - - -- defined as local above - to_bits = function (n) - if(n < 0) then - -- negative - return to_bits(bit_not(math.abs(n)) + 1) - end - -- to bits table - local tbl = {} - local cnt = 1 - local last - while n > 0 do - last = n % 2 - tbl[cnt] = last - n = (n-last)/2 - cnt = cnt + 1 - end - - return tbl - end - - bit_or = function(m, n) - local tbl_m = to_bits(m) - local tbl_n = to_bits(n) - expand(tbl_m, tbl_n) - - local tbl = {} - for i = 1, #tbl_m do - if(tbl_m[i]== 0 and tbl_n[i] == 0) then - tbl[i] = 0 - else - tbl[i] = 1 - end - end - - return tbl2number(tbl) - end - - bit_and = function(m, n) - local tbl_m = to_bits(m) - local tbl_n = to_bits(n) - expand(tbl_m, tbl_n) - - local tbl = {} - for i = 1, #tbl_m do - if(tbl_m[i]== 0 or tbl_n[i] == 0) then - tbl[i] = 0 - else - tbl[i] = 1 - end - end - - return tbl2number(tbl) - end - - bit_xor = function(m, n) - local tbl_m = to_bits(m) - local tbl_n = to_bits(n) - expand(tbl_m, tbl_n) - - local tbl = {} - for i = 1, #tbl_m do - if(tbl_m[i] ~= tbl_n[i]) then - tbl[i] = 1 - else - tbl[i] = 0 - end - end - - return tbl2number(tbl) - end - - bit_rshift = function(n, bits) - local high_bit = 0 - if(n < 0) then - -- negative - n = bit_not(math.abs(n)) + 1 - high_bit = 0x80000000 - end - - local floor = math.floor - - for i=1, bits do - n = n/2 - n = bit_or(floor(n), high_bit) - end - return floor(n) - end - - bit_lshift = function(n, bits) - if(n < 0) then - -- negative - n = bit_not(math.abs(n)) + 1 - end - - for i=1, bits do - n = n*2 - end - return bit_and(n, 0xFFFFFFFF) - end - end -end - --- convert little-endian 32-bit int to a 4-char string -local function lei2str(i) - local f=function (s) return char( bit_and( bit_rshift(i, s), 255)) end - return f(0)..f(8)..f(16)..f(24) -end - --- convert raw string to big-endian int -local function str2bei(s) - local v=0 - for i=1, #s do - v = v * 256 + byte(s, i) - end - return v -end - --- convert raw string to little-endian int -local function str2lei(s) - local v=0 - for i = #s,1,-1 do - v = v*256 + byte(s, i) - end - return v -end - --- cut up a string in little-endian ints of given size -local function cut_le_str(s,...) - local o, r = 1, {} - local args = {...} - for i=1, #args do - table.insert(r, str2lei(sub(s, o, o + args[i] - 1))) - o = o + args[i] - end - return r -end - -local swap = function (w) return str2bei(lei2str(w)) end - --- An MD5 mplementation in Lua, requires bitlib (hacked to use LuaBit from above, ugh) --- 10/02/2001 jcw@equi4.com - -local CONSTS = { - 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, - 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, - 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, - 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, - 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, - 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, - 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, - 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, - 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, - 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, - 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, - 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, - 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, - 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, - 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, - 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, - 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476 -} - -local f=function (x,y,z) return bit_or(bit_and(x,y),bit_and(-x-1,z)) end -local g=function (x,y,z) return bit_or(bit_and(x,z),bit_and(y,-z-1)) end -local h=function (x,y,z) return bit_xor(x,bit_xor(y,z)) end -local i=function (x,y,z) return bit_xor(y,bit_or(x,-z-1)) end -local z=function (ff,a,b,c,d,x,s,ac) - a=bit_and(a+ff(b,c,d)+x+ac,0xFFFFFFFF) - -- be *very* careful that left shift does not cause rounding! - return bit_or(bit_lshift(bit_and(a,bit_rshift(0xFFFFFFFF,s)),s),bit_rshift(a,32-s))+b -end - -local function transform(A,B,C,D,X) - local a,b,c,d=A,B,C,D - local t=CONSTS - - a=z(f,a,b,c,d,X[ 0], 7,t[ 1]) - d=z(f,d,a,b,c,X[ 1],12,t[ 2]) - c=z(f,c,d,a,b,X[ 2],17,t[ 3]) - b=z(f,b,c,d,a,X[ 3],22,t[ 4]) - a=z(f,a,b,c,d,X[ 4], 7,t[ 5]) - d=z(f,d,a,b,c,X[ 5],12,t[ 6]) - c=z(f,c,d,a,b,X[ 6],17,t[ 7]) - b=z(f,b,c,d,a,X[ 7],22,t[ 8]) - a=z(f,a,b,c,d,X[ 8], 7,t[ 9]) - d=z(f,d,a,b,c,X[ 9],12,t[10]) - c=z(f,c,d,a,b,X[10],17,t[11]) - b=z(f,b,c,d,a,X[11],22,t[12]) - a=z(f,a,b,c,d,X[12], 7,t[13]) - d=z(f,d,a,b,c,X[13],12,t[14]) - c=z(f,c,d,a,b,X[14],17,t[15]) - b=z(f,b,c,d,a,X[15],22,t[16]) - - a=z(g,a,b,c,d,X[ 1], 5,t[17]) - d=z(g,d,a,b,c,X[ 6], 9,t[18]) - c=z(g,c,d,a,b,X[11],14,t[19]) - b=z(g,b,c,d,a,X[ 0],20,t[20]) - a=z(g,a,b,c,d,X[ 5], 5,t[21]) - d=z(g,d,a,b,c,X[10], 9,t[22]) - c=z(g,c,d,a,b,X[15],14,t[23]) - b=z(g,b,c,d,a,X[ 4],20,t[24]) - a=z(g,a,b,c,d,X[ 9], 5,t[25]) - d=z(g,d,a,b,c,X[14], 9,t[26]) - c=z(g,c,d,a,b,X[ 3],14,t[27]) - b=z(g,b,c,d,a,X[ 8],20,t[28]) - a=z(g,a,b,c,d,X[13], 5,t[29]) - d=z(g,d,a,b,c,X[ 2], 9,t[30]) - c=z(g,c,d,a,b,X[ 7],14,t[31]) - b=z(g,b,c,d,a,X[12],20,t[32]) - - a=z(h,a,b,c,d,X[ 5], 4,t[33]) - d=z(h,d,a,b,c,X[ 8],11,t[34]) - c=z(h,c,d,a,b,X[11],16,t[35]) - b=z(h,b,c,d,a,X[14],23,t[36]) - a=z(h,a,b,c,d,X[ 1], 4,t[37]) - d=z(h,d,a,b,c,X[ 4],11,t[38]) - c=z(h,c,d,a,b,X[ 7],16,t[39]) - b=z(h,b,c,d,a,X[10],23,t[40]) - a=z(h,a,b,c,d,X[13], 4,t[41]) - d=z(h,d,a,b,c,X[ 0],11,t[42]) - c=z(h,c,d,a,b,X[ 3],16,t[43]) - b=z(h,b,c,d,a,X[ 6],23,t[44]) - a=z(h,a,b,c,d,X[ 9], 4,t[45]) - d=z(h,d,a,b,c,X[12],11,t[46]) - c=z(h,c,d,a,b,X[15],16,t[47]) - b=z(h,b,c,d,a,X[ 2],23,t[48]) - - a=z(i,a,b,c,d,X[ 0], 6,t[49]) - d=z(i,d,a,b,c,X[ 7],10,t[50]) - c=z(i,c,d,a,b,X[14],15,t[51]) - b=z(i,b,c,d,a,X[ 5],21,t[52]) - a=z(i,a,b,c,d,X[12], 6,t[53]) - d=z(i,d,a,b,c,X[ 3],10,t[54]) - c=z(i,c,d,a,b,X[10],15,t[55]) - b=z(i,b,c,d,a,X[ 1],21,t[56]) - a=z(i,a,b,c,d,X[ 8], 6,t[57]) - d=z(i,d,a,b,c,X[15],10,t[58]) - c=z(i,c,d,a,b,X[ 6],15,t[59]) - b=z(i,b,c,d,a,X[13],21,t[60]) - a=z(i,a,b,c,d,X[ 4], 6,t[61]) - d=z(i,d,a,b,c,X[11],10,t[62]) - c=z(i,c,d,a,b,X[ 2],15,t[63]) - b=z(i,b,c,d,a,X[ 9],21,t[64]) - - return bit_and(A+a,0xFFFFFFFF),bit_and(B+b,0xFFFFFFFF), - bit_and(C+c,0xFFFFFFFF),bit_and(D+d,0xFFFFFFFF) -end - ----------------------------------------------------------------- - -local function md5_update(self, s) - self.pos = self.pos + #s - s = self.buf .. s - for ii = 1, #s - 63, 64 do - local X = cut_le_str(sub(s,ii,ii+63),4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4) - assert(#X == 16) - X[0] = table.remove(X,1) -- zero based! - self.a,self.b,self.c,self.d = transform(self.a,self.b,self.c,self.d,X) - end - self.buf = sub(s, math.floor(#s/64)*64 + 1, #s) - return self -end - -local function md5_finish(self) - local msgLen = self.pos - local padLen = 56 - msgLen % 64 - - if msgLen % 64 > 56 then padLen = padLen + 64 end - - if padLen == 0 then padLen = 64 end - - local s = char(128) .. rep(char(0),padLen-1) .. lei2str(bit_and(8*msgLen, 0xFFFFFFFF)) .. lei2str(math.floor(msgLen/0x20000000)) - md5_update(self, s) - - assert(self.pos % 64 == 0) - return lei2str(self.a) .. lei2str(self.b) .. lei2str(self.c) .. lei2str(self.d) -end - ----------------------------------------------------------------- - -function md5.new() - return { a = CONSTS[65], b = CONSTS[66], c = CONSTS[67], d = CONSTS[68], - pos = 0, - buf = '', - update = md5_update, - finish = md5_finish } -end - -function md5.tohex(s) - return format("%08x%08x%08x%08x", str2bei(sub(s, 1, 4)), str2bei(sub(s, 5, 8)), str2bei(sub(s, 9, 12)), str2bei(sub(s, 13, 16))) -end - -function md5.sum(s) - return md5.new():update(s):finish() -end - -function md5.sumhexa(s) - return md5.tohex(md5.sum(s)) -end - -return md5 diff --git a/examples/love2d Threading Example/bin/init.lua b/examples/love2d Threading Example/bin/init.lua deleted file mode 100644 index 3728c6f..0000000 --- a/examples/love2d Threading Example/bin/init.lua +++ /dev/null @@ -1,739 +0,0 @@ -bin={} -bin.Version={5,1,0} -bin.stage='stable' -bin.data='' -bin.t='bin' -bin.__index = bin -bin.__tostring=function(self) return self:getData() end -bin.__len=function(self) return self:getlength() end -bin.lastBlockSize=0 -bin.streams={} --- Helpers -function bin.getVersion() - return bin.Version[1]..'.'..bin.Version[2]..'.'..bin.Version[3] -end -require("bin.support.utils") -if jit then - bit=require("bit") -elseif bit32 then - bit=bit32 -else - bit=require("bin.numbers.no_jit_bit") -end -base64=require("bin.converters.base64") -base91=require("bin.converters.base91") -bin.lzw=require("bin.compressors.lzw") -- A WIP -bits=require("bin.numbers.bits") -infinabits=require("bin.numbers.infinabits") -- like the bits library but works past 32 bits for 32bit lua and 64 bits for 64 bit lua. -bin.md5=require("bin.hashes.md5") -randomGen=require("bin.numbers.random") -function bin.setBitsInterface(int) - bin.defualtBit=int or bits -end -bin.setBitsInterface() -function bin.normalizeData(data) -- unified function to allow for all types to string - if type(data)=="string" then return data end - if type(data)=="table" then - if data.Type=="bin" or data.Type=="streamable" or data.Type=="buffer" then - return data:getData() - elseif data.Type=="bits" or data.Type=="infinabits" then - return data:toSbytes() - elseif data.Type=="sink" then - -- LATER - else - return "" - end - elseif type(data)=="userdata" then - if tostring(data):sub(1,4)=="file" then - local cur=data:seek("cur") - data:seek("set",0) - local dat=data:read("*a") - data:seek("set",cur) - return dat - else - error("File handles are the only userdata that can be used!") - end - end -end -function bin.resolveType(tab) -- used in getblock for auto object creation. Internal method - if tab.Type then - if tab.Type=="bin" then - return bin.new(tab.data) - elseif tab.Type=="streamable" then - if bin.fileExist(tab.file) then return nil,"Cannot load the stream file, source file does not exist!" end - return bin.stream(tab.file,tab.lock) - elseif tab.Type=="buffer" then - local buf=bin.newDataBuffer(tab.size) - buf[1]=tab:getData() - return buf - elseif tab.Type=="bits" then - local b=bits.new("") - b.data=tab.data - return b - elseif tab.Type=="infinabits" then - local b=infinabits.new("") - b.data=tab.data - return b - elseif tab.Type=="sink" then - return bin.newSync(tab.data) - else -- maybe a type from another library - return tab - end - else return tab end -end -function bin.fileExist(path) - g=io.open(path or '','r') - if path =='' then - p='empty path' - return nil - end - if g~=nil and true or false then - p=(g~=nil and true or false) - end - if g~=nil then - io.close(g) - else - return false - end - return p -end -function bin.toHex(str) - local str=bin.normalizeData(str) - return (str:gsub('.', function (c) - return string.format('%02X', string.byte(c)) - end)) -end -function bin.fromHex(str) - return (str:gsub('..', function (cc) - return string.char(tonumber(cc, 16)) - end)) -end -function bin.toBase64(s) - return base64.encode(s) -end -function bin.fromBase64(s) - return base64.decode(s) -end -function bin.toBase91(s) - return base91.encode(s) -end -function bin.fromBase91(s) - return base91.decode(s) -end --- Constructors -function bin.new(data) - data=bin.normalizeData(data) - local c = {} - setmetatable(c, bin) - c.data=data - c.Type="bin" - c.t="bin" - c.pos=1 - c.stream=false - return c -end -function bin.newFromBase64(data) - return bin.new(bin.fromBase64(data)) -end -function bin.newFromBase91(data) - return bin.new(bin.fromBase91(data)) -end -function bin.newFromHex(data) - return bin.new(bin.fromHex(data)) -end -function bin.load(path) - if type(path) ~= "string" then error("Path must be a string!") end - local f = io.open(path, 'rb') - local content = f:read('*a') - f:close() - return bin.new(content) -end -function bin.stream(file,l) - if not(l==false) then l=true end - local c=bin.new() - c.Type="streamable" - c.t="streamable" - if bin.streams[file]~=nil then - c.file=file - c.lock = l - c.workingfile=bin.streams[file][1].workingfile - bin.streams[file][2]=bin.streams[file][2]+1 - c.stream=true - return c - end - if bin.fileExist(file) then - c.file=file - c.lock = l - c.workingfile=io.open(file,'rb+') - else - c.file=file - c.lock = l - c.workingfile=io.open(file,'w') - io.close(c.workingfile) - c.workingfile=io.open(file,'rb+') - end - c.stream=true - bin.streams[file]={c,1} - return c -end -function bin.newTempFile() - local c=bin.new() - c.file=file - c.lock = false - c.workingfile=io.tmpfile() - c.stream=true - return c -end -function bin.freshStream(file) - bin.new():tofile(file) - return bin.stream(file,false) -end -function bin.newStreamFileObject(file) - local c=bin.new() - c.Type="streamable" - c.t="streamable" - c.file="FILE_OBJECT" - c.lock = false - c.workingfile=file - c.stream=true - return c -end --- Core Methods -function bin:canStreamWrite() - return (self.stream and not(self.lock)) -end -function bin:getSeek() - if self.stream then - return self.workingfile:seek("cur")+1 - else - return self.pos - end -end -function bin:setSeek(n) - if self.stream then - self.workingfile:seek("set",n-1) - else - self.pos=n - end -end -function bin:seek(n) - if self.stream then - if not n then return self.workingfile:seek("cur") end - local cur=self.workingfile:seek("cur") - self.workingfile:seek("set",cur+n) - else - if not n then return self.pos end - if #self.data-(self.pos-1)size then - data = data:sub(1,size) - elseif dsize255 then - nn=nn%256 - elseif nn<0 then - nn=256-math.abs(nn) - end - buf[i]=nn - end - self:setSeek(1) - self:write(buf:getData()) -end -function bin:getData(a,b,fmt) - local data="" - if a or b then - data=self:sub(a,b) - else - if self.stream then - local cur=self.workingfile:seek("cur") - self.workingfile:seek("set",0) - data=self.workingfile:read("*a") - self.workingfile:seek("set",cur) - else - data=self.data - end - end - if fmt=="%x" or fmt=="hex" then - return bin.toHex(data):lower() - elseif fmt=="%X" or fmt=="HEX" then - return bin.toHex(data) - elseif fmt=="%b" or fmt=="b64" then - return bin.toB64(data) - elseif fmt then - return bin.new(data):getBlock(fmt,#data) - end - return data -end -function bin:getSize(fmt) - local len=0 - if self.stream then - local cur=self.workingfile:seek("cur") - len=self.workingfile:seek("end") - self.workingfile:seek("set",cur) - else - len=#self.data - end - if fmt=="%b" then - return bin.toB64() - elseif fmt then - return string.format(fmt, len) - else - return len - end -end -function bin:tackE(data,size,h) - local data=bin.normalizeData(data) - local cur=self:getSize() - self:setSeek(self:getSize()+1) - self:write(data,size) - if h then - self:setSeek(cur+1) - end -end -function bin:tonumber(a,b) - local temp={} - if a then - temp.data=self:sub(a,b) - else - temp=self - end - local l,r=0,0 - local g=#temp.data - for i=1,g do - r=r+(256^(g-i))*string.byte(string.sub(temp.data,i,i)) - l=l+(256^(i-1))*string.byte(string.sub(temp.data,i,i)) - end - return r,l -end -function bin.endianflop(data) - return string.reverse(data) -end -function bin:tofile(name) - if self.stream then return end - if not name then error("Must include a filename to save as!") end - file = io.open(name, "wb") - file:write(self.data) - file:close() -end -function bin:close() - if self.stream then - if bin.streams[self.file][2]==1 then - bin.streams[self.file]=nil - self.workingfile:close() - else - bin.streams[self.file][2]=bin.streams[self.file][2]-1 - self.workingfile=io.tmpfile() - self.workingfile:close() - end - end -end -function bin:getBlock(t,n) - local data="" - if not n then - if bin.registerBlocks[t] then - return bin.registerBlocks[t][1](nil,self) - else - error("Unknown format! Cannot read from file: "..tostring(t)) - end - else - if t=="n" or t=="%e" or t=="%E" then - data=self:read(n) - local numB=bin.defualtBit.new(data) - local numL=bin.defualtBit.new(string.reverse(data)) - local little=numL:tonumber(0) - local big=numB:tonumber(0) - if t=="%E" then - return big - elseif t=="%X" then - return bin.toHex(data):upper() - elseif t=="%x" then - return bin.toHex(data):lower() - elseif t=="%b" then - return bin.toB64(data) - elseif t=="%e" then - return little - end - return big,little - elseif t=="s" then - return self:read(n) - elseif bin.registerBlocks[t] then - return bin.registerBlocks[t][1](n,self) - else - error("Unknown format! Cannot read from file: "..tostring(t)) - end - end -end -function bin:addBlock(d,fit,fmt) - if not fmt then fmt=type(d):sub(1,1) end - if bin.registerBlocks[fmt] then - self:tackE(bin.registerBlocks[fmt][2](d,fit,fmt,self,bin.registerBlocks[fmt][2])) - elseif type(d)=="number" then - local data=bin.defualtBit.numToBytes(d,fit or 4,fmt,function() - error("Overflow! Space allotted for number is smaller than the number takes up. Increase the fit!") - end) - self:tackE(data) - elseif type(d)=="string" then - local data=d:sub(1,fit or -1) - if #data<(fit or #data) then - data=data..string.rep("\0",fit-#data) - end - self:tackE(data) - end -end -bin.registerBlocks={} -function bin.registerBlock(t,funcG,funcA) - bin.registerBlocks[t]={funcG,funcA} -end -function bin.newDataBuffer(size,fill) -- fills with \0 or nul or with what you enter - local c={} - local fill=fill or "\0" - c.data={self=c} - c.Type="buffer" - c.size=size or 0 -- 0 means an infinite buffer, sometimes useful - for i=1,c.size do - c.data[i]=fill - end - local mt={ - __index=function(t,k) - if type(k)=="number" then - local data=t.data[k] - if data then - return string.byte(data) - else - error("Index out of range!") - end - elseif type(k)=="string" then - local num=tonumber(k) - if num then - local data=t.data[num] - if data then - return data - else - error("Index out of range!") - end - else - error("Only number-strings and numbers can be indexed!") - end - else - error("Only number-strings and numbers can be indexed!") - end - end, - __newindex=function(t,k,v) - if type(k)~="number" then error("Can only set a buffers data with a numeric index!") end - local data="" - if type(v)=="string" then - data=v - elseif type(v)=="number" then - data=string.char(v) - else - -- try to normalize the data of type v - data=bin.normalizeData(v) - end - t:fillBuffer(k,data) - end, - __tostring=function(t) - return t:getData() - end, - } - function c:fillBuffer(a,data) - local len=#data - if len==1 then - self.data[a]=data - else - local i=a-1 - for d in data:gmatch(".") do - i=i+1 - if i>c.size then - return #data-i+a - end - self.data[i]=d - end - return #data-i+(a-1) - end - end - function c:getData(a,b,fmt) -- LATER - local dat=bin.new(table.concat(self.data,"",a,b)) - local n=dat:getSize() - return dat:getBlock(fmt or "s",n) - end - function c:getSize() - return #self:getData() - end - setmetatable(c,mt) - return c -end -function bin:newDataBufferFromStream(pos,size,fill) -- fills with \0 or nul or with what you enter IF the nothing exists inside the bin file. - local s=self:getSize() - if not self.stream then error("Can only created a streamed buffer on a streamable file!") end - if s==0 then - self:write(string.rep("\0",pos+size)) - end - self:setSeek(1) - local c=bin.newDataBuffer(size,fill) - rawset(c,"pos",pos) - rawset(c,"size",size) - rawset(c,"fill",fill) - rawset(c,"bin",self) - rawset(c,"sync",function(self) - local cur=self.bin:getSeek() - self.bin:setSeek(self.pos) - self.bin:write(self:getData(),size) - self.bin:setSeek(cur) - end) - c:fillBuffer(1,self:sub(pos,pos+size)) - function c:fillBuffer(a,data) - local len=#data - if len==1 then - self.data[a]=data - self:sync() - else - local i=a-1 - for d in data:gmatch(".") do - i=i+1 - if i>c.size then - self:sync() - return #data-i+a - end - self.data[i]=d - end - self:sync() - return #data-i+(a-1) - end - end - return c -end -function bin:toDataBuffer() - local s=self:getSize() - -- if self:canStreamWrite() then - -- return self:newDataBufferFromStream(0,s) - -- end - local buf=bin.newDataBuffer(s) - local data=self:read(512) - local i=1 - while data~=nil do - buf[i]=data - data=self:read(512) - i=i+512 - end - return buf -end -function bin:getMD5Hash() - self:setSeek(1) - local len=self:getSize() - local md5=bin.md5.new() - local SIZE=2048 - if len>SIZE then - local dat=self:read(SIZE) - while dat~=nil do - md5:update(dat) - dat=self:read(SIZE) - end - return bin.md5.tohex(md5:finish()):upper() - else - return bin.md5.sumhexa(self:getData()):upper() - end -end -function bin:getHash() - if self:getSize()==0 then - return "NaN" - end - n=32 - local rand = randomGen:newND(1,self:getSize(),self:getSize()) - local h,g={},0 - for i=1,n do - g=rand:nextInt() - table.insert(h,bin.toHex(self:sub(g,g))) - end - return table.concat(h,'') -end -function bin:flipbits() - if self:canStreamWrite() then - self:setSeek(1) - for i=1,self:getSize() do - self:write(string.char(255-string.byte(self:sub(i,i)))) - end - else - local temp={} - for i=1,#self.data do - table.insert(temp,string.char(255-string.byte(string.sub(self.data,i,i)))) - end - self.data=table.concat(temp,'') - end -end -function bin:encrypt() - self:flipbits() -end -function bin:decrypt() - self:flipbits() -end --- Use with small files! -function bin:gsub(...) - local data=self:getData() - local pos=self:getSeek() - self:setSeek(1) - self:write((data:gsub(...)) or data) - self:setSeek(loc) -end -function bin:gmatch(pat) - return self:getData():gmatch(pat) -end -function bin:match(pat) - return self:getData():match(pat) -end -function bin:trim() - local data=self:getData() - local pos=self:getSeek() - self:setSeek(1) - self:write(data:match'^()%s*$' and '' or data:match'^%s*(.*%S)') - self:setSeek(loc) -end -function bin:lines() - local t = {} - local function helper(line) table.insert(t, line) return '' end - helper((self:getData():gsub('(.-)\r?\n', helper))) - return t -end -function bin._lines(str) - local t = {} - local function helper(line) table.insert(t, line) return '' end - helper((str:gsub('(.-)\r?\n', helper))) - return t -end -function bin:wipe() - if self:canStreamWrite() then - self:close() - local c=bin.freshStream(self.file) - self.workingfile=c.workingfile - else - self.data="" - end - self:setSeek(1) -end -function bin:fullTrim(empty) - local t=self:lines() - for i=#t,1,-1 do - t[i]=bin._trim(t[i]) - if empty then - if t[i]=="" then - table.remove(t,i) - end - end - end - self:wipe() - self:write(table.concat(t,"\n")) -end -require("bin.support.extraBlocks") -- registered blocks that you can use -if love then - function bin.load(file,s,r) - content, size = love.filesystem.read(file) - local temp=bin.new(content) - temp.filepath=file - return temp - end - function bin:tofile(filename) - if not(filename) or self.Stream then return nil end - love.filesystem.write(filename,self.data) - end - function bin.stream(file) - return bin.newStreamFileObject(love.filesystem.newFile(file)) - end - function bin:getSize(fmt) - local len=0 - if self.stream then - local len=self.workingfile:getSize() - else - len=#self.data - end - if fmt=="%b" then - return bin.toB64() - elseif fmt then - return string.format(fmt, len) - else - return len - end - end - function bin:getSeek() - if self.stream then - return self.workingfile:tell()+1 - else - return self.pos - end - end - function bin:setSeek(n) - if self.stream then - self.workingfile:seek(n-1) - else - self.pos=n - end - end - function bin:seek(n) - if self.stream then - self.workingfile:seek(n) - else - if not n then return self.pos end - if #self.data-(self.pos-1) 0 then - for i = bnum.len - 2 , 0 , -1 do - for j = 0 , RADIX_LEN - string.len( bnum[i] ) - 1 do - temp = temp .. '0' ; - end - temp = temp .. bnum[i] ; - end - if bnum[bnum.len - 1]==nil then - return "nil" - end - temp = bnum[bnum.len - 1] .. temp ; - if bnum.signal == '-' then - temp = bnum.signal .. temp ; - end - return temp ; - else - return "" ; - end -end - -function BigNum.mt.pow( num1 , num2 ) - local bnum1 = BigNum.new( num1 ) ; - local bnum2 = BigNum.new( num2 ) ; - return BigNum.pow( bnum1 , bnum2 ) ; -end - -function BigNum.mt.eq( num1 , num2 ) - local bnum1 = BigNum.new( num1 ) ; - local bnum2 = BigNum.new( num2 ) ; - return BigNum.eq( bnum1 , bnum2 ) ; -end - -function BigNum.mt.lt( num1 , num2 ) - local bnum1 = BigNum.new( num1 ) ; - local bnum2 = BigNum.new( num2 ) ; - return BigNum.lt( bnum1 , bnum2 ) ; -end - -function BigNum.mt.le( num1 , num2 ) - local bnum1 = BigNum.new( num1 ) ; - local bnum2 = BigNum.new( num2 ) ; - return BigNum.le( bnum1 , bnum2 ) ; -end - -function BigNum.mt.unm( num ) - local ret = BigNum.new( num ) - if ret.signal == '+' then - ret.signal = '-' - else - ret.signal = '+' - end - return ret -end - -BigNum.mt.__metatable = "hidden" -BigNum.mt.__tostring = BigNum.mt.tostring ; -BigNum.mt.__add = BigNum.mt.add ; -BigNum.mt.__sub = BigNum.mt.sub ; -BigNum.mt.__mul = BigNum.mt.mul ; -BigNum.mt.__div = BigNum.mt.div ; -BigNum.mt.__pow = BigNum.mt.pow ; -BigNum.mt.__unm = BigNum.mt.unm ; -BigNum.mt.__mod = BigNum.mt.mod ; -BigNum.mt.__eq = BigNum.mt.eq ; -BigNum.mt.__le = BigNum.mt.le ; -BigNum.mt.__lt = BigNum.mt.lt ; -setmetatable( BigNum.mt, { __index = "inexistent field", __newindex = "not available", __metatable="hidden" } ) ; -function BigNum.add( bnum1 , bnum2 , bnum3 ) - local maxlen = 0 ; - local i = 0 ; - local carry = 0 ; - local signal = '+' ; - local old_len = 0 ; - --Handle the signals - if bnum1 == nil or bnum2 == nil or bnum3 == nil then - error("Function BigNum.add: parameter nil") ; - elseif bnum1.signal == '-' and bnum2.signal == '+' then - bnum1.signal = '+' ; - BigNum.sub( bnum2 , bnum1 , bnum3 ) ; - - if not rawequal(bnum1, bnum3) then - bnum1.signal = '-' ; - end - return 0 ; - elseif bnum1.signal == '+' and bnum2.signal == '-' then - bnum2.signal = '+' ; - BigNum.sub( bnum1 , bnum2 , bnum3 ) ; - if not rawequal(bnum2, bnum3) then - bnum2.signal = '-' ; - end - return 0 ; - elseif bnum1.signal == '-' and bnum2.signal == '-' then - signal = '-' ; - end - -- - old_len = bnum3.len ; - if bnum1.len > bnum2.len then - maxlen = bnum1.len ; - else - maxlen = bnum2.len ; - bnum1 , bnum2 = bnum2 , bnum1 ; - end - --School grade sum - for i = 0 , maxlen - 1 do - if bnum2[i] ~= nil then - bnum3[i] = bnum1[i] + bnum2[i] + carry ; - else - bnum3[i] = bnum1[i] + carry ; - end - if bnum3[i] >= RADIX then - bnum3[i] = bnum3[i] - RADIX ; - carry = 1 ; - else - carry = 0 ; - end - end - --Update the answer's size - if carry == 1 then - bnum3[maxlen] = 1 ; - end - bnum3.len = maxlen + carry ; - bnum3.signal = signal ; - for i = bnum3.len, old_len do - bnum3[i] = nil ; - end - return 0 ; -end - -function BigNum.sub( bnum1 , bnum2 , bnum3 ) - local maxlen = 0 ; - local i = 0 ; - local carry = 0 ; - local old_len = 0 ; - if bnum1 == nil or bnum2 == nil or bnum3 == nil then - error("Function BigNum.sub: parameter nil") ; - elseif bnum1.signal == '-' and bnum2.signal == '+' then - bnum1.signal = '+' ; - BigNum.add( bnum1 , bnum2 , bnum3 ) ; - bnum3.signal = '-' ; - if not rawequal(bnum1, bnum3) then - bnum1.signal = '-' ; - end - return 0 ; - elseif bnum1.signal == '-' and bnum2.signal == '-' then - bnum1.signal = '+' ; - bnum2.signal = '+' ; - BigNum.sub( bnum2, bnum1 , bnum3 ) ; - if not rawequal(bnum1, bnum3) then - bnum1.signal = '-' ; - end - if not rawequal(bnum2, bnum3) then - bnum2.signal = '-' ; - end - return 0 ; - elseif bnum1.signal == '+' and bnum2.signal == '-' then - bnum2.signal = '+' ; - BigNum.add( bnum1 , bnum2 , bnum3 ) ; - if not rawequal(bnum2, bnum3) then - bnum2.signal = '-' ; - end - return 0 ; - end - --Tests if bnum2 > bnum1 - if BigNum.compareAbs( bnum1 , bnum2 ) == 2 then - BigNum.sub( bnum2 , bnum1 , bnum3 ) ; - bnum3.signal = '-' ; - return 0 ; - else - maxlen = bnum1.len ; - end - old_len = bnum3.len ; - bnum3.len = 0 ; - --School grade subtraction - for i = 0 , maxlen - 1 do - if bnum2[i] ~= nil then - bnum3[i] = bnum1[i] - bnum2[i] - carry ; - else - bnum3[i] = bnum1[i] - carry ; - end - if bnum3[i] < 0 then - bnum3[i] = RADIX + bnum3[i] ; - carry = 1 ; - else - carry = 0 ; - end - - if bnum3[i] ~= 0 then - bnum3.len = i + 1 ; - end - end - bnum3.signal = '+' ; - --Check if answer's size if zero - if bnum3.len == 0 then - bnum3.len = 1 ; - bnum3[0] = 0 ; - end - if carry == 1 then - error( "Error in function sub" ) ; - end - for i = bnum3.len , max( old_len , maxlen - 1 ) do - bnum3[i] = nil ; - end - return 0 ; -end - -function BigNum.mul( bnum1 , bnum2 , bnum3 ) - local i = 0 ; j = 0 ; - local temp = BigNum.new( ) ; - local temp2 = 0 ; - local carry = 0 ; - local oldLen = bnum3.len ; - if bnum1 == nil or bnum2 == nil or bnum3 == nil then - error("Function BigNum.mul: parameter nil") ; - --Handle the signals - elseif bnum1.signal ~= bnum2.signal then - BigNum.mul( bnum1 , -bnum2 , bnum3 ) ; - bnum3.signal = '-' ; - return 0 ; - end - bnum3.len = ( bnum1.len ) + ( bnum2.len ) ; - --Fill with zeros - for i = 1 , bnum3.len do - bnum3[i - 1] = 0 ; - end - --Places nil where passes through this - for i = bnum3.len , oldLen do - bnum3[i] = nil ; - end - --School grade multiplication - for i = 0 , bnum1.len - 1 do - for j = 0 , bnum2.len - 1 do - carry = ( bnum1[i] * bnum2[j] + carry ) ; - carry = carry + bnum3[i + j] ; - bnum3[i + j] = ( carry % RADIX ) ; - temp2 = bnum3[i + j] ; - carry = math.floor ( carry / RADIX ) ; - end - if carry ~= 0 then - bnum3[i + bnum2.len] = carry ; - end - carry = 0 ; - end - - --Update the answer's size - for i = bnum3.len - 1 , 1 , -1 do - if bnum3[i] ~= nil and bnum3[i] ~= 0 then - break ; - else - bnum3[i] = nil ; - end - bnum3.len = bnum3.len - 1 ; - end - return 0 ; -end - -function BigNum.div( bnum1 , bnum2 , bnum3 , bnum4 ) - local temp = BigNum.new() ; - local temp2 = BigNum.new() ; - local one = BigNum.new( "1" ) ; - local zero = BigNum.new( "0" ) ; - --Check division by zero - if BigNum.compareAbs( bnum2 , zero ) == 0 then - error( "Function BigNum.div: Division by zero" ) ; - end - --Handle the signals - if bnum1 == nil or bnum2 == nil or bnum3 == nil or bnum4 == nil then - error( "Function BigNum.div: parameter nil" ) ; - elseif bnum1.signal == "+" and bnum2.signal == "-" then - bnum2.signal = "+" ; - BigNum.div( bnum1 , bnum2 , bnum3 , bnum4 ) ; - bnum2.signal = "-" ; - bnum3.signal = "-" ; - return 0 ; - elseif bnum1.signal == "-" and bnum2.signal == "+" then - bnum1.signal = "+" ; - BigNum.div( bnum1 , bnum2 , bnum3 , bnum4 ) ; - bnum1.signal = "-" ; - if bnum4 < zero then --Check if remainder is negative - BigNum.add( bnum3 , one , bnum3 ) ; - BigNum.sub( bnum2 , bnum4 , bnum4 ) ; - end - bnum3.signal = "-" ; - return 0 ; - elseif bnum1.signal == "-" and bnum2.signal == "-" then - bnum1.signal = "+" ; - bnum2.signal = "+" ; - BigNum.div( bnum1 , bnum2 , bnum3 , bnum4 ) ; - bnum1.signal = "-" ; - if bnum4 < zero then --Check if remainder is negative - BigNum.add( bnum3 , one , bnum3 ) ; - BigNum.sub( bnum2 , bnum4 , bnum4 ) ; - end - bnum2.signal = "-" ; - return 0 ; - end - temp.len = bnum1.len - bnum2.len - 1 ; - - --Reset variables - BigNum.change( bnum3 , "0" ) ; - BigNum.change( bnum4 , "0" ) ; - - BigNum.copy( bnum1 , bnum4 ) ; - - --Check if can continue dividing - while( BigNum.compareAbs( bnum4 , bnum2 ) ~= 2 ) do - if bnum4[bnum4.len - 1] >= bnum2[bnum2.len - 1] then - BigNum.put( temp , math.floor( bnum4[bnum4.len - 1] / bnum2[bnum2.len - 1] ) , bnum4.len - bnum2.len ) ; - temp.len = bnum4.len - bnum2.len + 1 ; - else - BigNum.put( temp , math.floor( ( bnum4[bnum4.len - 1] * RADIX + bnum4[bnum4.len - 2] ) / bnum2[bnum2.len -1] ) , bnum4.len - bnum2.len - 1 ) ; - temp.len = bnum4.len - bnum2.len ; - end - - if bnum4.signal ~= bnum2.signal then - temp.signal = "-"; - else - temp.signal = "+"; - end - BigNum.add( temp , bnum3 , bnum3 ) ; - temp = temp * bnum2 ; - BigNum.sub( bnum4 , temp , bnum4 ) ; - end - - --Update if the remainder is negative - if bnum4.signal == '-' then - decr( bnum3 ) ; - BigNum.add( bnum2 , bnum4 , bnum4 ) ; - end - return 0 ; -end - -function BigNum.pow( bnum1 , bnum2 ) - local n = BigNum.new( bnum2 ) ; - local y = BigNum.new( 1 ) ; - local z = BigNum.new( bnum1 ) ; - local zero = BigNum.new( "0" ) ; - if bnum2 < zero then - error( "Function BigNum.exp: domain error" ) ; - elseif bnum2 == zero then - return y ; - end - while 1 do - if ( n[0] % 2 ) == 0 then - n = n / 2 ; - else - n = n / 2 ; - y = z * y ; - if n == zero then - return y ; - end - end - z = z * z ; - end -end --- Portugus : -BigNum.exp = BigNum.pow - -function BigNum.gcd( bnum1 , bnum2 ) - local a = {} ; - local b = {} ; - local c = {} ; - local d = {} ; - local zero = {} ; - zero = BigNum.new( "0" ) ; - if bnum1 == zero or bnum2 == zero then - return BigNum.new( "1" ) ; - end - a = BigNum.new( bnum1 ) ; - b = BigNum.new( bnum2 ) ; - a.signal = '+' ; - b.signal = '+' ; - c = BigNum.new() ; - d = BigNum.new() ; - while b > zero do - BigNum.div( a , b , c , d ) ; - a , b , d = b , d , a ; - end - return a ; -end --- Portugus: -BigNum.mmc = BigNum.gcd - -function BigNum.eq( bnum1 , bnum2 ) - if BigNum.compare( bnum1 , bnum2 ) == 0 then - return true ; - else - return false ; - end -end - -function BigNum.lt( bnum1 , bnum2 ) - if BigNum.compare( bnum1 , bnum2 ) == 2 then - return true ; - else - return false ; - end -end - -function BigNum.le( bnum1 , bnum2 ) - local temp = -1 ; - temp = BigNum.compare( bnum1 , bnum2 ) - if temp == 0 or temp == 2 then - return true ; - else - return false ; - end -end - -function BigNum.compareAbs( bnum1 , bnum2 ) - if bnum1 == nil or bnum2 == nil then - error("Function compare: parameter nil") ; - elseif bnum1.len > bnum2.len then - return 1 ; - elseif bnum1.len < bnum2.len then - return 2 ; - else - local i ; - for i = bnum1.len - 1 , 0 , -1 do - if bnum1[i] > bnum2[i] then - return 1 ; - elseif bnum1[i] < bnum2[i] then - return 2 ; - end - end - end - return 0 ; -end - -function BigNum.compare( bnum1 , bnum2 ) - local signal = 0 ; - - if bnum1 == nil or bnum2 == nil then - error("Funtion BigNum.compare: parameter nil") ; - elseif bnum1.signal == '+' and bnum2.signal == '-' then - return 1 ; - elseif bnum1.signal == '-' and bnum2.signal == '+' then - return 2 ; - elseif bnum1.signal == '-' and bnum2.signal == '-' then - signal = 1 ; - end - if bnum1.len > bnum2.len then - return 1 + signal ; - elseif bnum1.len < bnum2.len then - return 2 - signal ; - else - local i ; - for i = bnum1.len - 1 , 0 , -1 do - if bnum1[i] > bnum2[i] then - return 1 + signal ; - elseif bnum1[i] < bnum2[i] then - return 2 - signal ; - end - end - end - return 0 ; -end - -function BigNum.copy( bnum1 , bnum2 ) - if bnum1 ~= nil and bnum2 ~= nil then - local i ; - for i = 0 , bnum1.len - 1 do - bnum2[i] = bnum1[i] ; - end - bnum2.len = bnum1.len ; - else - error("Function BigNum.copy: parameter nil") ; - end -end - -function BigNum.change( bnum1 , num ) - local j = 0 ; - local len = 0 ; - local num = num ; - local l ; - local oldLen = 0 ; - if bnum1 == nil then - error( "BigNum.change: parameter nil" ) ; - elseif type( bnum1 ) ~= "table" then - error( "BigNum.change: parameter error, type unexpected" ) ; - elseif num == nil then - bnum1.len = 1 ; - bnum1[0] = 0 ; - bnum1.signal = "+"; - elseif type( num ) == "table" and num.len ~= nil then --check if num is a big number - --copy given table to the new one - for i = 0 , num.len do - bnum1[i] = num[i] ; - end - if num.signal ~= '-' and num.signal ~= '+' then - bnum1.signal = '+' ; - else - bnum1.signal = num.signal ; - end - oldLen = bnum1.len ; - bnum1.len = num.len ; - elseif type( num ) == "string" or type( num ) == "number" then - if string.sub( num , 1 , 1 ) == '+' or string.sub( num , 1 , 1 ) == '-' then - bnum1.signal = string.sub( num , 1 , 1 ) ; - num = string.sub(num, 2) ; - else - bnum1.signal = '+' ; - end - num = string.gsub( num , " " , "" ) ; - local sf = string.find( num , "e" ) ; - --Handles if the number is in exp notation - if sf ~= nil then - num = string.gsub( num , "%." , "" ) ; - local e = string.sub( num , sf + 1 ) ; - e = tonumber(e) ; - if e ~= nil and e > 0 then - e = tonumber(e) ; - else - error( "Function BigNum.change: string is not a valid number" ) ; - end - num = string.sub( num , 1 , sf - 2 ) ; - for i = string.len( num ) , e do - num = num .. "0" ; - end - else - sf = string.find( num , "%." ) ; - if sf ~= nil then - num = string.sub( num , 1 , sf - 1 ) ; - end - end - - l = string.len( num ) ; - oldLen = bnum1.len ; - if (l > RADIX_LEN) then - local mod = l-( math.floor( l / RADIX_LEN ) * RADIX_LEN ) ; - for i = 1 , l-mod, RADIX_LEN do - bnum1[j] = tonumber( string.sub( num, -( i + RADIX_LEN - 1 ) , -i ) ); - --Check if string dosn't represents a number - if bnum1[j] == nil then - error( "Function BigNum.change: string is not a valid number" ) ; - bnum1.len = 0 ; - return 1 ; - end - j = j + 1 ; - len = len + 1 ; - end - if (mod ~= 0) then - bnum1[j] = tonumber( string.sub( num , 1 , mod ) ) ; - bnum1.len = len + 1 ; - else - bnum1.len = len ; - end - --Eliminate trailing zeros - for i = bnum1.len - 1 , 1 , -1 do - if bnum1[i] == 0 then - bnum1[i] = nil ; - bnum1.len = bnum1.len - 1 ; - else - break ; - end - end - - else - -- string.len(num) <= RADIX_LEN - bnum1[j] = tonumber( num ) ; - bnum1.len = 1 ; - end - else - error( "Function BigNum.change: parameter error, type unexpected" ) ; - end - - --eliminates the deprecated higher order 'algarisms' - if oldLen ~= nil then - for i = bnum1.len , oldLen do - bnum1[i] = nil ; - end - end - - return 0 ; -end - -function BigNum.put( bnum , int , pos ) - if bnum == nil then - error("Function BigNum.put: parameter nil") ; - end - local i = 0 ; - for i = 0 , pos - 1 do - bnum[i] = 0 ; - end - bnum[pos] = int ; - for i = pos + 1 , bnum.len do - bnum[i] = nil ; - end - bnum.len = pos ; - return 0 ; -end - ---printraw{{{2 -function printraw( bnum ) - local i = 0 ; - if bnum == nil then - error( "Function printraw: parameter nil" ) ; - end - while 1 == 1 do - if bnum[i] == nil then - io.write( ' len '..bnum.len ) ; - if i ~= bnum.len then - io.write( ' ERRO!!!!!!!!' ) ; - end - io.write( "\n" ) ; - return 0 ; - end - io.write( 'r'..bnum[i] ) ; - i = i + 1 ; - end -end ---max{{{2 -function max( int1 , int2 ) - if int1 > int2 then - return int1 ; - else - return int2 ; - end -end - ---decr{{{2 -function decr( bnum1 ) - local temp = {} ; - temp = BigNum.new( "1" ) ; - BigNum.sub( bnum1 , temp , bnum1 ) ; - return 0 ; -end diff --git a/examples/love2d Threading Example/bin/numbers/BigRat.lua b/examples/love2d Threading Example/bin/numbers/BigRat.lua deleted file mode 100644 index 40e9777..0000000 --- a/examples/love2d Threading Example/bin/numbers/BigRat.lua +++ /dev/null @@ -1,227 +0,0 @@ -require( "bin.numbers.BigNum" ) ; - -BigRat = {} ; -BigRat.mt = {} ; -function BigRat.new( num1 , num2 ) --{{{2 - local bigrat = {} ; - local f ; - setmetatable(bigrat, BigRat.mt) ; - if type( num1 ) == "table" then - if num1.num ~= nil and num1.den ~= nil then - bigrat.num = BigNum.new( num1.num ) ; - bigrat.den = BigNum.new( num1.den ) ; - else - bigrat.num = BigNum.new( num1 ) ; - bigrat.den = BigNum.new( "1" ) ; - end - elseif num1 ~= nil then - if num2 == nil then - bigrat.den = BigNum.new( "1" ) ; - else - bigrat.den = BigNum.new( num2 ) ; - end - bigrat.num = BigNum.new( num1 ) ; - else - bigrat.den = BigNum.new( ) ; - bigrat.num = BigNum.new( ) ; - end - - --Update the signals - if bigrat.den.signal == "-" then - if bigrat.num.signal == "-" then - bigrat.num.signal = "+" ; - else - bigrat.num.signal = "-" ; - end - bigrat.den.signal = "+" ; - end - - return bigrat ; -end - -function BigRat.mt.sub( num1 , num2 ) - local temp = BigRat.new() ; - local brat1 = BigRat.new( num1 ) ; - local brat2 = BigRat.new( num2 ) ; - BigRat.sub( brat1 , brat2 , temp ) ; - return temp ; -end - -function BigRat.mt.add( num1 , num2 ) - local temp = BigRat.new() ; - local brat1 = BigRat.new( num1 ) ; - local brat2 = BigRat.new( num2 ) ; - BigRat.add( brat1 , brat2 , temp ) ; - return temp ; -end - -function BigRat.mt.mul( num1 , num2 ) - local temp = BigRat.new() ; - local brat1 = BigRat.new( num1 ) ; - local brat2 = BigRat.new( num2 ) ; - BigRat.mul( brat1 , brat2 , temp ) ; - return temp ; -end - -function BigRat.mt.div( num1 , num2 ) - local brat1 = BigRat.new( num1 ) ; - local brat2 = BigRat.new( num2 ) ; - local brat3 = BigRat.new() ; - local brat4 = BigRat.new() ; - BigRat.div( brat1 , brat2 , brat3 , brat4 ) ; - return brat3 , brat4 ; -end - -function BigRat.mt.tostring( brat ) - BigRat.simplify( brat ) ; - return BigNum.mt.tostring( brat.num ) .. " / " .. BigNum.mt.tostring( brat.den ) ; -end - -function BigRat.mt.pow ( num1 , num2 ) - local brat1 = BigRat.new( num1 ) ; - local brat2 = BigRat.new( num2 ) ; - return BigRat.pow( brat1 , brat2 ) -end - -function BigRat.mt.eq ( num1 , num2 ) - return BigRat.eq( num1 , num2 ) -end - -function BigRat.mt.lt ( num1 , num2 ) - return BigRat.lt( num1 , num2 ) -end - -function BigRat.mt.le ( num1 , num2 ) - return BigRat.le( num1 , num2 ) -end - -function BigRat.mt.unm ( num ) - local ret = BigRat.new( num ) - if ret.num.signal == '-' then - ret.num.signal = '+' - else - ret.num.signal = '-' - end - return ret -end - -BigRat.mt.__metatable = "hidden" -BigRat.mt.__tostring = BigRat.mt.tostring -BigRat.mt.__add = BigRat.mt.add -BigRat.mt.__sub = BigRat.mt.sub -BigRat.mt.__mul = BigRat.mt.mul -BigRat.mt.__div = BigRat.mt.div -BigRat.mt.__pow = BigRat.mt.pow -BigRat.mt.__unm = BigRat.mt.unm -BigRat.mt.__eq = BigRat.mt.eq -BigRat.mt.__le = BigRat.mt.le -BigRat.mt.__lt = BigRat.mt.lt -setmetatable( BigRat.mt, { __index = "inexistent field", __newindex = "not available", __metatable="hidden" } ) ; -function BigRat.add( brat1 , brat2 , brat3 ) - brat3.den = brat1.den * brat2.den ; - brat3.num = ( brat1.num * brat2.den ) + ( brat2.num * brat1.den ) ; - return brat3 ; -end -function BigRat.sub( brat1 , brat2 , brat3 ) - brat3.den = brat1.den * brat2.den ; - brat3.num = ( brat1.num * brat2.den ) - ( brat2.num * brat1.den ) ; - return brat3 ; -end - -function BigRat.mul( brat1 , brat2 , brat3 ) - brat3.num = brat1.num * brat2.num ; - brat3.den = brat1.den * brat2.den ; - return 0 ; -end - -function BigRat.div( brat1 , brat2 , brat3 ) - brat3.num = brat1.num * brat2.den ; - brat3.den = brat1.den * brat2.num ; - return brat3 ; -end - -function BigRat.pow( bnum1 , bnum2 ) - if bnum1 == nil or bnum2 == nil then - error( "Function BigRat.pow: parameter nil" ) ; - end - local x = BigRat.new( "8" ) ; - local n = BigRat.new( bnum2.den ) ; - local n2 ; - local y = BigRat.new( ) ; - local i ; - local temp = BigRat.new( ) ; - - BigRat.simplify( bnum2 ) ; - temp.num = BigNum.exp( bnum1.num , bnum2.num ) ; - temp.den = BigNum.exp( bnum1.den , bnum2.num ) ; - n2 = n - 1 ; - - for i = 0 , 4 do - y.num = x.num ^ n2.num ; - y.den = x.den ^ n2.num ; - x = (( temp / y ) + ( n2 * x )) / n ; - end - return x ; -end - -function BigRat.simplify( brat ) - if brat == nil then - error( "Function BigRat.simplify: parameter nil" ) ; - end - local gcd = BigNum.new( ) ; - local temp = BigRat.new( brat ) ; - local devnull = BigNum.new( ) ; - local zero = BigNum.new( "0" ) ; - --Check if numerator is zero - if BigNum.compareAbs( brat.num , zero ) == 0 then - brat.den = BigNum.new( "1" ) ; - return 0 ; - end - gcd = BigNum.gcd( brat.num , brat.den ) ; - BigNum.div( temp.num , gcd , brat.num , devnull ) ; - BigNum.div( temp.den , gcd , brat.den , devnull ) ; - --Update the signal - if brat.num.signal == '-' and brat.den.signal == '-' then - brat.num.signal = '+' ; - brat.den.signal = '+' ; - end - return 0 ; -end - -function BigRat.eq( brat1 , brat2 ) - if BigRat.compare( brat1 , brat2 ) == 0 then - return true ; - else - return false ; - end -end - -function BigRat.lt( brat1 , brat2 ) - if BigRat.compare( brat1 , brat2 ) == 2 then - return true ; - else - return false ; - end -end - -function BigRat.le( brat1 , brat2 ) - local temp = -1 ; - temp = BigRat.compare( brat1 , brat2 ) - if temp == 0 or temp == 2 then - return true ; - else - return false ; - end -end - -function BigRat.compare( bnum1 , bnum2 ) - local temp ; - temp = bnum1 - bnum2 ; - if temp.num[0] == 0 and temp.num.len == 1 then --Check if is zero - return 0 ; - elseif temp.num.signal == "-" then - return 2 ; - else - return 1 ; - end -end diff --git a/examples/love2d Threading Example/bin/numbers/bits.lua b/examples/love2d Threading Example/bin/numbers/bits.lua deleted file mode 100644 index 579f320..0000000 --- a/examples/love2d Threading Example/bin/numbers/bits.lua +++ /dev/null @@ -1,191 +0,0 @@ -local bits={} -bits.data='' -bits.t='bits' -bits.Type='bits' -bits.__index = bits -bits.__tostring=function(self) return self.data end -bits.__len=function(self) return (#self.data)/8 end -local floor,insert = math.floor, table.insert -function bits.newBitBuffer(n) - -- -end -function bits.newConverter(bitsIn,bitsOut) - local c={} - -- -end -function basen(n,b) - if not b or b == 10 then return tostring(n) end - local digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - local t = {} - local sign = "" - if n < 0 then - sign = "-" - n = -n - end - repeat - local d = n % b + 1 - n = n / b - insert(t, 1, digits:sub(d,d)) - until n == 0 - return sign .. table.concat(t,"") -end -bits.ref={} -function bits.newByte(d) - local c={} - if type(d)=="string" then - if #d>1 or #d<1 then - error("A byte must be one character!") - else - c.data=string.byte(d) - end - elseif type(d)=="number" then - if d>255 or d<0 then - error("A byte must be between 0 and 255!") - else - c.data=d - end - else - error("cannot use type "..type(d).." as an argument! Takes only strings or numbers!") - end - c.__index=function(self,k) - if k>=0 and k<9 then - if self.data==0 then - return 0 - elseif self.data==255 then - return 1 - else - return bits.ref[self.data][k] - end - end - end - c.__tostring=function(self) - return bits.ref[tostring(self.data)] - end - setmetatable(c,c) - return c -end -function bits.newByteArray(s) - local c={} - if type(s)~="string" then - error("Must be a string type or bin/buffer type") - elseif type(s)=="table" then - if s.t=="sink" or s.t=="buffer" or s.t=="bin" then - local data=s:getData() - for i=1,#data do - c[#c+1]=bits.newByte(data:sub(i,i)) - end - else - error("Must be a string type or bin/buffer type") - end - else - for i=1,#s do - c[#c+1]=bits.newByte(s:sub(i,i)) - end - end - return c -end -function bits.new(n,binary) - local temp={} - temp.t="bits" - temp.Type="bits" - if type(n)=="string" then - if binary then - temp.data=n:match("[10]+") - else - local t={} - for i=#n,1,-1 do - table.insert(t,bits:conv(string.byte(n,i))) - end - temp.data=table.concat(t) - end - elseif type(n)=="number" or type(n)=="table" then - temp.data=basen(n,2) - end - if #temp.data%8~=0 then - temp.data=string.rep('0',8-#temp.data%8)..temp.data - end - setmetatable(temp, bits) - return temp -end -for i=0,255 do - local d=bits.new(i).data - bits.ref[i]={d:match("(%d)(%d)(%d)(%d)(%d)(%d)(%d)(%d)")} - bits.ref[tostring(i)]=d - bits.ref[d]=i - bits.ref["\255"..string.char(i)]=d -end -function bits.numToBytes(n,fit,func) - local num=string.reverse(bits.new(n):toSbytes()) - local ref={["num"]=num,["fit"]=fit} - if fit then - if fit<#num then - if func then - print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") - func(ref) - else - print("Warning: attempting to store a number that takes up more space than allotted!") - end - return ref.num:sub(1,ref.fit) - elseif fit==#num then - return string.reverse(num) - else - return string.reverse(string.rep("\0",fit-#num)..num) - end - else - return string.reverse(num) - end -end -function bits:conv(n) - local tab={} - while n>=1 do - table.insert(tab,n%2) - n=math.floor(n/2) - end - local str=string.reverse(table.concat(tab)) - if #str%8~=0 or #str==0 then - str=string.rep('0',8-#str%8)..str - end - return str -end -function bits:tonumber(s,e) - if s==0 then - return tonumber(self.data,2) - end - s=s or 1 - return tonumber(string.sub(self.data,(8*(s-1))+1,8*s),2) or error('Bounds!') -end -function bits:isover() - return #self.data>8 -end -function bits:flipbits() - tab={} - for i=1,#self.data do - if string.sub(self.data,i,i)=='1' then - table.insert(tab,'0') - else - table.insert(tab,'1') - end - end - self.data=table.concat(tab) -end -function bits:tobytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return bin.new(table.concat(tab)) -end -function bits:toSbytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return table.concat(tab) -end -function bits:getBin() - return self.data -end -function bits:getbytes() - return #self.data/8 -end -return bits diff --git a/examples/love2d Threading Example/bin/numbers/infinabits.lua b/examples/love2d Threading Example/bin/numbers/infinabits.lua deleted file mode 100644 index 69c45ff..0000000 --- a/examples/love2d Threading Example/bin/numbers/infinabits.lua +++ /dev/null @@ -1,244 +0,0 @@ -local binNum=require("bin.numbers.BigNum") -local infinabits={} -infinabits.data='' -infinabits.t='infinabits' -infinabits.Type='infinabits' -infinabits.__index = infinabits -infinabits.__tostring=function(self) return self.data end -infinabits.__len=function(self) return (#self.data)/8 end -local floor,insert = math.floor, table.insert -function basen(n,b) - n=BigNum.new(n) - if not b or b == 10 then return tostring(n) end - local digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - local t = {} - local sign = "" - if n < BigNum.new(0) then - sign = "-" - n = -n - end - repeat - local d = tonumber(tostring(n % b)) + 1 - n = n / b - insert(t, 1, digits:sub(d,d)) - until n == BigNum.new(0) - return sign .. table.concat(t,"") -end -function base2to10(num) - local n=BigNum.new(0) - for i = #num-1,0,-1 do - nn=BigNum.new(num:sub(i+1,i+1))*(BigNum.new(2)^((#num-i)-1)) - n=n+nn - end - return n -end -function infinabits.newBitBuffer(n) - -- WIP -end -function infinabits.newConverter(bitsIn,bitsOut) - local c={} - -- WIP -end -infinabits.ref={} -function infinabits.newByte(d)-- WIP - local c={} - if type(d)=="string" then - if #d>1 or #d<1 then - error("A byte must be one character!") - else - c.data=string.byte(d) - end - elseif type(d)=="number" then - if d>255 or d<0 then - error("A byte must be between 0 and 255!") - else - c.data=d - end - else - error("cannot use type "..type(d).." as an argument! Takes only strings or numbers!") - end - c.__index=function(self,k) - if k>=0 and k<9 then - if self.data==0 then - return 0 - elseif self.data==255 then - return 1 - else - return infinabits.ref[self.data][k] - end - end - end - c.__tostring=function(self) - return infinabits.ref[tostring(self.data)] - end - setmetatable(c,c) - return c -end -function infinabits.newByteArray(s)-- WIP - local c={} - if type(s)~="string" then - error("Must be a string type or bin/buffer type") - elseif type(s)=="table" then - if s.t=="sink" or s.t=="buffer" or s.t=="bin" then - local data=s:getData() - for i=1,#data do - c[#c+1]=infinabits.newByte(data:sub(i,i)) - end - else - error("Must be a string type or bin/buffer type") - end - else - for i=1,#s do - c[#c+1]=infinabits.newByte(s:sub(i,i)) - end - end - return c -end -function infinabits.new(n,binary) - local temp={} - temp.t="infinabits" - temp.Type="infinabits" - if type(n)=="string" then - if binary then - temp.data=n:match("[10]+") - else - local t={} - for i=#n,1,-1 do - table.insert(t,infinabits:conv(string.byte(n,i))) - end - temp.data=table.concat(t) - end - elseif type(n)=="number" or type(n)=="table" then - temp.data=basen(tostring(n),2) - end - if #temp.data%8~=0 then - temp.data=string.rep('0',8-#temp.data%8)..temp.data - end - setmetatable(temp, infinabits) - return temp -end -for i=0,255 do - local d=infinabits.new(i).data - infinabits.ref[i]={d:match("(%d)(%d)(%d)(%d)(%d)(%d)(%d)(%d)")} - infinabits.ref[tostring(i)]=d - infinabits.ref[d]=i - infinabits.ref["\255"..string.char(i)]=d -end -function infinabits.numToBytes(n,fit,func) - local num=string.reverse(infinabits.new(BigNum.new(n)):toSbytes()) - local ref={["num"]=num,["fit"]=fit} - if fit then - if fit<#num then - if func then - print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") - func(ref) - else - print("Warning: attempting to store a number that takes up more space than allotted!") - end - return ref.num:sub(1,ref.fit) - elseif fit==#num then - return string.reverse(num) - else - return string.reverse(string.rep("\0",fit-#num)..num) - end - else - return string.reverse(num) - end -end -function infinabits.numToBytes(n,fit,fmt,func) - if fmt=="%e" then - local num=string.reverse(infinabits.new(BigNum.new(n)):toSbytes()) - local ref={["num"]=num,["fit"]=fit} - if fit then - if fit<#num then - if func then - print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") - func(ref) - else - print("Warning: attempting to store a number that takes up more space than allotted!") - end - return ref.num:sub(1,ref.fit) - elseif fit==#num then - return num - else - return string.rep("\0",fit-#num)..num - end - else - return num - end - - else - local num=string.reverse(infinabits.new(BigNum.new(n)):toSbytes()) - local ref={["num"]=num,["fit"]=fit} - if fit then - if fit<#num then - if func then - print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") - func(ref) - else - print("Warning: attempting to store a number that takes up more space than allotted!") - end - return ref.num:sub(1,ref.fit) - elseif fit==#num then - return string.reverse(num) - else - return string.reverse(string.rep("\0",fit-#num)..num) - end - else - return string.reverse(num) - end - end -end -function infinabits:conv(n) - local tab={} - local one=BigNum.new(1) - local n=BigNum.new(n) - while n>=one do - table.insert(tab,tonumber(tostring(n%2))) - n=n/2 - end - local str=string.reverse(table.concat(tab)) - if #str%8~=0 or #str==0 then - str=string.rep('0',8-#str%8)..str - end - return str -end -function infinabits:tonumber(s) - if s==0 then - return tonumber(self.data,2) - end - s=s or 1 - return tonumber(tostring(base2to10(string.sub(self.data,(8*(s-1))+1,8*s)))) or error('Bounds!') -end -function infinabits:isover() - return #self.data>8 -end -function infinabits:flipbits() - tab={} - local s=self.data - s=s:gsub("1","_") - s=s:gsub("0","1") - s=s:gsub("_","0") - self.data=s -end -function infinabits:tobytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return bin.new(table.concat(tab)) -end -function infinabits:toSbytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return table.concat(tab) -end -function infinabits:getBin() - return self.data -end -function infinabits:getbytes() - return #self.data/8 -end -return infinabits diff --git a/examples/love2d Threading Example/bin/numbers/no_jit_bit.lua b/examples/love2d Threading Example/bin/numbers/no_jit_bit.lua deleted file mode 100644 index 2cfdc1d..0000000 --- a/examples/love2d Threading Example/bin/numbers/no_jit_bit.lua +++ /dev/null @@ -1,333 +0,0 @@ ---[[ -LICENSE - - (c) 2008-2011 David Manura. Licensed under the same terms as Lua (MIT). ---]] - -local M = {_TYPE='module', _NAME='bit.numberlua', _VERSION='0.3.1.20120131'} - -local floor = math.floor - -local MOD = 2^32 -local MODM = MOD-1 - -local function memoize(f) - local mt = {} - local t = setmetatable({}, mt) - function mt:__index(k) - local v = f(k); t[k] = v - return v - end - return t -end - -local function make_bitop_uncached(t, m) - local function bitop(a, b) - local res,p = 0,1 - while a ~= 0 and b ~= 0 do - local am, bm = a%m, b%m - res = res + t[am][bm]*p - a = (a - am) / m - b = (b - bm) / m - p = p*m - end - res = res + (a+b)*p - return res - end - return bitop -end - -local function make_bitop(t) - local op1 = make_bitop_uncached(t,2^1) - local op2 = memoize(function(a) - return memoize(function(b) - return op1(a, b) - end) - end) - return make_bitop_uncached(op2, 2^(t.n or 1)) -end - --- ok? probably not if running on a 32-bit int Lua number type platform -function M.tobit(x) - return x % 2^32 -end - -M.bxor = make_bitop {[0]={[0]=0,[1]=1},[1]={[0]=1,[1]=0}, n=4} -local bxor = M.bxor - -function M.bnot(a) return MODM - a end -local bnot = M.bnot - -function M.band(a,b) return ((a+b) - bxor(a,b))/2 end -local band = M.band - -function M.bor(a,b) return MODM - band(MODM - a, MODM - b) end -local bor = M.bor - -local lshift, rshift -- forward declare - -function M.rshift(a,disp) -- Lua5.2 insipred - if disp < 0 then return lshift(a,-disp) end - return floor(a % 2^32 / 2^disp) -end -rshift = M.rshift - -function M.lshift(a,disp) -- Lua5.2 inspired - if disp < 0 then return rshift(a,-disp) end - return (a * 2^disp) % 2^32 -end -lshift = M.lshift - -function M.tohex(x, n) -- BitOp style - n = n or 8 - local up - if n <= 0 then - if n == 0 then return '' end - up = true - n = - n - end - x = band(x, 16^n-1) - return ('%0'..n..(up and 'X' or 'x')):format(x) -end -local tohex = M.tohex - -function M.extract(n, field, width) -- Lua5.2 inspired - width = width or 1 - return band(rshift(n, field), 2^width-1) -end -local extract = M.extract - -function M.replace(n, v, field, width) -- Lua5.2 inspired - width = width or 1 - local mask1 = 2^width-1 - v = band(v, mask1) -- required by spec? - local mask = bnot(lshift(mask1, field)) - return band(n, mask) + lshift(v, field) -end -local replace = M.replace - -function M.bswap(x) -- BitOp style - local a = band(x, 0xff); x = rshift(x, 8) - local b = band(x, 0xff); x = rshift(x, 8) - local c = band(x, 0xff); x = rshift(x, 8) - local d = band(x, 0xff) - return lshift(lshift(lshift(a, 8) + b, 8) + c, 8) + d -end -local bswap = M.bswap - -function M.rrotate(x, disp) -- Lua5.2 inspired - disp = disp % 32 - local low = band(x, 2^disp-1) - return rshift(x, disp) + lshift(low, 32-disp) -end -local rrotate = M.rrotate - -function M.lrotate(x, disp) -- Lua5.2 inspired - return rrotate(x, -disp) -end -local lrotate = M.lrotate - -M.rol = M.lrotate -- LuaOp inspired -M.ror = M.rrotate -- LuaOp insipred - - -function M.arshift(x, disp) -- Lua5.2 inspired - local z = rshift(x, disp) - if x >= 0x80000000 then z = z + lshift(2^disp-1, 32-disp) end - return z -end -local arshift = M.arshift - -function M.btest(x, y) -- Lua5.2 inspired - return band(x, y) ~= 0 -end - -M.bit32 = {} -- Lua 5.2 'bit32' compatibility - - -local function bit32_bnot(x) - return (-1 - x) % MOD -end -M.bit32.bnot = bit32_bnot - -local function bit32_bxor(a, b, c, ...) - local z - if b then - a = a % MOD - b = b % MOD - z = bxor(a, b) - if c then - z = bit32_bxor(z, c, ...) - end - return z - elseif a then - return a % MOD - else - return 0 - end -end -M.bit32.bxor = bit32_bxor - -local function bit32_band(a, b, c, ...) - local z - if b then - a = a % MOD - b = b % MOD - z = ((a+b) - bxor(a,b)) / 2 - if c then - z = bit32_band(z, c, ...) - end - return z - elseif a then - return a % MOD - else - return MODM - end -end -M.bit32.band = bit32_band - -local function bit32_bor(a, b, c, ...) - local z - if b then - a = a % MOD - b = b % MOD - z = MODM - band(MODM - a, MODM - b) - if c then - z = bit32_bor(z, c, ...) - end - return z - elseif a then - return a % MOD - else - return 0 - end -end -M.bit32.bor = bit32_bor - -function M.bit32.btest(...) - return bit32_band(...) ~= 0 -end - -function M.bit32.lrotate(x, disp) - return lrotate(x % MOD, disp) -end - -function M.bit32.rrotate(x, disp) - return rrotate(x % MOD, disp) -end - -function M.bit32.lshift(x,disp) - if disp > 31 or disp < -31 then return 0 end - return lshift(x % MOD, disp) -end - -function M.bit32.rshift(x,disp) - if disp > 31 or disp < -31 then return 0 end - return rshift(x % MOD, disp) -end - -function M.bit32.arshift(x,disp) - x = x % MOD - if disp >= 0 then - if disp > 31 then - return (x >= 0x80000000) and MODM or 0 - else - local z = rshift(x, disp) - if x >= 0x80000000 then z = z + lshift(2^disp-1, 32-disp) end - return z - end - else - return lshift(x, -disp) - end -end - -function M.bit32.extract(x, field, ...) - local width = ... or 1 - if field < 0 or field > 31 or width < 0 or field+width > 32 then error 'out of range' end - x = x % MOD - return extract(x, field, ...) -end - -function M.bit32.replace(x, v, field, ...) - local width = ... or 1 - if field < 0 or field > 31 or width < 0 or field+width > 32 then error 'out of range' end - x = x % MOD - v = v % MOD - return replace(x, v, field, ...) -end - -M.bit = {} -- LuaBitOp "bit" compatibility - -function M.bit.tobit(x) - x = x % MOD - if x >= 0x80000000 then x = x - MOD end - return x -end -local bit_tobit = M.bit.tobit - -function M.bit.tohex(x, ...) - return tohex(x % MOD, ...) -end - -function M.bit.bnot(x) - return bit_tobit(bnot(x % MOD)) -end - -local function bit_bor(a, b, c, ...) - if c then - return bit_bor(bit_bor(a, b), c, ...) - elseif b then - return bit_tobit(bor(a % MOD, b % MOD)) - else - return bit_tobit(a) - end -end -M.bit.bor = bit_bor - -local function bit_band(a, b, c, ...) - if c then - return bit_band(bit_band(a, b), c, ...) - elseif b then - return bit_tobit(band(a % MOD, b % MOD)) - else - return bit_tobit(a) - end -end -M.bit.band = bit_band - -local function bit_bxor(a, b, c, ...) - if c then - return bit_bxor(bit_bxor(a, b), c, ...) - elseif b then - return bit_tobit(bxor(a % MOD, b % MOD)) - else - return bit_tobit(a) - end -end -M.bit.bxor = bit_bxor - -function M.bit.lshift(x, n) - return bit_tobit(lshift(x % MOD, n % 32)) -end - -function M.bit.rshift(x, n) - return bit_tobit(rshift(x % MOD, n % 32)) -end - -function M.bit.arshift(x, n) - return bit_tobit(arshift(x % MOD, n % 32)) -end - -function M.bit.rol(x, n) - return bit_tobit(lrotate(x % MOD, n % 32)) -end - -function M.bit.ror(x, n) - return bit_tobit(rrotate(x % MOD, n % 32)) -end - -function M.bit.bswap(x) - return bit_tobit(bswap(x % MOD)) -end - -return M diff --git a/examples/love2d Threading Example/bin/numbers/random.lua b/examples/love2d Threading Example/bin/numbers/random.lua deleted file mode 100644 index 091a7f5..0000000 --- a/examples/love2d Threading Example/bin/numbers/random.lua +++ /dev/null @@ -1,232 +0,0 @@ ---[[---------------------------------------- -Random -Not all of this is mine -------------------------------------------]] ---[[------------------------------------ -RandomLua v0.3.1 -Pure Lua Pseudo-Random Numbers Generator -Under the MIT license. -copyright(c) 2011 linux-man ---]]------------------------------------ - -local math_floor = math.floor - -local function normalize(n) - return n % 0x80000000 -end - -local function bit_and(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if (a % 2 == 1) and (b % 2 == 1) then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function bit_or(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if (a % 2 == 1) or (b % 2 == 1) then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function bit_xor(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if a % 2 ~= b % 2 then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function seed() - return normalize(os.time()) -end - ---Mersenne twister -local mersenne_twister = {} -mersenne_twister.__index = mersenne_twister - -function mersenne_twister:randomseed(s) - if not s then s = seed() end - self.mt[0] = normalize(s) - for i = 1, 623 do - self.mt[i] = normalize(0x6c078965 * bit_xor(self.mt[i-1], math_floor(self.mt[i-1] / 0x40000000)) + i) - end -end - -function mersenne_twister:random(a, b) - local y - if self.index == 0 then - for i = 0, 623 do - y = self.mt[(i + 1) % 624] % 0x80000000 - self.mt[i] = bit_xor(self.mt[(i + 397) % 624], math_floor(y / 2)) - if y % 2 ~= 0 then self.mt[i] = bit_xor(self.mt[i], 0x9908b0df) end - end - end - y = self.mt[self.index] - y = bit_xor(y, math_floor(y / 0x800)) - y = bit_xor(y, bit_and(normalize(y * 0x80), 0x9d2c5680)) - y = bit_xor(y, bit_and(normalize(y * 0x8000), 0xefc60000)) - y = bit_xor(y, math_floor(y / 0x40000)) - self.index = (self.index + 1) % 624 - if not a then return y / 0x80000000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) - end - else - return a + (y % (b - a + 1)) - end -end - -local function twister(s) - local temp = {} - setmetatable(temp, mersenne_twister) - temp.mt = {} - temp.index = 0 - temp:randomseed(s) - return temp -end - ---Linear Congruential Generator -local linear_congruential_generator = {} -linear_congruential_generator.__index = linear_congruential_generator - -function linear_congruential_generator:random(a, b) - local y = (self.a * self.x + self.c) % self.m - self.x = y - if not a then return y / 0x10000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) end - else - return a + (y % (b - a + 1)) - end -end - -function linear_congruential_generator:randomseed(s) - if not s then s = seed() end - self.x = normalize(s) -end - -local function lcg(s, r) - local temp = {} - setmetatable(temp, linear_congruential_generator) - temp.a, temp.c, temp.m = 1103515245, 12345, 0x10000 --from Ansi C - if r then - if r == 'nr' then temp.a, temp.c, temp.m = 1664525, 1013904223, 0x10000 --from Numerical Recipes. - elseif r == 'mvc' then temp.a, temp.c, temp.m = 214013, 2531011, 0x10000 end--from MVC - end - temp:randomseed(s) - return temp -end - --- Multiply-with-carry -local multiply_with_carry = {} -multiply_with_carry.__index = multiply_with_carry - -function multiply_with_carry:random(a, b) - local m = self.m - local t = self.a * self.x + self.c - local y = t % m - self.x = y - self.c = math_floor(t / m) - if not a then return y / 0x10000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) end - else - return a + (y % (b - a + 1)) - end -end - -function multiply_with_carry:randomseed(s) - if not s then s = seed() end - self.c = self.ic - self.x = normalize(s) -end - -local function mwc(s, r) - local temp = {} - setmetatable(temp, multiply_with_carry) - temp.a, temp.c, temp.m = 1103515245, 12345, 0x10000 --from Ansi C - if r then - if r == 'nr' then temp.a, temp.c, temp.m = 1664525, 1013904223, 0x10000 --from Numerical Recipes. - elseif r == 'mvc' then temp.a, temp.c, temp.m = 214013, 2531011, 0x10000 end--from MVC - end - temp.ic = temp.c - temp:randomseed(s) - return temp -end --- Little bind for the methods: My code starts -local randomGen={} -randomGen.__index=randomGen -function randomGen:new(s) - local temp={} - setmetatable(temp,randomGen) - temp[1]=twister() - temp[2]=lcg() - temp[3]=mwc() - temp.pos=1 - for i=1,3 do - temp[i]:randomseed(s) - end - return temp -end -function randomGen:randomseed(s) - self.pos=1 - self[1]:randomseed(s) - self[2]:randomseed(s) - self[3]:randomseed(s) -end -function randomGen:randomInt(a,b) - local t=self[self.pos]:random(a,b) - self.pos=self.pos+1 - if self.pos>3 then - self.pos=1 - end - return t -end -function randomGen:newND(a,b,s) - if not(a) or not(b) then error('You must include a range!') end - local temp=randomGen:new(s) - temp.a=a - temp.b=b - temp.range=b-a+1 - temp.dups={no=0} - function temp:nextInt() - local t=self:randomInt(self.a,self.b) - if self.dups[t]==nil then - self.dups[t]=true - self.dups.no=self.dups.no+1 - else - return self:nextInt() - end - if self.dups.no==self.range then - function self:nextInt() - return 1,true - end - return t - else - return t - end - end - function temp:nextIInt() - return function() return self:nextInt() end - end - return temp -end -return randomGen diff --git a/examples/love2d Threading Example/bin/support/extraBlocks.lua b/examples/love2d Threading Example/bin/support/extraBlocks.lua deleted file mode 100644 index 2b8aa3b..0000000 --- a/examples/love2d Threading Example/bin/support/extraBlocks.lua +++ /dev/null @@ -1,146 +0,0 @@ -local __CURRENTVERSION=2 -bin.registerBlock("t",function(SIZE_OR_NIL,ref) - local header=ref:read(3) - if not header:match("(LT.)") then error("Not a valid table struct!") end - if bin.defualtBit.new(header:sub(3,3)):tonumber(1)>__CURRENTVERSION then error("Incompatible Version of LuaTable!") end - local len=ref:getBlock("n",4) -- hehe lets make life easier - local tab={} - local ind - local n=0 - while true do - local _dat=ref:read(2) - if _dat==nil then break end - local it,dt=_dat:match("(.)(.)") - n=n+2 - if it=="N" then -- get the index stuff out of the way first - ind=ref:getBlock("n",4) - n=n+4 - else - indL=ref:getBlock("n",1) - n=n+1+indL - ind=ref:read(indL) - end - if dt=="N" then - tab[ind]=ref:getBlock("d") - n=n+8 - elseif dt=="I" then - tab[ind]=math.huge - ref:getBlock("n",4) - n=n+4 - elseif dt=="i" then - tab[ind]=-math.huge - ref:getBlock("n",4) - n=n+4 - elseif dt=="S" then - local nn=ref:getBlock("n",4) - tab[ind]=ref:read(nn) - n=n+4+nn - elseif dt=="B" then - tab[ind]=({["\255"]=true,["\0"]=false})[ref:read(1)] - n=n+1 - elseif dt=="F" then - local nn=ref:getBlock("n",4) - tab[ind]=loadstring(ref:read(nn)) - n=n+4+nn - elseif dt=="T" then - local cur=ref:getSeek() - local size=ref:getBlock("n",4) - ref:setSeek(cur) - ref:read(4) - if size==7 then - tab[ind]={} - ref:read(7) - n=n+11 - else - local data=bin.new(ref:read(size)) - local dat=data:getBlock("t") - if dat.__RECURSIVE then - tab[ind]=tab - else - tab[ind]=dat - end - n=n+data:getSize()+4 - end - end - if n==len then break end - end - return bin.resolveType(tab) -end,function(d,fit,fmt,self,rec,tabsaw) - -- INGORE FIT WE ARE CREATING A STRUCT!!! - -- fmt will apply to all numbers - local __rem=nil - if not tabsaw then rem=true end - local tabsaw=tabsaw or {} - if rem then - table.insert(tabsaw,d) - end - local bData={} - for i,v in pairs(d) do -- this is for tables, all but userdata is fine. Depending on where you are using lua functions may or may not work - local tp=type(v):sub(1,1):upper() -- uppercase of datatype - if type(i)=="number" then -- Lets handle indexies - if v==math.huge then - tp="I" - v=0 - elseif v==-math.huge then - tp="i" - v=0 - end - table.insert(bData,"N"..tp..bin.defualtBit.numToBytes(i,4)) -- number index? - elseif type(i)=="string" then - if #i>255 then error("A string index cannot be larger than 255 bytes!") end - table.insert(bData,"S"..tp..bin.defualtBit.numToBytes(#i,1)..i) -- string index? - else - error("Only numbers and strings can be a table index!") -- throw error? - end - if type(v)=="number" then - -- How do we handle number data - local temp=bin.new() - temp:addBlock(v,nil,"d") - table.insert(bData,temp.data) - elseif type(v)=="string" then - -- Lets work on strings - table.insert(bData,bin.defualtBit.numToBytes(#v,4)) -- add length of string - table.insert(bData,v) -- add string - elseif type(v)=="boolean" then -- bools are easy :D - table.insert(bData,({[true]="\255",[false]="\0"})[v]) - elseif type(v)=="function" then -- should we allow this? why not... - local dump=string.dump(v) - table.insert(bData,bin.defualtBit.numToBytes(#dump,4)) -- add length of dumped string - table.insert(bData,dump) -- add it - elseif type(v)=="table" then -- tables... - if tabsaw[1]==v then - v={__RECURSIVE=i} - else - tabsaw[i]=v - end - local data=rec(v,nil,"t",self,rec,tabsaw) - table.insert(bData,bin.defualtBit.numToBytes(#data,4)) -- add length of string - table.insert(bData,data) -- add string - end - end - local data=table.concat(bData) - return "LT"..string.char(__CURRENTVERSION)..bin.defualtBit.numToBytes(#data,4)..data -end) -bin.registerBlock("b",function(SIZE_OR_NIL,ref) - return ({["\255"]=true,["\0"]=false})[ref:read(1)] -end,function(d) - return ({[true]="\255",[false]="\0"})[d] -end) -bin.registerBlock("f",function(SIZE_OR_NIL,ref) - local nn=ref:getBlock("n",4) - return loadstring(ref:read(nn)) -end,function(d) - local dump=string.dump(d) - return bin.defualtBit.numToBytes(#dump,4)..dump -end) -bin.registerBlock("d",function(SIZE_OR_NIL,ref) - local w,p=ref:getBlock("n",4),ref:getBlock("n",4) - p=tonumber("0."..tostring(p)) - return w+p -end,function(d,fit,fmt,self,rec,tabsaw) - local w,p = toFraction(d) - local temp=bin.new() - temp:addBlock(w,4) - temp:addBlock(p,4) - return temp.data -end) \ No newline at end of file diff --git a/examples/love2d Threading Example/bin/support/utils.lua b/examples/love2d Threading Example/bin/support/utils.lua deleted file mode 100644 index cc6efa6..0000000 --- a/examples/love2d Threading Example/bin/support/utils.lua +++ /dev/null @@ -1,127 +0,0 @@ -function table.print(tbl, indent) - if not indent then indent = 0 end - for k, v in pairs(tbl) do - formatting = string.rep(" ", indent) .. k .. ": " - if type(v) == "table" then - print(formatting) - table.print(v, indent+1) - elseif type(v) == 'boolean' then - print(formatting .. tostring(v)) - else - print(formatting .. tostring(v)) - end - end -end -function table.flip(t) - local tt={} - for i,v in pairs(t) do - tt[v]=i - end - return tt -end -function toFraction(n) - local w,p=math.modf(n) - if p~=0 then - p=tonumber(tostring(p):sub(3)) - end - return w,p -end -function io.cleanName(name) - name=name:gsub("\\","") - name=name:gsub("/","") - name=name:gsub(":","") - name=name:gsub("*","") - name=name:gsub("%?","") - name=name:gsub("\"","''") - name=name:gsub("<","") - name=name:gsub(">","") - name=name:gsub("|","") - return name -end -function math.numfix(n,x) - local str=tostring(n) - if #strx+w or mxy+h or myx+w or mxy+h or my self.x and x < self.x+self.width and y > self.y and y < self.y+self.height and self:TClickable(x,y) and self:eventable()) - end - end - self.id=-1 -end -multi:newTask(function() -- A bit of post-loading haha - gui.touchpressed=multi:newConnection() - gui.touchreleased=multi:newConnection() - gui.touchmoved=multi:newConnection() - love.touchpressed=Library.convert(love.touchpressed or function() end) - love.touchreleased=Library.convert(love.touchreleased or function() end) - love.touchmoved=Library.convert(love.touchmoved or function() end) - love.touchpressed:inject(function(id, x, y, dx, dy, pressure) gui.touchpressed:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - love.touchreleased:inject(function(id, x, y, dx, dy, pressure) gui.touchreleased:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - love.touchmoved:inject(function(id, x, y, dx, dy, pressure) gui.touchmoved:Fire(id, x, y, dx, dy, pressure) return {id, x, y, dx, dy, pressure} end,1) - _GuiPro.TouchReady=true - _GuiPro.TouchRegister={} - gui.touchpressed:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if #v.tid==0 then - if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - v:addTID(id) - v.touchcount=1 - for i=1,#v.ToFuncP do - v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - elseif not(v:hasTID(id)) then - if (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - v:addTID(id) - v.touchcount=v.touchcount+1 - for i=1,#v.ToFuncP do - v.ToFuncP[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end - end) - gui.touchreleased:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if v:hasTID(id) then - v:removeTID(id) - for i=1,#v.ToFuncR do - v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end) - gui.touchmoved:connect(function(id, x, y, dx, dy, pressure) - for i,v in pairs(_GuiPro.TouchRegister) do - if v:hasTID(id) and (x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable()) then - for i=1,#v.ToFuncM do - v.ToFuncM[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - elseif v:hasTID(id) and not((x > v.x and x < v.x+v.width and y > v.y and y < v.y+v.height and v:TClickable(x,y) and v:eventable())) then - v:removeTID(id) - for i=1,#v.ToFuncR do - v.ToFuncR[i](v,id, x-v.x, y-v.y, dx, dy or 0, pressure or 1) - end - end - end - end) -end) --- now that that is done lets set up some more post loading checks -_GuiPro.int=multi:newProcess() -_GuiPro.int:Start() -_GuiPro.int:setJobSpeed(.001) -_GuiPro.EXACT=0 -_GuiPro.LAX=.01 -_GuiPro.LAZY=.05 --- now lets define the reg function -function gui.Compare(a,b,v,tp) - if tp==">" then - if (a+v>b or a-v>b) then - return true - end - elseif tp=="<" then - if (a+v=" then - if (a+v>=b or a-v>=b) then - return true - end - elseif tp=="==" then -- this one is gonna be tricky - if (a>=b-v and a<=b+v) or (b>=a-v and b<=a+v) then - return true - end - end - return false -end -function gui:regesterTouch() - local obj=self - obj.ToFuncP={} - obj.ToFuncM={} - obj.ToFuncR={} - obj.To2Func={} - obj.ToDTFunc={} - obj.touchRendering =_GuiPro.EXACT -- exact(0), lax(), # - function obj:removeTID(id) - for i=1,#self.tid do - if self.tid[i]==id then - table.remove(self.tid,i) - self.touchcount=self.touchcount-1 - return - end - end - end - function obj:hasTID(id) - for i=1,#self.tid do - if self.tid[i]==id then - return true - end - end - return false - end - obj.txl1=0 - obj.tyl1=0 - obj.txl2=0 - obj.tyl2=0 - obj.LS=0 - obj:OnUpdate(function(self) - if self.touchcount==2 then - local x1,y1=love.touch.getPosition( self.tid[1] ) - local x2,y2=love.touch.getPosition( self.tid[2] ) - local CS=math.sqrt((x2-x1)^2+(y2-y1)^2) - if gui.Compare(CS,self.LS,self.touchRendering,">") then - for i=1,#self.To2Func do - self.To2Func[i](self,CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - elseif gui.Compare(CS,self.LS,self.touchRendering,"<") then - for i=1,#self.To2Func do - self.To2Func[i](self,-CS,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - elseif gui.Compare(CS,self.LS,self.touchRendering,"==") then - for i=1,#self.To2Func do - self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - end - end - -- if self.txl1~=x1 or self.txl2~=x2 or self.tyl1~=y1 or self.tyl2~=y2 then - -- for i=1,#self.To2Func do - -- self.To2Func[i](self,0,x1-self.x,y1-self.y,x2-self.x,y2-self.y) - -- end - -- end - self.LS=CS - self.txl1=x1 - self.txl2=x2 - self.tyl1=y1 - self.tyl2=y2 - end - end) - function obj:OnDoubleTap(func) - table.insert(self.ToDTFunc,func) - end - function obj:On2TouchMoved(func) - table.insert(self.To2Func,func) - end - function obj:addTID(id) - table.insert(self.tid,id) - end - function obj:OnTouchPressed(func) - table.insert(self.ToFuncP,func) -- event for touches - end - function obj:OnTouchReleased(func) -- event for touches - table.insert(self.ToFuncR,func) - end - function obj:OnTouchMoved(func) -- event for touches - table.insert(self.ToFuncM,func) - end - if _GuiPro.TouchReady then -- my sneaky test - print("Registred: "..tostring(obj)) - table.insert(_GuiPro.TouchRegister,obj) - else - print("Attempting to register: "..tostring(obj)) - _GuiPro.int:newJob(function() table.insert(_GuiPro.TouchRegister,obj) end) -- a sneaky way to ensure that your object gets registered eventually, even if you call the method before the touch patch was activated. - end -end - -function UpdateThings(items) - for i=#items,1,-1 do - if items[i]:LClicked() then - for g=1,#items[i].funcs do - items[i].funcs[g]("l",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif items[i]:RClicked() then - for g=1,#items[i].funcs do - items[i].funcs[g]("r",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif items[i]:MClicked() then - for g=1,#items[i].funcs do - items[i].funcs[g]("m",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - end - if not(items[i]:LClicked()) and items[i].LRE then - for g=1,#items[i].funcs2 do - items[i].funcs2[g]("l",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif not(items[i]:RClicked()) and items[i].RRE then - for g=1,#items[i].funcs2 do - items[i].funcs2[g]("r",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif not(items[i]:MClicked()) and items[i].MRE then - for g=1,#items[i].funcs2 do - items[i].funcs2[g]("m",items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - end - if items[i]:Hovering() and items[i].HE==false then - for g=1,#items[i].funcs3 do - items[i].funcs3[g](items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif not(items[i]:Hovering()) and items[i].HE==true then - for g=1,#items[i].funcs4 do - items[i].funcs4[g](items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - elseif items[i]:Hovering() then - for g=1,#items[i].func9 do - items[i].func9[g](items[i],love.mouse.getX()-items[i].x,love.mouse.getY()-items[i].y) - end - end - for g=1,#items[i].funcs5 do - items[i].funcs5[g](items[i]) - end - end -end -function GetAllChildren(Object) - local Stuff = {} - function Seek(Items) - for i=1,#Items do - if Items[i].Visible==true then - table.insert(Stuff,Items[i]) - local NItems = Items[i]:getChildren() - if NItems ~= nil then - Seek(NItems) - end - end - end - end - local Objs = Object:getChildren() - for i=1,#Objs do - if Objs[i].Visible==true then - table.insert(Stuff,Objs[i]) - local Items = Objs[i]:getChildren() - if Items ~= nil then - Seek(Items) - end - end - end - return Stuff -end -function GetAllChildren2(Object) - local Stuff = {} - function Seek(Items) - for i=1,#Items do - table.insert(Stuff,Items[i]) - local NItems = Items[i]:getChildren() - if NItems ~= nil then - Seek(NItems) - end - end - end - local Objs = Object:getChildren() - for i=1,#Objs do - table.insert(Stuff,Objs[i]) - local Items = Objs[i]:getChildren() - if Items ~= nil then - Seek(Items) - end - end - return Stuff -end -function gui:getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="string" then - i=love.graphics.newImage(i) - elseif type(i)=="userdata" then - -- do nothing - elseif string.find(self.Type,"Image",1,true) then - local i,x,y,w,h=self.Image,i,x,y,w - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - -- - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end -function gui:newAnim(file,delay, x, y, w, h, sx ,sy ,sw ,sh) - local x,y,w,h,sx,sy,sw,sh=filter(file, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation",file, x, y, w, h, sx ,sy ,sw ,sh) - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files={} - c.AnimStart={} - c.AnimEnd={} - local _files=alphanumsort(love.filesystem.getDirectoryItems(file)) - for i=1,#_files do - if string.sub(_files[i],-1,-1)~="b" then - table.insert(c.files,love.graphics.newImage(file.."/".._files[i])) - end - end - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end -function gui:newAnimFromData(data,delay, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation","FromFile", x, y, w, h, sx ,sy ,sw ,sh) - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files=data - c.AnimStart={} - c.AnimEnd={} - c:SetImage(c.files[1]) - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end -function gui:newAnimFromTiles(file,xd,yd,delay, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(file, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageAnimation",file, x, y, w, h, sx ,sy ,sw ,sh) - local im=love.graphics.newImage(file) - local _x,_y=im:getDimensions() - c.Visibility=0 - c.ImageVisibility=1 - c.delay=delay or .05 - c.files={} - c.AnimStart={} - c.AnimEnd={} - for i=0,_y/yd-1 do - for j=0,_x/xd-1 do - table.insert(c.files,gui:getTile(im,j*xd,i*yd,xd,yd)) - end - end - c:SetImage(c.files[1]) - c.step=multi:newTStep(1,#c.files,1,c.delay) - c.step.parent=c - c.rotation=0 - c.step:OnStart(function(step) - for i=1,#step.parent.AnimStart do - step.parent.AnimStart[i](step.parent) - end - end) - c.step:OnStep(function(pos,step) - step.parent:SetImage(step.parent.files[pos]) - end) - c.step:OnEnd(function(step) - for i=1,#step.parent.AnimEnd do - step.parent.AnimEnd[i](step.parent) - end - end) - function c:OnAnimStart(func) - table.insert(self.AnimStart,func) - end - function c:OnAnimEnd(func) - table.insert(self.AnimEnd,func) - end - function c:Pause() - self.step:Pause() - end - function c:Resume() - self.step:Resume() - end - function c:Reset() - self.step.pos=1 - end - function c:getFrames() - return #self.files - end - function c:getFrame() - return self.step.pos - end - function c:setFrame(n) - return self:SetImage(self.files[n]) - end - return c -end -function gui:newFullImageLabel(i,name) - return self:newImageLabel(i,name,0,0,0,0,0,0,1,1) -end -function gui:newImageButton(i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageButton",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.Visibility=0 - c.ImageVisibility=1 - c.rotation=0 - if c.Image~=nil then - c.ImageHeigth=c.Image:getHeight() - c.ImageHeight=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c:OnEnter(function() - --love.mouse.setCursor(_GuiPro.CursorH) - end) - c:OnExit(function() - --love.mouse.setCursor(_GuiPro.CursorN) - end) - return c -end -function gui:newImageLabel(i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("ImageLabel",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.Visibility=0 - c.ImageVisibility=1 - c.rotation=0 - if c.Image~=nil then - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - return c -end -function gui:newVideo(name,i,x,y,w,h,sx,sy,sw,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("Video",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Video=love.graphics.newVideo(i) - else - c.Video=i - end - c.Visibility=0 - c.VideoVisibility=1 - c.rotation=0 - if c.Video~=nil then - c.VideoHeigth=c.Video:getHeight() - c.VideoWidth=c.Video:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.VideoWidth,c.VideoHeigth) - end - c.funcV={} - function c:Play() - self.handStart=true - self.Video:play() - end - function c:Pause() - self.Video:pause() - end - c.Resume=c.Play - function c:Stop() - self.handStart=false - self:Pause() - self:Rewind() - for i=1,# self.funcV do - self.funcV[i](self) - end - end - function c:OnVideoStopped(func) - table.insert(self.funcV,func) - end - function c:Rewind() - self.Video:rewind() - end - function c:Restart() - self:Rewind() - self:Play() - end - function c:Seek(o) - self.Video:seek(o) - end - function c:Tell() - self.Video:tell() - end - function c:SetFilter(min, mag, anisotropy) - self.Video:setFilter(min, mag, anisotropy) - end - function c:IsPlaying() - return self.Video:isPlaying() - end - c:OnUpdate(function(self) - if self.Video:isPlaying()==false and self.handStart == true then - self:Stop() - end - end) - return c -end -function gui:SetImage(i) - if type(i)=="string" then - self.Image=love.graphics.newImage(i) - else - self.Image=i - end - if self.Image~=nil then - self.ImageHeigth=self.Image:getHeight() - self.ImageWidth=self.Image:getWidth() - self.Quad=love.graphics.newQuad(0,0,self.width,self.height,self.ImageWidth,self.ImageHeigth) - end - return self.ImageWidth,self.ImageHeigth -end -function gui:UpdateImage() - self.ImageHeigth=self.Image:getHeight() - self.ImageWidth=self.Image:getWidth() - self.Quad=love.graphics.newQuad(0,0,self.width,self.height,self.ImageWidth,self.ImageHeigth) -end -function gui:newDropFrame(name,x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("DropFrame",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=false - c.funcD={} - function c:GetDroppedItems() - local t=self:getChildren() - local tab={} - for i=1,#t do - if t[i].Type=="TextImageButtonFrameDrag" then - table.insert(tab,t[i]) - end - end - return tab - end - function c:OnDropped(func) - table.insert(self.funcD,func) - end - c:OnUpdate(function(self) - if _GuiPro.DragItem then - if _GuiPro.DragItem.Type=="TextImageButtonFrameDrag" and love.mouse.isDown(_GuiPro.DragItem.dragbut or "m")==false and self:IsHovering() then - local t=_GuiPro.DragItem - _GuiPro.DragItem={} - for i=1,#t.funcD do - t.funcD[i](self,t) - end - for i=1,#self.funcD do - self.funcD[i](self,t) - end - _GuiPro.hasDrag=false - end - end - end) - return c -end -function gui:newFrame(name,x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("Frame",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=false - return c -end -function gui:newFullFrame(name) - name=name or "" - return self:newFrame(name,0,0,0,0,0,0,1,1) -end - -function gui:newTabFrame(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=gui:newFrame(name, x, y, w, h, sx ,sy ,sw ,sh) - c.tabheight=20 - c.Holder=c:newFrame("Holder",0,c.tabheight,0,0,0,0,1,1) - c.TabHolder=c:newFrame("TabHolder",0,0,0,c.tabheight,0,0,1) - function c:setTabHeight(n) - self.tabheight=n - self.Holder:SetDualDim(0,-self.tabheight,0,0,0,0,1,1) - end - function c:addTab(name,colorT,colorH) - if colorT and not(colorH) then - colorH=colorT - end - local tab=self.TabHolder:newTextButton(name,name,0,0,0,0,0,0,0,1) - tab.Tween=-3 - if colorT then - tab.Color=colorT - end - local holder=self.Holder:newFrame(name,0,0,0,0,0,0,1,1) - if colorH then - holder.Color=colorH - end - tab.frame=holder - tab:OnReleased(function(b,self) - if b=="l" then - local tt=self.Parent:getChildren() - local th=self.Parent.Parent.Holder:getChildren() - for i=1,#th do - th[i].Visible=false - end - for i=1,#tt do - tt[i].frame.Visible=false - tt[i].BorderSize=1 - end - self.BorderSize=0 - self.frame.Visible=true - end - end) - local tt=self.TabHolder:getChildren() - for i=1,#tt do - tt[i].frame.Visible=false - tt[i].BorderSize=1 - end - tab.frame.Visible=true - tab.BorderSize=0 - return tab,holder - end - c:OnUpdate(function(self) - local th=self.TabHolder:getChildren() - local l=self.width/#th - for i=1,#th do - th[i]:SetDualDim(l*(i-1),0,l) - end - if #th==0 then - self:Destroy() - end - end) - return c -end -function gui:newDragItem(t,i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextImageButtonFrameDrag",name, x, y, w, h, sx ,sy ,sw ,sh) - c.WasBeingDragged=false - c.IsBeingDragged=false - c.Draggable=true - c.funcD={} - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - c.ImageVisibility=1 - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - elseif type(i)=="image" then - c.Image=i - c.ImageVisibility=1 - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c:OnDragStart(function(self,x,y) - if _GuiPro.hasDrag==false then - self:setParent(_GuiPro) - self:SetDualDim(x,y) - self:TopStack() - end - end) - c.rotation=0 - c.Tween=0 - c.XTween=0 - c.text = t - c.AutoScaleText=false - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.TextVisibility=1 - c.TextColor = {0, 0, 0} - function c:OnDropped(func) - table.insert(self.funcD,func) - end - c:OnUpdate(function(self) - if love.mouse.isDown("m" or self.dragbut)==false and self==_GuiPro.DragItem and self.hovering==false then - _GuiPro.DragItem={} - for i=1,#self.func7 do - self.func7[i](self,(love.mouse.getX())-self.width/2,(love.mouse.getY())-self.height/2) - end - end - end) - return c -end -function gui:newItem(t,i,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextImageButtonFrame",name, x, y, w, h, sx ,sy ,sw ,sh) - if type(i)=="string" then - c.Image=love.graphics.newImage(i) - else - c.Image=i - end - c.rotation=0 - c.ImageVisibility=1 - c.Draggable=false - if c.Image~=nil then - c.ImageHeigth=c.Image:getHeight() - c.ImageWidth=c.Image:getWidth() - c.Quad=love.graphics.newQuad(0,0,w,h,c.ImageWidth,c.ImageHeigth) - end - c.Tween=0 - c.XTween=0 - c.text = t - c.AutoScaleText=false - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.TextColor = {0, 0, 0} - return c -end -function gui:addDominance() - _GuiPro.TopHovered=self -end -function gui:addHotKey(key) - local temp=self:newFrame(0,0,0,0) - temp.Visible=false - temp:setHotKey(key) - return temp -end -function gui:AdvTextBox(txt,x,y,w,h,sx,sy,sw,sh) - name="AdvTextBox" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("AdvTextBoxFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c.BorderSize=0 - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - --local temp = c:newTextButton("X","Close",-25,5,20,20,1) - --temp.Tween=-5 - --temp.XTween=-2 - --temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - --temp.Color=Color.Red - c.tLink=c:newTextBox("puttext","TextBox",5,h-95,-40,30,0,1,1,1) - c.tLink.Color=Color.light_gray - c.tLink.ClearOnFocus=true - c.tLink:OnFocus(function(self) self.ClearOnFocus=false end) - local temp=c:newTextButton("OK","Ok",-35,h-65,30,30,1,1) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcO do self.Parent.funcO[i](self.Parent,self.Parent.tLink.text) end end) - temp.Color=Color.Green - temp.XTween=-2 - local temp=c:newTextButton("X","Cancel",-35,h-95,30,30,1,1) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent,self.Parent.tLink.text) end end) - temp.Color=Color.Red - temp.XTween=-2 - function c:Close() - self.Visible=false - end - function c:Open() - self.Visible=true - end - function c:OnOk(func) - table.insert(self.funcO,func) - end - function c:OnX(func) - table.insert(self.funcX,func) - end - return c -end -function alphanumsort(o) - local function padnum(d) local dec, n = string.match(d, "(%.?)0*(.+)") - return #dec > 0 and ("%.12f"):format(d) or ("%s%03d%s"):format(dec, #n, n) - end - table.sort(o, function(a,b) return tostring(a):gsub("%.?%d+",padnum)..("%3d"):format(#b)< tostring(b):gsub("%.?%d+",padnum)..("%3d"):format(#a) end) - return o -end -function gui:anchorRight(n) - self:SetDualDim(-(self.width+n),nil,nil,nil,1) -end -function _GuiPro.gradient(colors) - local direction = colors.direction or "horizontal" - colors.direction=nil - trans = colors.trans or 255 - trans=math.floor(trans) - if direction == "horizontal" then - direction = true - elseif direction == "vertical" then - direction = false - else - error("Invalid direction '" .. tostring(direction) "' for gradient. Horizontal or vertical expected.") - end - local result = love.image.newImageData(direction and 1 or #colors, direction and #colors or 1) - for __i, color in ipairs(colors) do - local x, y - if direction then - x, y = 0, __i - 1 - else - x, y = __i - 1, 0 - end - result:setPixel(x, y, color[1], color[2], color[3], trans) - end - result = love.graphics.newImage(result) - result:setFilter('linear', 'linear') - return result -end -function _GuiPro.drawinrect(img, x, y, w, h, r, ox, oy, kx, ky) - love.graphics.draw(img, x, y, r, w / img:getWidth(), h / img:getHeight(), ox, oy, kx, ky) -end -function gui:ApplyGradient(rules) - self.Image=nil - self.Type=self.Type.."w/GradImage" - self.rotation=0 - self.ImageVisibility=rules.visibility or 1 - self:SetImage(_GuiPro.gradient(rules)) -end -function gui:BottomStack() - childs=self.Parent:getChildren() - for i=1,#childs do - if childs[i]==self then - table.remove(self.Parent.Children,i) - table.insert(self.Parent.Children,1,self) - break - end - end -end -function gui:Center() - local x,y=self:getFullSize() - self:SetDualDim(-math.floor(x/2),-math.floor(y/2),nil,nil,.5,.5) -end -function gui:centerX() - self:SetDualDim(-(self.width/2),nil,nil,nil,.5) -end -function gui:centerY() - self:SetDualDim(nil,-(self.height/2),nil,nil,nil,.5) -end -function gui:Destroy() - check=self.Parent:getChildren() - local cc=0 - for cc=1,#check do - if check[cc]==self then - table.remove(self.Parent.Children,cc) - end - end -end -function gui:disrespectHierarchy() - _GuiPro.Hierarchy=false -end -function gui:GetAllChildren() - local Stuff = {} - function Seek(Items) - for i=1,#Items do - if Items[i].Visible==true then - table.insert(Stuff,Items[i]) - local NItems = Items[i]:getChildren() - if NItems ~= nil then - Seek(NItems) - end - end - end - end - local Objs = self:getChildren() - for i=1,#Objs do - if Objs[i].Visible==true then - table.insert(Stuff,Objs[i]) - local Items = Objs[i]:getChildren() - if Items ~= nil then - Seek(Items) - end - end - end - return Stuff -end -function gui:GetChild(name) - return self.Children[name] or self -end -function gui:getChildren() - return self.Children -end -function gui:getColor(cindex) - return Color[cindex] -end -function gui:getFullSize() - local maxx,maxy=-math.huge,-math.huge - local temp = self:GetAllChildren() - for i=1,#temp do - if temp[i].width>maxx then - maxx=temp[i].width+temp[i].offset.pos.x - elseif temp[i].height>maxy then - maxy=temp[i].height+temp[i].offset.pos.y - end - end - return maxx,maxy -end -function gui:getHighest() - if self.Children[#self.Children]~=nil then - return self.Children[#self.Children] - end -end -function gui:getLowest() - if self.Children[1]~=nil then - return self.Children[1] - end -end -function InGrid(i,x,y,s) - return math.floor((i-1)/x)*s,(i-1)*s-(math.floor((i-1)/y)*(s*x)) -end -function InGridX(i,w,h,xs,ys) - local xc,yc=math.floor(w/xs),math.floor(h/ys) - local xi,yi=(i-1)%xc,math.floor((i-1)/xc) - return xi*xs,yi*ys -end -function InGridY(i,w,h,xs,ys) - local xc,yc=math.floor(w/xs),math.floor(h/ys) - local xi,yi=math.floor((i-1)/yc),(i-1)%yc - return xi*xs,yi*ys -end -function gui:isDescendant(obj) - local things=obj:GetAllChildren() - for i=1,#things do - if things[i]==self then - return true - end - end - return false -end -function gui:isHighest() - return (self==self.Parent:getHighest()) -end -function gui:IsHovering() - return (love.mouse.getX() > self.x and love.mouse.getX() < self.x+self.width and love.mouse.getY() > self.y and love.mouse.getY() < self.y+self.height) -end -function gui:isLowest() - return (self==self.Parent:getLowest()) -end -function gui.massMutate(t,...) - local mut={...} - for i=1,#mut do - mut[i]:Mutate(t) - end -end -function gui:Move(x,y) - self.offset.pos.x=self.offset.pos.x+x - self.offset.pos.y=self.offset.pos.y+y -end -if love.filesystem.exists("CheckBoxes.png") then - _GuiPro.UC=gui:getTile("CheckBoxes.png",0,0,16,16) - _GuiPro.C=gui:getTile("CheckBoxes.png",16,0,16,16) - _GuiPro.UCH=gui:getTile("CheckBoxes.png",0,16,16,16) - _GuiPro.CH=gui:getTile("CheckBoxes.png",16,16,16,16) -end -function gui:newCheckBox(name,x,y) - if not(_GuiPro.UC) then error("CheckBoxes.png not found! Cannot currently use checkbox without the data") end - if type(name)~="String" then - x,y,name=name,x,"CheckBox" - end - local c=self:newImageLabel(_GuiPro.UC,name, x, y, 16,16) - c.Visibility=0 - c.check=false - c:OnEnter(function(self) - if self.check then - self:SetImage(_GuiPro.CH) - else - self:SetImage(_GuiPro.UCH) - end - end) - function c:isChecked() - return self.check - end - c:OnExit(function(self) - if self.check then - self:SetImage(_GuiPro.C) - else - self:SetImage(_GuiPro.UC) - end - end) - c:OnReleased(function(b,self) - self.check=not(self.check) - if self.check then - self:SetImage(_GuiPro.CH) - else - self:SetImage(_GuiPro.UCH) - end - end) - return c -end -function gui:newMessageBox(txt,x,y,w,h,sx,sy,sw,sh) - name="MessageBox" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("MessageBoxFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c.BorderSize=0 - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - local temp = c:newTextButton("X","Close",-25,5,20,20,1) - temp.Tween=-5 - temp.XTween=-2 - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - temp.Color=Color.Red - local temp=c:newTextButton("OK","Ok",0,h-65,0,30,.25,1,.5) - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcO do self.Parent.funcO[i](self.Parent) end end) - temp.Color=Color.Green - function c:Close() - self.Visible=false - end - function c:Open() - self.Visible=true - end - function c:OnOk(func) - table.insert(self.funcO,func) - end - function c:OnX(func) - table.insert(self.funcX,func) - end - return c -end -function gui:newPart(x, y,w ,h , sx ,sy ,sw ,sh) - local c = {} - setmetatable(c, gui) - if self==gui then - c.Parent=_GuiPro - else - c.Parent=self - end - c.funcs={} - c.funcs2={} - c.funcs3={} - c.funcs4={} - c.funcs5={} - c.func6={} - c.func7={} - c.func8={} - c.func9={} - c.func10={} - c.form="rectangle" - c.Color = {255, 255, 255} - c.scale={} - c.scale.size={} - c.scale.size.x=sw or 0 - c.scale.size.y=sh or 0 - c.offset={} - c.offset.size={} - c.offset.size.x=w or 0 - c.offset.size.y=h or 0 - c.scale.pos={} - c.scale.pos.x=sx or 0 - c.scale.pos.y=sy or 0 - c.offset.pos={} - c.offset.pos.x=x or 0 - c.offset.pos.y=y or 0 - c.VIS=true - c.Visible=true - c.Visibility=1 - c.BorderColor={0,0,0} - c.BorderSize=0 - c.Type="Part" - c.Name="GuiPart" - _GuiPro.count=_GuiPro.count+1 - c.x=(c.Parent.width*c.scale.pos.x)+c.offset.pos.x+c.Parent.x - c.y=(c.Parent.height*c.scale.pos.y)+c.offset.pos.y+c.Parent.y - c.width=(c.Parent.width*c.scale.size.x)+c.offset.size.x - c.height=(c.Parent.height*c.scale.size.y)+c.offset.size.y - table.insert(c.Parent.Children,c) - return c -end -function gui:newProgressBar(txt,x,y,w,h,sx,sy,sw,sh) - name="newProgressBar" - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("newProgressBarFrame",name, x, y, w, 30, sx ,sy ,sw ,sh) - c.Draggable=true - c.dragbut="r" - c.BorderSize=0 - c:ApplyGradient{Color.Blue,Color.sexy_purple} - c:newTextLabel(txt,"Holder",0,0,0,h-30,0,1,1,0).Color=Color.sexy_purple - c.funcO={} - c.funcX={} - c:OnDragStart(function(self) - self:TopStack() - end) - local temp = c:newTextButton("X","Close",-25,5,20,20,1) - temp.Tween=-5 - temp.XTween=-2 - temp:OnReleased(function(b,self) for i=1,#self.Parent.funcX do self.Parent.funcX[i](self.Parent) end end) - temp.Color=Color.Red - c.BarBG=c:newTextButton("",5,h-65,-10,30,0,1,1) - c.BarBG:ApplyGradient{Color.Red,Color.light_red} - c.Bar=c.BarBG:newTextLabel("",0,0,0,0,0,0,0,1) - c.Bar:ApplyGradient{Color.Green,Color.light_green} - c.BarDisp=c.BarBG:newTextLabel("0%","0%",0,0,0,0,0,0,1,1) - c.BarDisp.Visibility=0 - c.BarDisp.Link=c.Bar - c.BarDisp:OnUpdate(function(self) - self.text=self.Link.scale.size.x*100 .."%" - end) - c.Func1={} - function c:On100(func) - table.insert(self.Func1,func) - end - c:OnUpdate(function(self) - if self.Bar.scale.size.x*100>=100 then - for P=1,#self.Func1 do - self.Func1[P](self) - end - end - end) - function c:SetPercentage(n) - self.Bar:SetDualDim(0,0,0,0,0,0,n/100,1) - end - return c -end -function gui:newScrollBar(color1,color2) - local scrollbar=self:newFrame(-20,0,20,0,1,0,0,1) - scrollbar.funcS={} - scrollbar.Color=color1 or Color.saddle_brown - scrollbar:OnClicked(function(b,self,x,y) - love.mouse.setX(self.x+10) - if y>=10 and y<=self.height-10 then - self.mover:SetDualDim(0,y-10) - end - if y<10 then - love.mouse.setY(10+self.y) - end - if y>self.height-10 then - love.mouse.setY((self.height-10)+self.y) - end - for i=1,#self.funcS do - self.funcS[i](self,self:getPosition()) - end - end) - scrollbar:OnEnter(function(self) - self:addDominance() - end) - scrollbar:OnExit(function(self) - self:removeDominance() - end) - scrollbar.mover=scrollbar:newTextButton("","",0,0,20,20) - scrollbar.mover.Color=color2 or Color.light_brown - function scrollbar:getPosition() - return ((self.mover.offset.pos.y)/(self.height-20))*100 - end - function scrollbar:setPosition(n) - print((self.height-20),n) - self.mover.offset.pos.y=((self.height-20)/(100/n)) - for i=1,#self.funcS do - self.funcS[i](self,self:getPosition()) - end - end - function scrollbar:OnScroll(func) - table.insert(self.funcS,func) - end - return scrollbar -end -function gui:newScrollMenu(title,tabN,onloop,x, y, w, h, sx ,sy ,sw ,sh) - local Main = self:newFrame(x, y, w, h, sx ,sy ,sw ,sh) - local Title=Main:newTextButton(title,"Title",0,0,0,20,0,0,1) - Title.Tween=-4 - Title.FontSize=12 - Title:OnReleased(function(b,self) - self.Parent.Tick=not(self.Parent.Tick) - end) - local scroll=Main:newTextButton("","Scroll",-20,20,20,-20,1,0,0,1) - scroll:OnClicked(function(b,self,x,y) - self.Parent.Mover:SetDualDim(0,y-10,20,20) - if self.Parent.Mover.offset.pos.y<0 then - self.Parent.Mover:SetDualDim(0,0,20,20) - end - if self.Parent.Mover.offset.pos.y>self.Parent.height-40 then - self.Parent.Mover:SetDualDim(0,self.Parent.height-40,20,20) - end - local temp = #self.Parent.TList - self.Parent.pos=(math.floor((temp*self.Parent.Mover.offset.pos.y)/self.height))+1 - end) - Main:OnUpdate(function(self) - if self.Tick==false then - self.Visibility=0 - end - end) - scroll:OnUpdate(function(self) - self.Visible=self.Parent.Tick - end) - local Mover=scroll:newTextLabel("",0,0,20,20) - Main.Mover=Mover - Main.TList=tabN - Main.pos=1 - Main.Tick=true - function Main:Update(title,tabN,onloop) - ch=self:getChildren() - for i=#ch,1,-1 do - ch[i]:Destroy() - end - Title=Main:newTextButton(title,"Title",0,0,0,20,0,0,1) - Title.Tween=-4 - Title.FontSize=12 - Title:OnReleased(function(b,self) - self.Parent.Tick=not(self.Parent.Tick) - end) - scroll=Main:newTextButton("","Scroll",-20,20,20,-20,1,0,0,1) - scroll:OnClicked(function(b,self,x,y) - self.Parent.Mover:SetDualDim(0,y-10,20,20) - if self.Parent.Mover.offset.pos.y<0 then - self.Parent.Mover:SetDualDim(0,0,20,20) - end - if self.Parent.Mover.offset.pos.y>self.Parent.height-40 then - self.Parent.Mover:SetDualDim(0,self.Parent.height-40,20,20) - end - local temp = #self.Parent.TList - self.Parent.pos=(math.floor((temp*self.Parent.Mover.offset.pos.y)/self.height))+1 - end) - local Mover=scroll:newTextLabel("",0,0,20,20) - Main.Mover=Mover - Main.TList=tabN - Main.pos=1 - Main.Tick=true - scroll:OnUpdate(function(self) - self.Visible=self.Parent.Tick - end) - for i=1,math.floor(Main.height/20)-1 do - local temp=Main:newTextButton("","Item"..i,0,i*20,-20,20,0,0,1) - temp.FontSize=10 - temp.Tween=-4 - temp.pos=i - temp:OnUpdate(function(self) - self.text=self.Parent.TList[(self.Parent.pos+self.pos)-1] - self.Visible=self.Parent.Tick - end) - if onloop then - onloop(temp,i) - end - end - end - io.write(tostring(Main.height).."\n") - for i=1,math.floor(Main.height/20)-1 do - local temp=Main:newTextButton("Item"..i,0,i*20,-20,20,0,0,1) - temp.FontSize=10 - temp.Tween=-4 - temp.pos=i - temp:OnUpdate(function(self) - if self.Parent.TList[(self.Parent.pos+self.pos)-1]~=nil then - self.text=self.Parent.TList[(self.Parent.pos+self.pos)-1] - else - self.text="" - end - self.Visible=self.Parent.Tick - end) - if onloop then - onloop(temp,i) - end - end - return Main -end -function gui:destroyAllChildren() - local c=self.Children - for i=1,#c do - c[i]:Destroy() - end -end -function gui:removeDominance() - _GuiPro.TopHovered=nil -end -function gui:respectHierarchy() - _GuiPro.Hierarchy=true -end -function gui.round(num, idp) - local mult = 10^(idp or 0) - return math.floor(num * mult + 0.5) / mult -end -function gui.setBG(i) - gui.ff:SetImage(i) -end -function gui:setColor(a,b,c) - if type(a)=="string" then - self.Color=Color[a] - elseif type(a)=="number" then - self.Color=Color.new(a,b,c) - end -end -function gui:setTextColor(a,b,c) - if type(a)=="string" then - self.TextColor=Color[a] - elseif type(a)=="number" then - self.TextColor=Color.new(a,b,c) - end -end -function gui:setDefualtFont(font) - _defaultfont = font -end -function gui:SetDualDim(x, y, w, h, sx ,sy ,sw ,sh) - if _GuiPro.DPI_ENABLED then - if x then - x=self.DPI*x - end - if y then - y=self.DPI*y - end - if w then - w=self.DPI*w - end - if h then - h=self.DPI*h - end - end - if sx then - self.scale.pos.x=sx - end - if sy then - self.scale.pos.y=sy - end - if x then - self.offset.pos.x=x - end - if y then - self.offset.pos.y=y - end - if sw then - self.scale.size.x=sw - end - if sh then - self.scale.size.y=sh - end - if w then - self.offset.size.x=w - end - if h then - self.offset.size.y=h - end - if self.Image then - self:SetImage(self.Image) - end -end -function gui:setDualDim(...) - self:SetDualDim(...) -end -function gui:setText(txt) - self.text=txt -end -function gui:getText(txt) - return self.text -end ---_GuiPro.CursorN=love.mouse.getSystemCursor("arrow") ---_GuiPro.CursorH=love.mouse.getSystemCursor("hand") -function gui:SetHand(img,x,y) - --_GuiPro.CursorN=love.mouse.newCursor(img,x,y) -end -function gui:setHotKey(key) - local tab=key:split("+") - self.hotkeys=tab - self.cooldown=false - self.Alarm=multi:newAlarm(1) - self.Alarm.parent=self - self.args={} - self.funcHK=multi:newConnection() - self.Alarm:OnRing(function(alarm) alarm.parent.cooldown=false end) - function self:OnHotKey(func) - self.funcHK:connect(func) - end - self:OnUpdate(function(self) - if self.cooldown then return end - for i=1,#self.hotkeys do - if not(love.keyboard.isDown(self.hotkeys[i])) then - return - end - end - self.cooldown=true - self.funcHK:Fire(self) - self.Alarm:Reset() - end) -end -function gui:SetHover(img,x,y) - --_GuiPro.CursorH=love.mouse.newCursor(img,x,y) -end -function gui:SetName(name) - self.Parent.Children[name]=self - self.Name=name -end -function gui:setNewFont(FontSize) - self.Font=love.graphics.setNewFont(tonumber(FontSize)) -end -function gui:setParent(parent,name)-- Needs fixing!!! - local temp=self.Parent:getChildren() - for i=1,#temp do - if temp[i]==self then - table.remove(self.Parent.Children,i) - break - end - end - table.insert(parent.Children,self) - self.Parent=parent - if name then - self:SetName(name) - end -end -function gui:setVisiblity(val) - self.Visible=val - self.oV=val - doto=self:GetAllChildren() - if val==false then - for i=1,#doto do - doto[i].Visible=val - end - else - for i=1,#doto do - doto[i].Visible=doto[i].oV - end - end -end -function gui:TopStack() - childs=self.Parent:getChildren() - for i=1,#childs do - if childs[i]==self then - table.remove(self.Parent.Children,i) - table.insert(self.Parent.Children,self) - break - end - end -end -function string:insert(p,s) - return ("%s%s%s"):format(self:sub(1,p), s, self:sub(p+1)) -end -function string:remove(p,l) - l=l or 1 - return ("%s%s"):format(self:sub(1,p-1), self:sub(p+l)) -end -function gui:newTextBox(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextBox",name, x, y, w, h, sx ,sy ,sw ,sh) - c.ClearOnFocus=false - c.LoseFocusOnEnter=true - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.ttext= t - c.AutoScaleText=false - c.TextVisibility=1 - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - c.Active=false - c.hidden=false - c.cursor={0,1} - c.mark=nil - c.arrowkeys=false - c.funcF={function() - love.keyboard.setTextInput(true) - end} - c.cooldown=false - c.cooldown2=false - c.funcE={function() - love.keyboard.setTextInput(false) - end} - function c:triggerEnter() - for cc=1,#self.funcE do - self.funcE[cc](self,self.ttext) - end - self.text="" - self.ttext="" - end - c.Enter=true - c.Alarm=multi:newAlarm(.1) - c.Alarm.parent=c - c.Alarm:OnRing(function(alarm) alarm.parent.cooldown=false end) - c.Alarm2=multi:newAlarm(.5) - c.Alarm2.parent=c - c.Alarm2:OnRing(function(alarm) alarm.parent.cooldown2=false end) - c.ArrowAlarm=multi:newAlarm(.1) - c.ArrowAlarm.parent=c - c.ArrowAlarm:OnRing(function(alarm) alarm.parent.arrowkeys=false end) - function c:OnFocus(func) - table.insert(self.funcF,func) - end - function c:OnEnter(func) - table.insert(self.funcE,func) - end - c:OnClicked(function(b,self) - for cc=1,#self.funcF do - self.funcF[cc](self) - end - if self.Active==false then - if self.ClearOnFocus==true then - self.text="" - self.ttext="" - end - for tb=1,#gui.TB do - if gui.TB[tb]~=nil then - gui.TB[tb].Active=false - end - end - self.Active=true - end - end) - c:OnClicked(function(b,self,x,y) - local dwidth, wrappedtext = _defaultfont:getWrap(self.text:sub(1,self.cursor[1]), self.width) - local height = _defaultfont:getHeight() - if #wrappedtext>=1 then - width= _defaultfont:getWidth(wrappedtext[#wrappedtext]) - self.cursor[2]=#wrappedtext - else - self.cursor[2]=1 - width=0 - end - yc=math.ceil(((y/self.DPI)-(self.FontHeight/2)+self.Tween-self.y)/height) - xc=math.floor(x) - end) - c:AddDrawRuleE(function(self) - if self.Active then - local dwidth, wrappedtext = _defaultfont:getWrap(self.text:sub(1,self.cursor[1]), self.width) - local height = _defaultfont:getHeight() - if #wrappedtext>=1 then - width= _defaultfont:getWidth(wrappedtext[#wrappedtext]) - self.cursor[2]=#wrappedtext - else - self.cursor[2]=1 - width=0 - end - x1=width+2+self.x+self.XTween - y1=(self.y+(height*(self.cursor[2]-1))+(self.FontHeight/2)+self.Tween)*self.DPI - x2=width+2+self.x+self.XTween - y2=(self.y+(self.FontHeight/2)+self.Tween*self.DPI)+height*self.cursor[2] - love.graphics.line(x1,y1,x2,y2) - end - end) - c:OnUpdate(function(self) - if love.keyboard.isDown("backspace") and self.Active and self.cooldown==false then - if #self.text>0 then - self.text = self.text:remove(self.cursor[1]) - self.ttext = self.ttext:remove(self.cursor[1]) - self.cursor[1]=self.cursor[1]-1 - end - self.cooldown=true - self.Alarm:Reset() - elseif love.keyboard.isDown("backspace")==false then - self.cooldown=false - end - if love.keyboard.isDown("left") and self.arrowkeys==false and self.Active then - self.arrowkeys=true - self.cursor[1]=self.cursor[1]-1 - if self.cursor[1]<0 then - self.cursor[1]=0 - end - self.ArrowAlarm:Reset() - elseif love.keyboard.isDown("right") and self.arrowkeys==false and self.Active then - self.arrowkeys=true - self.cursor[1]=self.cursor[1]+1 - if self.cursor[1]>#self.text then - self.cursor[1]=#self.text - end - self.ArrowAlarm:Reset() - end - if love.keyboard.isDown("delete") and self.Active then - if #self.text>0 then - self.text = "" - self.ttext = "" - self.cursor[1]=1 - end - elseif (love.keyboard.isDown("lshift") or love.keyboard.isDown("rshift")) and love.keyboard.isDown("return") and self.cooldown2==false then - self.text=self.text.."\n" - self.ttext=self.ttext.."\n" - self.cooldown2=true - c.Alarm2:Reset() - elseif (love.keyboard.isDown("return") or love.keyboard.isDown("enter") or love.keyboard.isDown("kpenter")) and self.Active and self.Enter and not(love.keyboard.isDown("lshift") or love.keyboard.isDown("rshift")) then - if self.LoseFocusOnEnter then - self.Active=false - else - self.Active=true - end - for cc=1,#self.funcE do - self.funcE[cc](self,self.ttext) - end - end - end) - table.insert(gui.TB,c) - return c -end ---TEXT BOX HELPER FUNCTION -function love.textinput(t) - for tb=1,#gui.TB do - if gui.TB[tb]~=nil then - if gui.TB[tb].Active then - if gui.TB[tb].hidden then - --gui.TB[tb].text=gui.TB[tb].text.."*" - gui.TB[tb].text=gui.TB[tb].text:insert(gui.TB[tb].cursor[1],"*") - else - --gui.TB[tb].text=gui.TB[tb].text..t - gui.TB[tb].text=gui.TB[tb].text:insert(gui.TB[tb].cursor[1],t) - end - gui.TB[tb].ttext=gui.TB[tb].ttext:insert(gui.TB[tb].cursor[1],t) - gui.TB[tb].cursor[1]=gui.TB[tb].cursor[1]+1 - end - end - end -end -function gui:newTextButton(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextButton",name, x, y, w, h, sx ,sy ,sw ,sh) - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.AutoScaleText=false - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - c:OnEnter(function() - --love.mouse.setCursor(_GuiPro.CursorH) - end) - c:OnExit(function() - --love.mouse.setCursor(_GuiPro.CursorN) - end) - return c -end -function gui:newTextLabel(t,name, x, y, w, h, sx ,sy ,sw ,sh) - x,y,w,h,sx,sy,sw,sh=filter(name, x, y, w, h, sx ,sy ,sw ,sh) - local c=self:newBase("TextLabel",name, x, y, w, h, sx ,sy ,sw ,sh) - c.Tween=0 - c.XTween=0 - c.FontHeight=_defaultfont:getHeight() - c.Font=_defaultfont - c.FontSize=15 - c.TextFormat="center" - c.text = t - c.AutoScaleText=false - c.TextVisibility=1 -- 0=invisible,1=solid (self.TextVisibility*254+1) - c.Color = {220, 220, 220} - c.TextColor = {0, 0, 0} - return c -end -function gui:AddDrawRuleB(rule) - if not(self.DrawRulesB) then self.DrawRulesB={} end - table.insert(self.DrawRulesB,rule) -end -function gui:AddDrawRuleE(rule) - if not(self.DrawRulesE) then self.DrawRulesE={} end - table.insert(self.DrawRulesE,rule) -end -function gui:draw() - if _GuiPro.rotate~=0 then - love.graphics.rotate(math.rad(_GuiPro.rotate)) - end - if self.FormFactor:lower()=="rectangle" then - self:drawR() - elseif self.FormFactor:lower()=="circle" then - self:drawC() - else - error("Unsupported FormFactor: "..self.FormFactor.."!") - end -end -function gui:drawC() - if love.mouse.isDown("l")==false and love.mouse.isDown("m")==false and love.mouse.isDown("r")==false then - _GuiPro.DragItem={} - _GuiPro.hasDrag=false - end - if self.Visible==true and self.VIS==true then - local b=true - for i,v in pairs(_GuiPro.Clips) do - if self:isDescendant(v)==true then - b=false - end - end - if b then - love.graphics.setStencilTest( ) - _GuiPro.HasStencel=false - _GuiPro.StencelHolder=nil - end - local x,y,r,s=(self.offset.pos.x or 0)+self.Parent.x,(self.offset.pos.y or 0)+self.Parent.y,self.offset.size.x or 0,self.offset.size.y or 360 - if self.CC then - x,y=x+r,y+r - end - self.x,self.y=x,y - _GuiPro.circleStencilFunction = function() - love.graphics.circle("fill",x,y,r,s) - end - if math.sqrt((love.mouse.getX()-x)^2+(love.mouse.getY()-y)^2)<=r and self:eventable() and self:Clickable() and self.Active==true then - self.hovering=true - if love.mouse.isDown("l") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.lclicked=true - elseif love.mouse.isDown("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.rclicked=true - elseif love.mouse.isDown("m") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.mclicked=true - else - if string.find(self.Type, "Button") and _GuiPro.hasDrag==false then - love.graphics.setColor(self.Color[1]-5, self.Color[2]-5, self.Color[3]-5,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - self.hovering=false - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - if self.ClipDescendants==true then - _GuiPro.Clips[tostring(self)]=self - _GuiPro.HasStencel=true - _GuiPro.StencelHolder=self - love.graphics.stencil(_GuiPro.circleStencilFunction) - love.graphics.setStencilTest("notequal",0) - end - love.graphics.circle("fill",x,y,r,s) - love.graphics.setColor(self.BorderColor[1], self.BorderColor[2], self.BorderColor[3],self.Visibility*254) - for b=0,self.BorderSize-1 do - love.graphics.circle("line",x,y,r+b,s) - end - if string.find(self.Type, "Text") then - if self.text~=nil then - if self.AutoScaleText then - self.FontSize=math.floor(self.height/1.45833) - end - love.graphics.setColor(self.TextColor[1],self.TextColor[2],self.TextColor[3],self.TextVisibility*254) - love.graphics.setFont(self.Font) - love.graphics.printf(self.text, x-(r/2)+(self.XTween), y-(r/2)+self.Tween, r, self.TextFormat) - end - end - end -end -function gui:drawR() - if love.mouse.isDown("l")==false and love.mouse.isDown("m")==false and love.mouse.isDown("r")==false then - _GuiPro.DragItem={} - _GuiPro.hasDrag=false - end - if self.Visible==true and self.VIS==true then - local b=true - for i,v in pairs(_GuiPro.Clips) do - if self:isDescendant(v)==true then - b=false - end - end - if b==true then - love.graphics.setStencilTest() - love.graphics.setScissor() - end - self.x=(self.Parent.width*self.scale.pos.x)+self.offset.pos.x+self.Parent.x - self.y=(self.Parent.height*self.scale.pos.y)+self.offset.pos.y+self.Parent.y - self.width=(self.Parent.width*self.scale.size.x)+self.offset.size.x - self.height=(self.Parent.height*self.scale.size.y)+self.offset.size.y - if self.DrawRulesB then - for dr=1,#self.DrawRulesB do - self.DrawRulesB[dr](self) - end - end - if (love.mouse.getX() > self.x and love.mouse.getX() < self.x+self.width and love.mouse.getY() > self.y and love.mouse.getY() < self.y+self.height and self:Clickable() and self:eventable()) or self:touchable("r") and self.Active==true then - self.hovering=true - if love.mouse.isDown("l") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.lclicked=true - elseif love.mouse.isDown("r") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.rclicked=true - elseif love.mouse.isDown("m") or self:touchable("r") and _GuiPro.hasDrag==false then - if string.find(self.Type, "Button") then - love.graphics.setColor(self.Color[1]-10, self.Color[2]-10, self.Color[3]-10,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.mclicked=true - else - if string.find(self.Type, "Button") or self:touchable("r") and _GuiPro.hasDrag==false then - love.graphics.setColor(self.Color[1]-5, self.Color[2]-5, self.Color[3]-5,self.Visibility*254) - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - end - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - else - love.graphics.setColor(self.Color[1],self.Color[2],self.Color[3],self.Visibility*254) - self.hovering=false - self.rclicked=false - self.lclicked=false - self.mclicked=false - end - if self.ClipDescendants==true then - _GuiPro.Clips[tostring(self)]=self - love.graphics.setScissor(self.x, self.y, self.width, self.height) - end - if self:hasRoundness() then - love.graphics.stencil(self.stfunc, "replace", 1) - love.graphics.setStencilTest("greater", 0) - end - love.graphics.rectangle("fill", self.x, self.y, self.width, self.height,(self.rx or 1)*self.DPI,(self.ry or 1)*self.DPI,(self.segments or 1)*self.DPI) - if string.find(self.Type, "Image") then - self:ImageRule() - end - if self.Type=="Video" then - self:VideoRule() - end - if self:hasRoundness() then - love.graphics.setStencilTest() - end - love.graphics.setColor(self.BorderColor[1], self.BorderColor[2], self.BorderColor[3],self.Visibility*254) - for b=0,self.BorderSize-1 do - love.graphics.rectangle("line", self.x-(b/2), self.y-(b/2), self.width+b, self.height+b,(self.rx or 1)*self.DPI,(self.ry or 1)*self.DPI,(self.segments or 1)*self.DPI) - end - if string.find(self.Type, "Text") then - if self.text~=nil then - if self.AutoScaleText then - self.FontSize=math.floor(self.height/1.45833) - end - love.graphics.setColor(self.TextColor[1],self.TextColor[2],self.TextColor[3],self.TextVisibility*254) - if self.Font==_defaultfont then - love.graphics.setFont(self.Font) - love.graphics.printf(self.text, self.x+2+(self.XTween*self.DPI)+((self.marginL or 0)*self.DPI or self.XTween*self.DPI), self.y+(self.FontHeight/2)+self.Tween*self.DPI, self.width+(0 or (self.marginR or 0)*self.DPI), self.TextFormat) - else - if type(self.Font)=="string" then - self.Font=love.graphics.newFont(self.Font,self.FontSize) - self.FontHeight=self.Font:getHeight() - else - love.graphics.setFont(self.Font) - end - if type(self.FontSize)=="string" then - self.FontSize=tonumber(self.FontSize) - love.graphics.setNewFont(self.FontSize) - end - love.graphics.printf(self.text, self.x+2+((self.marginL or 0)*self.DPI or self.XTween*self.DPI), self.y+math.floor((self.FontHeight-self.FontSize)/2)+self.Tween*self.DPI, self.width+(0 or (self.marginR or 0)*self.DPI), self.TextFormat) - end - end - end - if self.DrawRulesE then - for dr=1,#self.DrawRulesE do - self.DrawRulesE[dr](self) - end - end - end -end - -gui:respectHierarchy() -_GuiPro.width,_GuiPro.height=love.graphics.getDimensions() -multi:newLoop():OnLoop(function() _GuiPro.width,_GuiPro.height=love.graphics.getDimensions() _GuiPro:update() end) -multi:onDraw(function() _GuiPro:draw() end) -gui.ff=gui:newFrame("",0,0,0,0,0,0,1,1) -gui.ff.Color={255,255,255} -gui.ff:OnUpdate(function(self) - self:BottomStack() -end) - diff --git a/examples/love2d Threading Example/core/Library.lua b/examples/love2d Threading Example/core/Library.lua deleted file mode 100644 index 8260136..0000000 --- a/examples/love2d Threading Example/core/Library.lua +++ /dev/null @@ -1,319 +0,0 @@ -if table.unpack then - unpack=table.unpack -end -function table.val_to_str ( v ) - if "string" == type( v ) then - v = string.gsub( v, "\n", "\\n" ) - if string.match( string.gsub(v,"[^'\"]",""), '^"+$' ) then - return "'" .. v .. "'" - end - return '"' .. string.gsub(v,'"', '\\"' ) .. '"' - else - return "table" == type( v ) and table.tostring( v ) or - tostring( v ) - end -end - -function table.key_to_str ( k ) - if "string" == type( k ) and string.match( k, "^[_%a][_%a%d]*$" ) then - return k - else - return "[" .. table.val_to_str( k ) .. "]" - end -end - -function table.tostring( tbl ) - local result, done = {}, {} - for k, v in ipairs( tbl ) do - table.insert( result, table.val_to_str( v ) ) - done[ k ] = true - end - for k, v in pairs( tbl ) do - if not done[ k ] then - table.insert( result, - table.key_to_str( k ) .. "=" .. table.val_to_str( v ) ) - end - end - return "{" .. table.concat( result, "," ) .. "}" -end -function table.merge(t1, t2) - t1,t2= t1 or {},t2 or {} - for k,v in pairs(t2) do - if type(v) == "table" then - if type(t1[k] or false) == "table" then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -Library={} -function Library.optimize(func) - local test=Library.convert(func) - rawset(test,"link",{}) - rawset(test,"last","") - rawset(test,"org",func) - test:inject(function(...) - rawset(test,"last",table.tostring({...})) - if test.link[test.last]~=nil then - return Library.forceReturn(unpack(test.link[test.last])) - end - return {...} - end,1) - test:inject(function(...) - test.link[test.last]={test.org(...)} - return test.org(...) - end) - return test -end -function Library.forceReturn(...) - return {[0]="\1\7\6\3\2\99\125",...} -end -function Library.inject(lib,dat,arg) - if type(lib)=="table" then - if type(dat)=="table" then - table.merge(lib,dat) - elseif type(dat)=="string" then - if lib.Version and dat:match("(%d-)%.(%d-)%.(%d-)") then - lib.Version={dat:match("(%d+)%.(%d+)%.(%d+)")} - elseif dat=="meta" and type(arg)=="table" then - local _mt=getmetatable(lib) or {} - local mt={} - table.merge(mt,arg) - table.merge(_mt,mt) - setmetatable(lib,_mt) - elseif dat=="compat" then - lib["getVersion"]=function(self) return self.Version[1].."."..self.Version[2].."."..self.Version[3] end - if not lib.Version then - lib.Version={1,0,0} - end - elseif dat=="inhert" then - if not(lib["!%"..arg.."%!"]) then print("Wrong Password!!") return end - lib["!%"..arg.."%!"].__index=lib["!!%"..arg.."%!!"] - end - elseif type(dat)=="function" then - for i,v in pairs(lib) do - dat(lib,i,v) - end - end - elseif type(lib)=="function" or type(lib)=="userdata" then - if lib==unpack then - print("function unpack cannot yet be injected!") - return unpack - elseif lib==pairs then - print("function pairs cannot yet be injected!") - return lib - elseif lib==ipairs then - print("function ipairs cannot yet be injected!") - return lib - elseif lib==type then - print("function type cannot yet be injected!") - return lib - end - temp={} - local mt={ - __call=function(t,...) - local consume,MainRet,init={},{},{...} - local tt={} - for i=1,#t.__Link do - tt={} - if t.__Link[i]==t.__Main then - if #consume~=0 then - MainRet={t.__Link[i](unpack(consume))} - else - MainRet={t.__Link[i](unpack(init))} - end - else - if i==1 then - consume=(t.__Link[i](unpack(init))) - else - if type(MainRet)=="table" then - table.merge(tt,MainRet) - end - if type(consume)=="table" then - table.merge(tt,consume) - end - consume={t.__Link[i](unpack(tt))} - end - if i==#t.__Link then - return unpack(consume) - end - if consume then if consume[0]=="\1\7\6\3\2\99\125" then consume[0]=nil return unpack(consume) end end - end - end - if type(MainRet)=="table" then - table.merge(tt,MainRet) - end - if type(consume)=="table" then - table.merge(tt,consume) - end - return unpack(tt) - end, - } - temp.__Link={lib} - temp.__Main=lib - temp.__self=temp - function temp:inject(func,i) - if i then - table.insert(self.__Link,i,func) - else - table.insert(self.__Link,func) - end - end - function temp:consume(func) - for i=1,#self.__Link do - if self.__Link[i]==self.__Main then - self.__Link[i]=func - self.__self.__Main=func - return true - end - end - return false - end - setmetatable(temp,mt) - Library.protect(temp,"lolz") - return temp - else - return "arg1 must be a table or a function" - end -end -function Library.parse(lib) - for i,v in pairs(lib) do - print(i,v) - end -end -function Library.protect(lib,pass) - pass=pass or "*" - local mt={} - local test={ - __index = lib, - __newindex = function(tab, key, value) - local t,b=key:find(tab["!%"..pass.."%!"].__pass,1,true) - if t then - local _k=key:sub(b+1) - rawset(tab,_k,value) - else - error("Cannot alter a protected library!") - end - end, - __metatable = false, - __pass=pass or "*" - } - local _mt=getmetatable(lib) or {} - table.merge(mt,_mt) - table.merge(mt,test) - lib["!%"..pass.."%!"]=test - lib["!!%"..pass.."%!!"]=lib - local temp=setmetatable({},mt) - for i,v in pairs(_G) do - if v==lib then - _G[i]=temp - Library(function(link) - link[i]=v - end) - end - end -end -function Library.unprotect(lib,pass) - if not(lib["!%"..pass.."%!"]) then print("Wrong Password or Library is not Protected!") return end - if lib["!%"..pass.."%!"].__pass==pass then - lib["!%"..pass.."%!"].__newindex=lib["!!%"..pass.."%!!"] - lib["!%"..pass.."%!"].__index=nil - lib["!%"..pass.."%!"].__newindex=nil - lib["!%"..pass.."%!"].__metatable = true - setmetatable(lib["!!%"..pass.."%!!"],lib["!%"..pass.."%!"]) - for i,v in pairs(_G) do - if v==lib then - _G[i]=lib["!!%"..pass.."%!!"] - end - end - lib["!!%"..pass.."%!!"]["!%"..pass.."%!"]=nil - lib["!!%"..pass.."%!!"]["!!%"..pass.."%!!"]=nil - else - print("Wrong Password!!!") - end -end -function Library.addPoll(lib,polldata,ref) - lib.__polldata={} - Library.inject(lib.__polldata,polldata) - if type(ref)=="table" then - Library.inject(ref,"meta",{__newindex=function(t,k,v) - t[k].__polldata=polldata - end}) - end -end -function Library.newPollData(t) - local temp={} - temp.__onPolled=function() end - temp.__pollData=false - temp.__advDisc="" - temp.__pollcalls=-1 -- infinte - for i,v in pairs(t) do - if type(v)=="string" then - temp.__advDisc=v - elseif type(v)=="number" then - temp.__pollcalls=v - elseif type(v)=="table" then - temp[v[1]]=v[2] - elseif type(v)=="function" then - temp.__onPolled=v - elseif type(v)=="boolean" then - temp.__pollData=v - else - temp.__userdata=v - end - end - return temp -end -function Library.convert(...) - local temp,rets={...},{} - for i=1,#temp do - if type(temp[i])=="function" then - table.insert(rets,Library.inject(temp[i])) - else - error("Takes only functions and returns in order from functions given. arg # "..i.." is not a function!!! It is a "..type(temp[i])) - end - end - return unpack(rets) -end -function Library.convertIn(...) - local temp,list={...},{} - for i=1,#temp do - if type(temp[i])=="table" then - for k,v in pairs(temp[i]) do - if type(v)=="function" then - temp[i][k]=Library.inject(temp[i][k]) - end - end - else - error("Takes only tables! Arg "..i.." isn't it is a "..type(temp[i])) - end - end -end -function Library.newInjectedFunction() - return Library.convert(function(...) return unpack{...} end) -end -function Library.capulate(lib) - Library.inject(lib,"meta",{ - __index=function(t,k,v) - for i,_v in pairs(t) do - if k:lower()==i:lower() then - return t[i] - end - end - end, - __newindex=function(t,k,v) - rawset(t,k:lower(),v) - end - }) -end -local link={MainLibrary=Library} -Library.inject(Library,"meta",{ - __Link=link, - __call=function(self,func) func(link) end, -}) ---Library.protect(Library,"N@#P!KLkk1(93320") diff --git a/examples/love2d Threading Example/core/README.txt b/examples/love2d Threading Example/core/README.txt deleted file mode 100644 index 02b5fb6..0000000 --- a/examples/love2d Threading Example/core/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -These libraries Namely the MultiManager, bin, and the Library, libraries will be documented because i plan on sharing them -everything else will mostlikely not be documented \ No newline at end of file diff --git a/examples/love2d Threading Example/core/T1.lua b/examples/love2d Threading Example/core/T1.lua deleted file mode 100644 index f861efa..0000000 --- a/examples/love2d Threading Example/core/T1.lua +++ /dev/null @@ -1,598 +0,0 @@ -require("love.timer") -require("love.system") -require("love.sound") -require("love.physics") -require("love.mouse") -require("love.math") -require("love.keyboard") -require("love.joystick") -require("love.image") -require("love.font") -require("love.filesystem") -require("love.event") -require("love.audio") -require("love.graphics") -require("love.window") -_defaultfont = love.graphics.getFont() -gui = {} -function gui.getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="userdata" then - -- do nothing - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end -multi = {} -multi.Version="4.0.0" -multi.__index = multi -multi.Mainloop={} -multi.Tasks={} -multi.Tasks2={} -multi.Garbage={} -multi.Children={} -multi.Paused={} -multi.MasterId=0 -multi.Active=true -multi.Id=-1 -multi.Type="MainInt" -multi.Rest=0 --- System -os.sleep=love.timer.sleep -function multi:newBase(ins) - if not(self.Type=="MainInt" or self.Type=="int") then error("Can only create an object on multi or an interface obj") return false end - local c = {} - if self.Type=="int" then - setmetatable(c, self.Parent) - else - setmetatable(c, self) - end - c.Active=true - c.func={} - c.Id=0 - c.Act=function() end - c.Parent=self - if ins then - table.insert(self.Mainloop,ins,c) - else - table.insert(self.Mainloop,c) - end - self.MasterId=self.MasterId+1 - return c -end -function multi:reboot(r) - self.Mainloop={} - self.Tasks={} - self.Tasks2={} - self.Garbage={} - self.Children={} - self.Paused={} - self.MasterId=0 - self.Active=true - self.Id=-1 - if r then - for i,v in pairs(_G) do - if type(i)=="table" then - if i.Parent and i.Id and i.Act then - i={} - end - end - end - end -end -function multi:getChildren() - return self.Mainloop -end ---Processor -function multi:Do_Order() - for _D=#self.Mainloop,1,-1 do - if self.Mainloop[_D]~=nil then - self.Mainloop[_D].Id=_D - self.Mainloop[_D]:Act() - end - if self.Mainloop[_D].rem then - table.remove(self.Mainloop,_D) - end - end - if self.Rest>0 then - os.sleep(self.Rest) - end -end -function multi:benchMark(sec) - local temp=self:newLoop(function(t,self) - if os.clock()-self.init>self.sec then - print(self.c.." steps in "..self.sec.." second(s)") - self.tt(self.sec) - self:Destroy() - else - self.c=self.c+1 - end - end) - function temp:OnBench(func) - self.tt=func - end - self.tt=function() end - temp.sec=sec - temp.init=os.clock() - temp.c=0 - return temp -end -function multi:newInterface() - if not(self.Type=="MainInt") then error("Can only create an interface on the multi obj") return false end - local c = {} - setmetatable(c, self) - c.Parent=self - c.Active=true - c.func={} - c.Id=0 - c.Type="int" - c.Mainloop={} - c.Tasks={} - c.Tasks2={} - c.Garbage={} - c.Children={} - c.Paused={} - c.MasterId=0 - c.Active=true - c.Id=-1 - c.Rest=0 - function c:Start() - if self.l then - self.l:Resume() - else - self.l=self.Parent:newLoop(function(dt) c:uManager(dt) end) - end - end - function c:Stop() - if self.l then - self.l:Pause() - end - end - function c:Remove() - self:Destroy() - self.l:Destroy() - end - return c -end ---Helpers -function multi:FreeMainEvent() - self.func={} -end -function multi:isPaused() - return not(self.Active) -end -function multi:Pause(n) - if self.Type=="int" or self.Type=="MainInt" then - self.Active=false - if not(n) then - local c=self:getChildren() - for i=1,#c do - c[i]:Pause() - end - else - self:hold(n) - end - else - if not(n) then - self.Active=false - if self.Parent.Mainloop[self.Id]~=nil then - table.remove(self.Parent.Mainloop,self.Id) - table.insert(self.Parent.Paused,self) - self.Id=#self.Parent.Paused - end - else - self:hold(n) - end - end -end -function multi:Resume() - if self.Type=="int" or self.Type=="MainInt" then - self.Active=true - local c=self:getChildren() - for i=1,#c do - c[i]:Resume() - end - else - if self:isPaused() then - self.Active=true - for i=1,#self.Parent.Paused do - if self.Parent.Paused[i]==self then - table.remove(self.Parent.Paused,i) - return - end - end - table.insert(self.Parent.Mainloop,self) - end - end -end -function multi:Destroy() - if self.Type=="int" or self.Type=="MainInt" then - local c=self:getChildren() - for i=1,#c do - c[i]:Destroy() - end - else - self.rem=true - end -end -function multi:hold(task) - self:Pause() - if type(task)=="number" then - local alarm=self:newAlarm(task) - while alarm.Active==true do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - alarm:Destroy() - self:Resume() - elseif type(task)=="function" then - local env=self.Parent:newEvent(task) - env:OnEvent(function(envt) envt:Pause() envt:Stop() end) - while env.Active do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - env:Destroy() - self:Resume() - else - print("Error Data Type!!!") - end -end -function multi:oneTime(func,...) - if not(self.Type=="MainInt" or self.Type=="int") then - for _k=1,#self.Parent.Tasks2 do - if self.Parent.Tasks2[_k]==func then - return false - end - end - table.insert(self.Parent.Tasks2,func) - func(...) - return true - else - for _k=1,#self.Tasks2 do - if self.Tasks2[_k]==func then - return false - end - end - table.insert(self.Tasks2,func) - func(...) - return true - end -end ---Constructors -function multi:newEvent(task) - local c=self:newBase() - c.Type="Event" - c.Task=task or function() end - function c:Act() - if self.Task(self) and self.Active==true then - self:Pause() - for _E=1,#self.func do - self.func[_E](self) - end - end - end - function c:OnEvent(func) - table.insert(self.func,func) - end - return c -end -function multi:newAlarm(set) - local c=self:newBase() - c.Type="Alarm" - c.timer=os.clock() - c.set=set or 0 - function c:Act() - if self.Active==true then - if os.clock()-self.timer>=self.set then - self:Pause() - for i=1,#self.func do - self.func[i](self) - end - end - end - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnRing(func) - table.insert(self.func,func) - end - return c -end -function multi:newTask(func) - table.insert(self.Tasks,func) -end -function multi:newLoop(func) - local c=self:newBase() - c.Type="Loop" - if func then - c.func={func} - end - function c:Act() - if self.Active==true then - for i=1,#self.func do - self.func[i](os.clock()-self.Parent.Start,self) - end - end - end - function c:OnLoop(func) - table.insert(self.func,func) - end - return c -end -function multi:newStep(start,reset,count,skip) - local c=self:newBase() - think=1 - c.Type="Step" - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Act() - if self~=nil then - if self.spos==0 then - if self.Active==true then - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c:OnStep(function(p,s) - if s.count>0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - elseif s.count<0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - end - end) - return c -end -function multi:newTStep(start,reset,count,set) - local c=self:newBase() - think=1 - c.Type="TStep" - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:Act() - if self.Active then - if os.clock()-self.timer>=self.set then - self:Reset() - for i=1,#self.func do - self.func[i](self.pos,self) - end - if self.endAt==self.pos then - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start-1 - end - self.pos=self.pos+self.count - end - end - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnStep(func) - table.insert(self.func,func) - end - return c -end -function multi:newTrigger(func) - local c=self:newBase() - c.Type="Trigger" - c.trigfunc=func or function() end - function c:Fire(...) - self:trigfunc(self,...) - end - return c -end ---Managers -function multi:mainloop() - for i=1,#self.Tasks do - self.Tasks[i](self) - end - self.Start=os.clock() - while self.Active do - self:Do_Order() - end -end -function multi._tFunc(self,dt) - for i=1,#self.Tasks do - self.Tasks[i](self) - end - print("once!") - if dt then - self.pump=true - end - self.pumpvar=dt - self.Start=os.clock() -end -function multi:uManager(dt) - self:oneTime(self._tFunc,self,dt) - self:Do_Order() -end -multi.drawF={} -function multi:dManager() - for ii=1,#multi.drawF do - multi.drawF[ii]() - end -end -function multi:onDraw(func) - table.insert(self.drawF,func) -end -function multi:lManager() - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return nil - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end -end -Thread={} -Thread.Name="Thread 1" -Thread.ChannelThread = love.thread.getChannel("Easy1") -Thread.ChannelMain = love.thread.getChannel("EasyMain") -Thread.Global = {} -function Thread:packTable(G) - function escapeStr(str) - local temp="" - for i=1,#str do - temp=temp.."\\"..string.byte(string.sub(str,i,i)) - end - return temp - end - function ToStr(t) - local dat="{" - for i,v in pairs(t) do - if type(i)=="number" then - i="["..i.."]=" - else - i=i.."=" - end - if type(v)=="string" then - dat=dat..i.."\""..v.."\"," - elseif type(v)=="number" then - dat=dat..i..v.."," - elseif type(v)=="boolean" then - dat=dat..i..tostring(v).."," - elseif type(v)=="table" and not(G==v) then - dat=dat..i..ToStr(v).."," - --elseif type(v)=="table" and G==v then - -- dat=dat..i.."assert(loadstring(\"return self\"))," - elseif type(v)=="function" then - dat=dat..i.."assert(loadstring(\""..escapeStr(string.dump(v)).."\"))," - end - end - return string.sub(dat,1,-2).."}" - end - return "return "..ToStr(G) -end -function Thread:Send(name,var) - arg3="1" - if type(var)=="table" then - var=Thread:packTable(var) - arg3="table" - end - self.ChannelMain:push({name,var,arg3}) -end -function Thread:UnPackChannel() - local c=self.ChannelThread:getCount() - for i=1,c do - local temp=self.ChannelThread:pop() - if temp[1] and temp[2] then - if temp[1]=="func" and type(temp[2])=="string" then - loadstring(temp[2])(temp[3]) - elseif temp[1]=="table" then - _G[temp[3]]=loadstring(temp[2])() - else - _G[temp[1]]=temp[2] - end - end - end - if #multi:getChildren()<2 then - os.sleep(.05) - end -end -function Thread:boost(func,name) - self:Send(name,string.dump(func)) -end -function Thread.mainloop() - Thread:UnPackChannel() -end -Thread.MainThread=false -multi:newLoop():OnLoop(Thread.mainloop) -multi:mainloop() diff --git a/examples/love2d Threading Example/core/T2.lua b/examples/love2d Threading Example/core/T2.lua deleted file mode 100644 index 44e2fbf..0000000 --- a/examples/love2d Threading Example/core/T2.lua +++ /dev/null @@ -1,598 +0,0 @@ -require("love.timer") -require("love.system") -require("love.sound") -require("love.physics") -require("love.mouse") -require("love.math") -require("love.keyboard") -require("love.joystick") -require("love.image") -require("love.font") -require("love.filesystem") -require("love.event") -require("love.audio") -require("love.graphics") -require("love.window") -_defaultfont = love.graphics.getFont() -gui = {} -function gui.getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="userdata" then - -- do nothing - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end -multi = {} -multi.Version="4.0.0" -multi.__index = multi -multi.Mainloop={} -multi.Tasks={} -multi.Tasks2={} -multi.Garbage={} -multi.Children={} -multi.Paused={} -multi.MasterId=0 -multi.Active=true -multi.Id=-1 -multi.Type="MainInt" -multi.Rest=0 --- System -os.sleep=love.timer.sleep -function multi:newBase(ins) - if not(self.Type=="MainInt" or self.Type=="int") then error("Can only create an object on multi or an interface obj") return false end - local c = {} - if self.Type=="int" then - setmetatable(c, self.Parent) - else - setmetatable(c, self) - end - c.Active=true - c.func={} - c.Id=0 - c.Act=function() end - c.Parent=self - if ins then - table.insert(self.Mainloop,ins,c) - else - table.insert(self.Mainloop,c) - end - self.MasterId=self.MasterId+1 - return c -end -function multi:reboot(r) - self.Mainloop={} - self.Tasks={} - self.Tasks2={} - self.Garbage={} - self.Children={} - self.Paused={} - self.MasterId=0 - self.Active=true - self.Id=-1 - if r then - for i,v in pairs(_G) do - if type(i)=="table" then - if i.Parent and i.Id and i.Act then - i={} - end - end - end - end -end -function multi:getChildren() - return self.Mainloop -end ---Processor -function multi:Do_Order() - for _D=#self.Mainloop,1,-1 do - if self.Mainloop[_D]~=nil then - self.Mainloop[_D].Id=_D - self.Mainloop[_D]:Act() - end - if self.Mainloop[_D].rem then - table.remove(self.Mainloop,_D) - end - end - if self.Rest>0 then - os.sleep(self.Rest) - end -end -function multi:benchMark(sec) - local temp=self:newLoop(function(t,self) - if os.clock()-self.init>self.sec then - print(self.c.." steps in "..self.sec.." second(s)") - self.tt(self.sec) - self:Destroy() - else - self.c=self.c+1 - end - end) - function temp:OnBench(func) - self.tt=func - end - self.tt=function() end - temp.sec=sec - temp.init=os.clock() - temp.c=0 - return temp -end -function multi:newInterface() - if not(self.Type=="MainInt") then error("Can only create an interface on the multi obj") return false end - local c = {} - setmetatable(c, self) - c.Parent=self - c.Active=true - c.func={} - c.Id=0 - c.Type="int" - c.Mainloop={} - c.Tasks={} - c.Tasks2={} - c.Garbage={} - c.Children={} - c.Paused={} - c.MasterId=0 - c.Active=true - c.Id=-1 - c.Rest=0 - function c:Start() - if self.l then - self.l:Resume() - else - self.l=self.Parent:newLoop(function(dt) c:uManager(dt) end) - end - end - function c:Stop() - if self.l then - self.l:Pause() - end - end - function c:Remove() - self:Destroy() - self.l:Destroy() - end - return c -end ---Helpers -function multi:FreeMainEvent() - self.func={} -end -function multi:isPaused() - return not(self.Active) -end -function multi:Pause(n) - if self.Type=="int" or self.Type=="MainInt" then - self.Active=false - if not(n) then - local c=self:getChildren() - for i=1,#c do - c[i]:Pause() - end - else - self:hold(n) - end - else - if not(n) then - self.Active=false - if self.Parent.Mainloop[self.Id]~=nil then - table.remove(self.Parent.Mainloop,self.Id) - table.insert(self.Parent.Paused,self) - self.Id=#self.Parent.Paused - end - else - self:hold(n) - end - end -end -function multi:Resume() - if self.Type=="int" or self.Type=="MainInt" then - self.Active=true - local c=self:getChildren() - for i=1,#c do - c[i]:Resume() - end - else - if self:isPaused() then - self.Active=true - for i=1,#self.Parent.Paused do - if self.Parent.Paused[i]==self then - table.remove(self.Parent.Paused,i) - return - end - end - table.insert(self.Parent.Mainloop,self) - end - end -end -function multi:Destroy() - if self.Type=="int" or self.Type=="MainInt" then - local c=self:getChildren() - for i=1,#c do - c[i]:Destroy() - end - else - self.rem=true - end -end -function multi:hold(task) - self:Pause() - if type(task)=="number" then - local alarm=self:newAlarm(task) - while alarm.Active==true do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - alarm:Destroy() - self:Resume() - elseif type(task)=="function" then - local env=self.Parent:newEvent(task) - env:OnEvent(function(envt) envt:Pause() envt:Stop() end) - while env.Active do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - env:Destroy() - self:Resume() - else - print("Error Data Type!!!") - end -end -function multi:oneTime(func,...) - if not(self.Type=="MainInt" or self.Type=="int") then - for _k=1,#self.Parent.Tasks2 do - if self.Parent.Tasks2[_k]==func then - return false - end - end - table.insert(self.Parent.Tasks2,func) - func(...) - return true - else - for _k=1,#self.Tasks2 do - if self.Tasks2[_k]==func then - return false - end - end - table.insert(self.Tasks2,func) - func(...) - return true - end -end ---Constructors -function multi:newEvent(task) - local c=self:newBase() - c.Type="Event" - c.Task=task or function() end - function c:Act() - if self.Task(self) and self.Active==true then - self:Pause() - for _E=1,#self.func do - self.func[_E](self) - end - end - end - function c:OnEvent(func) - table.insert(self.func,func) - end - return c -end -function multi:newAlarm(set) - local c=self:newBase() - c.Type="Alarm" - c.timer=os.clock() - c.set=set or 0 - function c:Act() - if self.Active==true then - if os.clock()-self.timer>=self.set then - self:Pause() - for i=1,#self.func do - self.func[i](self) - end - end - end - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnRing(func) - table.insert(self.func,func) - end - return c -end -function multi:newTask(func) - table.insert(self.Tasks,func) -end -function multi:newLoop(func) - local c=self:newBase() - c.Type="Loop" - if func then - c.func={func} - end - function c:Act() - if self.Active==true then - for i=1,#self.func do - self.func[i](os.clock()-self.Parent.Start,self) - end - end - end - function c:OnLoop(func) - table.insert(self.func,func) - end - return c -end -function multi:newStep(start,reset,count,skip) - local c=self:newBase() - think=1 - c.Type="Step" - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Act() - if self~=nil then - if self.spos==0 then - if self.Active==true then - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c:OnStep(function(p,s) - if s.count>0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - elseif s.count<0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - end - end) - return c -end -function multi:newTStep(start,reset,count,set) - local c=self:newBase() - think=1 - c.Type="TStep" - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:Act() - if self.Active then - if os.clock()-self.timer>=self.set then - self:Reset() - for i=1,#self.func do - self.func[i](self.pos,self) - end - if self.endAt==self.pos then - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start-1 - end - self.pos=self.pos+self.count - end - end - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnStep(func) - table.insert(self.func,func) - end - return c -end -function multi:newTrigger(func) - local c=self:newBase() - c.Type="Trigger" - c.trigfunc=func or function() end - function c:Fire(...) - self:trigfunc(self,...) - end - return c -end ---Managers -function multi:mainloop() - for i=1,#self.Tasks do - self.Tasks[i](self) - end - self.Start=os.clock() - while self.Active do - self:Do_Order() - end -end -function multi._tFunc(self,dt) - for i=1,#self.Tasks do - self.Tasks[i](self) - end - print("once!") - if dt then - self.pump=true - end - self.pumpvar=dt - self.Start=os.clock() -end -function multi:uManager(dt) - self:oneTime(self._tFunc,self,dt) - self:Do_Order() -end -multi.drawF={} -function multi:dManager() - for ii=1,#multi.drawF do - multi.drawF[ii]() - end -end -function multi:onDraw(func) - table.insert(self.drawF,func) -end -function multi:lManager() - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return nil - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end -end -Thread={} -Thread.Name="Thread 2" -Thread.ChannelThread = love.thread.getChannel("Easy2") -Thread.ChannelMain = love.thread.getChannel("EasyMain") -Thread.Global = {} -function Thread:packTable(G) - function escapeStr(str) - local temp="" - for i=1,#str do - temp=temp.."\\"..string.byte(string.sub(str,i,i)) - end - return temp - end - function ToStr(t) - local dat="{" - for i,v in pairs(t) do - if type(i)=="number" then - i="["..i.."]=" - else - i=i.."=" - end - if type(v)=="string" then - dat=dat..i.."\""..v.."\"," - elseif type(v)=="number" then - dat=dat..i..v.."," - elseif type(v)=="boolean" then - dat=dat..i..tostring(v).."," - elseif type(v)=="table" and not(G==v) then - dat=dat..i..ToStr(v).."," - --elseif type(v)=="table" and G==v then - -- dat=dat..i.."assert(loadstring(\"return self\"))," - elseif type(v)=="function" then - dat=dat..i.."assert(loadstring(\""..escapeStr(string.dump(v)).."\"))," - end - end - return string.sub(dat,1,-2).."}" - end - return "return "..ToStr(G) -end -function Thread:Send(name,var) - arg3="2" - if type(var)=="table" then - var=Thread:packTable(var) - arg3="table" - end - self.ChannelMain:push({name,var,arg3}) -end -function Thread:UnPackChannel() - local c=self.ChannelThread:getCount() - for i=1,c do - local temp=self.ChannelThread:pop() - if temp[1] and temp[2] then - if temp[1]=="func" and type(temp[2])=="string" then - loadstring(temp[2])(temp[3]) - elseif temp[1]=="table" then - _G[temp[3]]=loadstring(temp[2])() - else - _G[temp[1]]=temp[2] - end - end - end - if #multi:getChildren()<2 then - os.sleep(.05) - end -end -function Thread:boost(func,name) - self:Send(name,string.dump(func)) -end -function Thread.mainloop() - Thread:UnPackChannel() -end -Thread.MainThread=false -multi:newLoop():OnLoop(Thread.mainloop) -multi:mainloop() diff --git a/examples/love2d Threading Example/core/T3.lua b/examples/love2d Threading Example/core/T3.lua deleted file mode 100644 index 171eff0..0000000 --- a/examples/love2d Threading Example/core/T3.lua +++ /dev/null @@ -1,596 +0,0 @@ -require("love.timer") -require("love.system") -require("love.sound") -require("love.physics") -require("love.mouse") -require("love.math") -require("love.keyboard") -require("love.joystick") -require("love.image") -require("love.font") -require("love.filesystem") -require("love.event") -require("love.audio") -require("love.graphics") -require("love.window") -_defaultfont = love.graphics.getFont() -gui = {} -function gui.getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="userdata" then - -- do nothing - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end -multi = {} -multi.Version="4.0.0" -multi.__index = multi -multi.Mainloop={} -multi.Tasks={} -multi.Tasks2={} -multi.Garbage={} -multi.Children={} -multi.Paused={} -multi.MasterId=0 -multi.Active=true -multi.Id=-1 -multi.Type="MainInt" -multi.Rest=0 --- System -os.sleep=love.timer.sleep -function multi:newBase(ins) - if not(self.Type=="MainInt" or self.Type=="int") then error("Can only create an object on multi or an interface obj") return false end - local c = {} - if self.Type=="int" then - setmetatable(c, self.Parent) - else - setmetatable(c, self) - end - c.Active=true - c.func={} - c.Id=0 - c.Act=function() end - c.Parent=self - if ins then - table.insert(self.Mainloop,ins,c) - else - table.insert(self.Mainloop,c) - end - self.MasterId=self.MasterId+1 - return c -end -function multi:reboot(r) - self.Mainloop={} - self.Tasks={} - self.Tasks2={} - self.Garbage={} - self.Children={} - self.Paused={} - self.MasterId=0 - self.Active=true - self.Id=-1 - if r then - for i,v in pairs(_G) do - if type(i)=="table" then - if i.Parent and i.Id and i.Act then - i={} - end - end - end - end -end -function multi:getChildren() - return self.Mainloop -end ---Processor -function multi:Do_Order() - for _D=#self.Mainloop,1,-1 do - if self.Mainloop[_D]~=nil then - self.Mainloop[_D].Id=_D - self.Mainloop[_D]:Act() - end - if self.Mainloop[_D].rem then - table.remove(self.Mainloop,_D) - end - end - if self.Rest>0 then - os.sleep(self.Rest) - end -end -function multi:benchMark(sec) - local temp=self:newLoop(function(t,self) - if os.clock()-self.init>self.sec then - print(self.c.." steps in "..self.sec.." second(s)") - self.tt(self.sec) - self:Destroy() - else - self.c=self.c+1 - end - end) - function temp:OnBench(func) - self.tt=func - end - self.tt=function() end - temp.sec=sec - temp.init=os.clock() - temp.c=0 - return temp -end -function multi:newInterface() - if not(self.Type=="MainInt") then error("Can only create an interface on the multi obj") return false end - local c = {} - setmetatable(c, self) - c.Parent=self - c.Active=true - c.func={} - c.Id=0 - c.Type="int" - c.Mainloop={} - c.Tasks={} - c.Tasks2={} - c.Garbage={} - c.Children={} - c.Paused={} - c.MasterId=0 - c.Active=true - c.Id=-1 - c.Rest=0 - function c:Start() - if self.l then - self.l:Resume() - else - self.l=self.Parent:newLoop(function(dt) c:uManager(dt) end) - end - end - function c:Stop() - if self.l then - self.l:Pause() - end - end - function c:Remove() - self:Destroy() - self.l:Destroy() - end - return c -end ---Helpers -function multi:FreeMainEvent() - self.func={} -end -function multi:isPaused() - return not(self.Active) -end -function multi:Pause(n) - if self.Type=="int" or self.Type=="MainInt" then - self.Active=false - if not(n) then - local c=self:getChildren() - for i=1,#c do - c[i]:Pause() - end - else - self:hold(n) - end - else - if not(n) then - self.Active=false - if self.Parent.Mainloop[self.Id]~=nil then - table.remove(self.Parent.Mainloop,self.Id) - table.insert(self.Parent.Paused,self) - self.Id=#self.Parent.Paused - end - else - self:hold(n) - end - end -end -function multi:Resume() - if self.Type=="int" or self.Type=="MainInt" then - self.Active=true - local c=self:getChildren() - for i=1,#c do - c[i]:Resume() - end - else - if self:isPaused() then - self.Active=true - for i=1,#self.Parent.Paused do - if self.Parent.Paused[i]==self then - table.remove(self.Parent.Paused,i) - return - end - end - table.insert(self.Parent.Mainloop,self) - end - end -end -function multi:Destroy() - if self.Type=="int" or self.Type=="MainInt" then - local c=self:getChildren() - for i=1,#c do - c[i]:Destroy() - end - else - self.rem=true - end -end -function multi:hold(task) - self:Pause() - if type(task)=="number" then - local alarm=self:newAlarm(task) - while alarm.Active==true do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - alarm:Destroy() - self:Resume() - elseif type(task)=="function" then - local env=self.Parent:newEvent(task) - env:OnEvent(function(envt) envt:Pause() envt:Stop() end) - while env.Active do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - env:Destroy() - self:Resume() - else - print("Error Data Type!!!") - end -end -function multi:oneTime(func,...) - if not(self.Type=="MainInt" or self.Type=="int") then - for _k=1,#self.Parent.Tasks2 do - if self.Parent.Tasks2[_k]==func then - return false - end - end - table.insert(self.Parent.Tasks2,func) - func(...) - return true - else - for _k=1,#self.Tasks2 do - if self.Tasks2[_k]==func then - return false - end - end - table.insert(self.Tasks2,func) - func(...) - return true - end -end ---Constructors -function multi:newEvent(task) - local c=self:newBase() - c.Type="Event" - c.Task=task or function() end - function c:Act() - if self.Task(self) and self.Active==true then - self:Pause() - for _E=1,#self.func do - self.func[_E](self) - end - end - end - function c:OnEvent(func) - table.insert(self.func,func) - end - return c -end -function multi:newAlarm(set) - local c=self:newBase() - c.Type="Alarm" - c.timer=os.clock() - c.set=set or 0 - function c:Act() - if self.Active==true then - if os.clock()-self.timer>=self.set then - self:Pause() - for i=1,#self.func do - self.func[i](self) - end - end - end - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnRing(func) - table.insert(self.func,func) - end - return c -end -function multi:newTask(func) - table.insert(self.Tasks,func) -end -function multi:newLoop(func) - local c=self:newBase() - c.Type="Loop" - if func then - c.func={func} - end - function c:Act() - if self.Active==true then - for i=1,#self.func do - self.func[i](os.clock()-self.Parent.Start,self) - end - end - end - function c:OnLoop(func) - table.insert(self.func,func) - end - return c -end -function multi:newStep(start,reset,count,skip) - local c=self:newBase() - think=1 - c.Type="Step" - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Act() - if self~=nil then - if self.spos==0 then - if self.Active==true then - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c:OnStep(function(p,s) - if s.count>0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - elseif s.count<0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - end - end) - return c -end -function multi:newTStep(start,reset,count,set) - local c=self:newBase() - think=1 - c.Type="TStep" - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:Act() - if self.Active then - if os.clock()-self.timer>=self.set then - self:Reset() - for i=1,#self.func do - self.func[i](self.pos,self) - end - if self.endAt==self.pos then - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start-1 - end - self.pos=self.pos+self.count - end - end - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnStep(func) - table.insert(self.func,func) - end - return c -end -function multi:newTrigger(func) - local c=self:newBase() - c.Type="Trigger" - c.trigfunc=func or function() end - function c:Fire(...) - self:trigfunc(self,...) - end - return c -end ---Managers -function multi:mainloop() - for i=1,#self.Tasks do - self.Tasks[i](self) - end - self.Start=os.clock() - while self.Active do - self:Do_Order() - end -end -function multi._tFunc(self,dt) - for i=1,#self.Tasks do - self.Tasks[i](self) - end - print("once!") - if dt then - self.pump=true - end - self.pumpvar=dt - self.Start=os.clock() -end -function multi:uManager(dt) - self:oneTime(self._tFunc,self,dt) - self:Do_Order() -end -multi.drawF={} -function multi:dManager() - for ii=1,#multi.drawF do - multi.drawF[ii]() - end -end -function multi:onDraw(func) - table.insert(self.drawF,func) -end -function multi:lManager() - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return nil - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end -end -Thread={} -Thread.Name="Thread 3" -Thread.ChannelThread = love.thread.getChannel("Easy3") -Thread.ChannelMain = love.thread.getChannel("EasyMain") -Thread.Global = {} -function Thread:packTable(G) - function escapeStr(str) - local temp="" - for i=1,#str do - temp=temp.."\\"..string.byte(string.sub(str,i,i)) - end - return temp - end - function ToStr(t) - local dat="{" - for i,v in pairs(t) do - if type(i)=="number" then - i="["..i.."]=" - else - i=i.."=" - end - if type(v)=="string" then - dat=dat..i.."\""..v.."\"," - elseif type(v)=="number" then - dat=dat..i..v.."," - elseif type(v)=="boolean" then - dat=dat..i..tostring(v).."," - elseif type(v)=="table" and not(G==v) then - dat=dat..i..ToStr(v).."," - --elseif type(v)=="table" and G==v then - -- dat=dat..i.."assert(loadstring(\"return self\"))," - elseif type(v)=="function" then - dat=dat..i.."assert(loadstring(\""..escapeStr(string.dump(v)).."\"))," - end - end - return string.sub(dat,1,-2).."}" - end - return "return "..ToStr(G) -end -function Thread:Send(name,var) - arg3="3" - if type(var)=="table" then - var=Thread:packTable(var) - arg3="table" - end - self.ChannelMain:push({name,var,arg3}) -end -function Thread:UnPackChannel() - local c=self.ChannelThread:getCount() - for i=1,c do - local temp=self.ChannelThread:pop() - if temp[1] and temp[2] then - if temp[1]=="func" and type(temp[2])=="string" then - loadstring(temp[2])(temp[3]) - else - _G[temp[1]]=temp[2] - end - end - end - if #multi:getChildren()<2 then - os.sleep(.05) - end -end -function Thread:boost(func,name) - self:Send(name,string.dump(func)) -end -function Thread.mainloop() - Thread:UnPackChannel() -end -Thread.MainThread=false -multi:newLoop():OnLoop(Thread.mainloop) -multi:mainloop() diff --git a/examples/love2d Threading Example/core/T4.lua b/examples/love2d Threading Example/core/T4.lua deleted file mode 100644 index a8d3203..0000000 --- a/examples/love2d Threading Example/core/T4.lua +++ /dev/null @@ -1,596 +0,0 @@ -require("love.timer") -require("love.system") -require("love.sound") -require("love.physics") -require("love.mouse") -require("love.math") -require("love.keyboard") -require("love.joystick") -require("love.image") -require("love.font") -require("love.filesystem") -require("love.event") -require("love.audio") -require("love.graphics") -require("love.window") -_defaultfont = love.graphics.getFont() -gui = {} -function gui.getTile(i,x,y,w,h)-- returns imagedata - if type(i)=="userdata" then - -- do nothing - else - error("getTile invalid args!!! Usage: ImageElement:getTile(x,y,w,h) or gui:getTile(imagedata,x,y,w,h)") - end - local iw,ih=i:getDimensions() - local id,_id=i:getData(),love.image.newImageData(w,h) - for _x=x,w+x-1 do - for _y=y,h+y-1 do - _id:setPixel(_x-x,_y-y,id:getPixel(_x,_y)) - end - end - return love.graphics.newImage(_id) -end -multi = {} -multi.Version="4.0.0" -multi.__index = multi -multi.Mainloop={} -multi.Tasks={} -multi.Tasks2={} -multi.Garbage={} -multi.Children={} -multi.Paused={} -multi.MasterId=0 -multi.Active=true -multi.Id=-1 -multi.Type="MainInt" -multi.Rest=0 --- System -os.sleep=love.timer.sleep -function multi:newBase(ins) - if not(self.Type=="MainInt" or self.Type=="int") then error("Can only create an object on multi or an interface obj") return false end - local c = {} - if self.Type=="int" then - setmetatable(c, self.Parent) - else - setmetatable(c, self) - end - c.Active=true - c.func={} - c.Id=0 - c.Act=function() end - c.Parent=self - if ins then - table.insert(self.Mainloop,ins,c) - else - table.insert(self.Mainloop,c) - end - self.MasterId=self.MasterId+1 - return c -end -function multi:reboot(r) - self.Mainloop={} - self.Tasks={} - self.Tasks2={} - self.Garbage={} - self.Children={} - self.Paused={} - self.MasterId=0 - self.Active=true - self.Id=-1 - if r then - for i,v in pairs(_G) do - if type(i)=="table" then - if i.Parent and i.Id and i.Act then - i={} - end - end - end - end -end -function multi:getChildren() - return self.Mainloop -end ---Processor -function multi:Do_Order() - for _D=#self.Mainloop,1,-1 do - if self.Mainloop[_D]~=nil then - self.Mainloop[_D].Id=_D - self.Mainloop[_D]:Act() - end - if self.Mainloop[_D].rem then - table.remove(self.Mainloop,_D) - end - end - if self.Rest>0 then - os.sleep(self.Rest) - end -end -function multi:benchMark(sec) - local temp=self:newLoop(function(t,self) - if os.clock()-self.init>self.sec then - print(self.c.." steps in "..self.sec.." second(s)") - self.tt(self.sec) - self:Destroy() - else - self.c=self.c+1 - end - end) - function temp:OnBench(func) - self.tt=func - end - self.tt=function() end - temp.sec=sec - temp.init=os.clock() - temp.c=0 - return temp -end -function multi:newInterface() - if not(self.Type=="MainInt") then error("Can only create an interface on the multi obj") return false end - local c = {} - setmetatable(c, self) - c.Parent=self - c.Active=true - c.func={} - c.Id=0 - c.Type="int" - c.Mainloop={} - c.Tasks={} - c.Tasks2={} - c.Garbage={} - c.Children={} - c.Paused={} - c.MasterId=0 - c.Active=true - c.Id=-1 - c.Rest=0 - function c:Start() - if self.l then - self.l:Resume() - else - self.l=self.Parent:newLoop(function(dt) c:uManager(dt) end) - end - end - function c:Stop() - if self.l then - self.l:Pause() - end - end - function c:Remove() - self:Destroy() - self.l:Destroy() - end - return c -end ---Helpers -function multi:FreeMainEvent() - self.func={} -end -function multi:isPaused() - return not(self.Active) -end -function multi:Pause(n) - if self.Type=="int" or self.Type=="MainInt" then - self.Active=false - if not(n) then - local c=self:getChildren() - for i=1,#c do - c[i]:Pause() - end - else - self:hold(n) - end - else - if not(n) then - self.Active=false - if self.Parent.Mainloop[self.Id]~=nil then - table.remove(self.Parent.Mainloop,self.Id) - table.insert(self.Parent.Paused,self) - self.Id=#self.Parent.Paused - end - else - self:hold(n) - end - end -end -function multi:Resume() - if self.Type=="int" or self.Type=="MainInt" then - self.Active=true - local c=self:getChildren() - for i=1,#c do - c[i]:Resume() - end - else - if self:isPaused() then - self.Active=true - for i=1,#self.Parent.Paused do - if self.Parent.Paused[i]==self then - table.remove(self.Parent.Paused,i) - return - end - end - table.insert(self.Parent.Mainloop,self) - end - end -end -function multi:Destroy() - if self.Type=="int" or self.Type=="MainInt" then - local c=self:getChildren() - for i=1,#c do - c[i]:Destroy() - end - else - self.rem=true - end -end -function multi:hold(task) - self:Pause() - if type(task)=="number" then - local alarm=self:newAlarm(task) - while alarm.Active==true do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - alarm:Destroy() - self:Resume() - elseif type(task)=="function" then - local env=self.Parent:newEvent(task) - env:OnEvent(function(envt) envt:Pause() envt:Stop() end) - while env.Active do - if love then - self.Parent.lManager() - else - self.Parent.Do_Order() - end - end - env:Destroy() - self:Resume() - else - print("Error Data Type!!!") - end -end -function multi:oneTime(func,...) - if not(self.Type=="MainInt" or self.Type=="int") then - for _k=1,#self.Parent.Tasks2 do - if self.Parent.Tasks2[_k]==func then - return false - end - end - table.insert(self.Parent.Tasks2,func) - func(...) - return true - else - for _k=1,#self.Tasks2 do - if self.Tasks2[_k]==func then - return false - end - end - table.insert(self.Tasks2,func) - func(...) - return true - end -end ---Constructors -function multi:newEvent(task) - local c=self:newBase() - c.Type="Event" - c.Task=task or function() end - function c:Act() - if self.Task(self) and self.Active==true then - self:Pause() - for _E=1,#self.func do - self.func[_E](self) - end - end - end - function c:OnEvent(func) - table.insert(self.func,func) - end - return c -end -function multi:newAlarm(set) - local c=self:newBase() - c.Type="Alarm" - c.timer=os.clock() - c.set=set or 0 - function c:Act() - if self.Active==true then - if os.clock()-self.timer>=self.set then - self:Pause() - for i=1,#self.func do - self.func[i](self) - end - end - end - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnRing(func) - table.insert(self.func,func) - end - return c -end -function multi:newTask(func) - table.insert(self.Tasks,func) -end -function multi:newLoop(func) - local c=self:newBase() - c.Type="Loop" - if func then - c.func={func} - end - function c:Act() - if self.Active==true then - for i=1,#self.func do - self.func[i](os.clock()-self.Parent.Start,self) - end - end - end - function c:OnLoop(func) - table.insert(self.func,func) - end - return c -end -function multi:newStep(start,reset,count,skip) - local c=self:newBase() - think=1 - c.Type="Step" - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Act() - if self~=nil then - if self.spos==0 then - if self.Active==true then - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c:OnStep(function(p,s) - if s.count>0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - elseif s.count<0 and s.endAt==p then - for fe=1,#s.funcE do - s.funcE[fe](s) - end - s.pos=s.start-1 - end - end) - return c -end -function multi:newTStep(start,reset,count,set) - local c=self:newBase() - think=1 - c.Type="TStep" - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:Act() - if self.Active then - if os.clock()-self.timer>=self.set then - self:Reset() - for i=1,#self.func do - self.func[i](self.pos,self) - end - if self.endAt==self.pos then - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start-1 - end - self.pos=self.pos+self.count - end - end - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - function c:OnStep(func) - table.insert(self.func,func) - end - return c -end -function multi:newTrigger(func) - local c=self:newBase() - c.Type="Trigger" - c.trigfunc=func or function() end - function c:Fire(...) - self:trigfunc(self,...) - end - return c -end ---Managers -function multi:mainloop() - for i=1,#self.Tasks do - self.Tasks[i](self) - end - self.Start=os.clock() - while self.Active do - self:Do_Order() - end -end -function multi._tFunc(self,dt) - for i=1,#self.Tasks do - self.Tasks[i](self) - end - print("once!") - if dt then - self.pump=true - end - self.pumpvar=dt - self.Start=os.clock() -end -function multi:uManager(dt) - self:oneTime(self._tFunc,self,dt) - self:Do_Order() -end -multi.drawF={} -function multi:dManager() - for ii=1,#multi.drawF do - multi.drawF[ii]() - end -end -function multi:onDraw(func) - table.insert(self.drawF,func) -end -function multi:lManager() - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return nil - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end -end -Thread={} -Thread.Name="Thread 4" -Thread.ChannelThread = love.thread.getChannel("Easy4") -Thread.ChannelMain = love.thread.getChannel("EasyMain") -Thread.Global = {} -function Thread:packTable(G) - function escapeStr(str) - local temp="" - for i=1,#str do - temp=temp.."\\"..string.byte(string.sub(str,i,i)) - end - return temp - end - function ToStr(t) - local dat="{" - for i,v in pairs(t) do - if type(i)=="number" then - i="["..i.."]=" - else - i=i.."=" - end - if type(v)=="string" then - dat=dat..i.."\""..v.."\"," - elseif type(v)=="number" then - dat=dat..i..v.."," - elseif type(v)=="boolean" then - dat=dat..i..tostring(v).."," - elseif type(v)=="table" and not(G==v) then - dat=dat..i..ToStr(v).."," - --elseif type(v)=="table" and G==v then - -- dat=dat..i.."assert(loadstring(\"return self\"))," - elseif type(v)=="function" then - dat=dat..i.."assert(loadstring(\""..escapeStr(string.dump(v)).."\"))," - end - end - return string.sub(dat,1,-2).."}" - end - return "return "..ToStr(G) -end -function Thread:Send(name,var) - arg3="4" - if type(var)=="table" then - var=Thread:packTable(var) - arg3="table" - end - self.ChannelMain:push({name,var,arg3}) -end -function Thread:UnPackChannel() - local c=self.ChannelThread:getCount() - for i=1,c do - local temp=self.ChannelThread:pop() - if temp[1] and temp[2] then - if temp[1]=="func" and type(temp[2])=="string" then - loadstring(temp[2])(temp[3]) - else - _G[temp[1]]=temp[2] - end - end - end - if #multi:getChildren()<2 then - os.sleep(.05) - end -end -function Thread:boost(func,name) - self:Send(name,string.dump(func)) -end -function Thread.mainloop() - Thread:UnPackChannel() -end -Thread.MainThread=false -multi:newLoop():OnLoop(Thread.mainloop) -multi:mainloop() diff --git a/examples/love2d Threading Example/core/ThreadManager.lua b/examples/love2d Threading Example/core/ThreadManager.lua deleted file mode 100644 index de6434d..0000000 --- a/examples/love2d Threading Example/core/ThreadManager.lua +++ /dev/null @@ -1,158 +0,0 @@ -Thread={} -Thread.ChannelT1 = love.thread.getChannel("Easy1") -Thread.ChannelT2 = love.thread.getChannel("Easy2") -Thread.ChannelT3 = love.thread.getChannel("Easy3") -Thread.ChannelT4 = love.thread.getChannel("Easy4") -Thread.ChannelMain = love.thread.getChannel("EasyMain") -Thread.Name = "Thread Main" -Thread.n=0 -Thread.count=1 -function Thread:packTable(G) - function escapeStr(str) - local temp="" - for i=1,#str do - temp=temp.."\\"..string.byte(string.sub(str,i,i)) - end - return temp - end - function ToStr(t) - local dat="{" - for i,v in pairs(t) do - if type(i)=="number" then - i="["..i.."]=" - else - i=i.."=" - end - if type(v)=="string" then - dat=dat..i.."\""..v.."\"," - elseif type(v)=="number" then - dat=dat..i..v.."," - elseif type(v)=="boolean" then - dat=dat..i..tostring(v).."," - elseif type(v)=="table" and not(G==v) then - dat=dat..i..bin.ToStr(v).."," - --elseif type(v)=="table" and G==v then - -- dat=dat..i.."assert(loadstring(\"return self\"))," - elseif type(v)=="function" then - dat=dat..i.."assert(loadstring(\""..escapeStr(string.dump(v)).."\"))," - end - end - return string.sub(dat,1,-2).."}" - end - return ToStr(G) -end -Thread.last={} -function Thread:GetStatus() - print(self.n.." Threads Exist!!!") - for i=1,self.n do - print("\tThread "..i.." Running: "..tostring(self["Thread"..i]:isRunning())) - if not(self["Thread"..i]:isRunning()) then - print("\t\t"..self["Thread"..i]:getError()) - end - end -end -function Thread:Start(n) - local x=love.system.getProcessorCount() - if x>1 then - x=x-1 - else - x=1 - end - n=n or x - if n<1 then - print("Must be atleast 1 thread running!!!") - return - end - if n>4 then - print("Must be no more than 4 threads running!!!") - return - end - for i=1,n do - self["Thread"..i]=love.thread.newThread("Libs/T"..i..".lua") - self["Thread"..i]:start() - end - Thread.n=n -end -function Thread:RestartBroken() - for i=1,self.n do - if self["Thread"..i]:isRunning()==false then - self["Thread"..i]:start() - end - Thread:Boost(Thread.last[1],Thread.last[2]) - end -end -function Thread:Send(name,var,arg3) - if self.n>0 then - if type(var)=="table" then - var=Thread:packTable(var) - arg3=name - name="table" - end - self["ChannelT"..((self.count-1)%self.n)+1]:push({name,var,arg3}) - self.count=self.count+1 - end -end -function Thread:SendAll(name,var,arg3) - if self.n>0 then - for i=1,self.n do - if type(var)=="table" then - var=Thread:packTable(var) - arg3=name - name="table" - end - self["ChannelT"..i]:push({name,var,arg3}) - end - end -end -function Thread:UnPackChannel() - local c=self.ChannelMain:getCount() - for i=1,c do - local temp=self.ChannelMain:pop() - if temp[3]=="table" then - _G[temp[1]]=assert(loadstring(temp[2]))() - else - if Thread.OnDataRecieved then - Thread.OnDataRecieved(temp[1],temp[2],temp[3]) - end - _G[temp[1]]=temp[2] - end - end -end -function Thread:Boost(func,name) - if Thread.last[1]==nil then - return - end - Thread.last={func,name} - name=name or "nil" - if self.n>0 then - self:Send("func",string.dump(func),name) - end -end -function Thread:SendLibs(func,name) - name=name or "nil" - if self.n>0 then - self:SendAll("func",string.dump(func),name) - end -end -function Thread.mainloop() - if Thread.n>0 then - Thread:UnPackChannel() - end -end -Thread.MainThread=true -local loop = multi:newLoop() -loop:OnLoop(Thread.mainloop) -OnThreadError=multi:newConnection() -function love.threaderror(thread, errorstr) - Thread:GetStatus() - Thread:RestartBroken() - Thread:GetStatus() - OnThreadError:Fire(thread,errorstr) -end -multi:newTask(function() - math.randomseed(math.floor(os.time()/2)) - for i=1,Thread.n do - Thread["ChannelT"..i]:push({"randseed",math.random(-1000000,1000000)}) - Thread["ChannelT"..i]:push({"func",string.dump(function() math.randomseed(randseed) end),"randomizing"}) - end -end) diff --git a/examples/love2d Threading Example/core/Utils.lua b/examples/love2d Threading Example/core/Utils.lua deleted file mode 100644 index c80b4bc..0000000 --- a/examples/love2d Threading Example/core/Utils.lua +++ /dev/null @@ -1,797 +0,0 @@ --- os Additions -function os.getSystemBit() - if (os.getenv('PROCESSOR_ARCHITEW6432')=='AMD64' or os.getenv('PROCESSOR_ARCHITECTURE')=='AMD64') then - return 64 - else - return 32 - end -end -function os.sleep(n) - if not n then n=0 end - local t0 = os.clock() - while os.clock() - t0 <= n do end -end -function os.pause(msg) - if msg ~= nil then - print(msg) - end - io.read() -end -function os.batCmd(cmd) - io.mkFile('temp.bat',cmd) - local temp = os.execute([[temp.bat]]) - io.delFile('temp.bat') - return temp -end -function os._getOS() - if package.config:sub(1,1)=='\\' then - return 'windows' - else - return 'unix' - end -end -function os.getOS(t) - if not t then - return os._getOS() - end - if os._getOS()=='unix' then - fh,err = io.popen('uname -o 2>/dev/null','r') - if fh then - osname = fh:read() - end - if osname then return osname end - end - local winver='Unknown Version' - local a,b,c=os.capture('ver'):match('(%d+).(%d+).(%d+)') - local win=a..'.'..b..'.'..c - if type(t)=='string' then - win=t - end - if win=='4.00.950' then - winver='95' - elseif win=='4.00.1111' then - winver='95 OSR2' - elseif win=='4.00.1381' then - winver='NT 4.0' - elseif win=='4.10.1998' then - winver='98' - elseif win=='4.10.2222' then - winver='98 SE' - elseif win=='4.90.3000' then - winver='ME' - elseif win=='5.00.2195' then - winver='2000' - elseif win=='5.1.2600' then - winver='XP' - elseif win=='5.2.3790' then - winver='Server 2003' - elseif win=='6.0.6000' then - winver='Vista/Windows Server 2008' - elseif win=='6.0.6002' then - winver='Vista SP2' - elseif win=='6.1.7600' then - winver='7/Windows Server 2008 R2' - elseif win=='6.1.7601' then - winver='7 SP1/Windows Server 2008 R2 SP1' - elseif win=='6.2.9200' then - winver='8/Windows Server 2012' - elseif win=='6.3.9600' then - winver='8.1/Windows Server 2012' - elseif win=='6.4.9841' then - winver='10 Technical Preview 1' - elseif win=='6.4.9860' then - winver='10 Technical Preview 2' - elseif win=='6.4.9879' then - winver='10 Technical Preview 3' - elseif win=='10.0.9926' then - winver='10 Technical Preview 4' - end - return 'Windows '..winver -end -function os.getLuaArch() - return (#tostring({})-7)*4 -end -if os.getOS()=='windows' then - function os.sleep(n) - if n > 0 then os.execute('ping -n ' .. tonumber(n+1) .. ' localhost > NUL') end - end -else - function os.sleep(n) - os.execute('sleep ' .. tonumber(n)) - end -end -function os.capture(cmd, raw) - local f = assert(io.popen(cmd, 'r')) - local s = assert(f:read('*a')) - f:close() - if raw then return s end - s = string.gsub(s, '^%s+', '') - s = string.gsub(s, '%s+$', '') - s = string.gsub(s, '[\n\r]+', ' ') - return s -end -function os.getCurrentUser() - return os.getenv('$USER') or os.getenv('USERNAME') -end --- string Additions -function string.trim(s) - local from = s:match"^%s*()" - return from > #s and "" or s:match(".*%S", from) -end -function string.random(n) - local str = '' - strings = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} - for i=1,n do - h = math.random(1,#strings) - str = str..''..strings[h] - end - return str -end -function string.linesToTable(s) - local t = {} - local i = 0 - while true do - i = string.find(s, '\n', i+1) - if i == nil then return t end - table.insert(t, i) - end -end -function string.lines(str) - local t = {} - local function helper(line) table.insert(t, line) return '' end - helper((str:gsub('(.-)\r?\n', helper))) - return t -end -function string.split(str, pat) - local t = {} -- NOTE: use {n = 0} in Lua-5.0 - local fpat = '(.-)' .. pat - local last_end = 1 - local s, e, cap = str:find(fpat, 1) - while s do - if s ~= 1 or cap ~= '' then - table.insert(t,cap) - end - last_end = e+1 - s, e, cap = str:find(fpat, last_end) - end - if last_end <= #str then - cap = str:sub(last_end) - table.insert(t, cap) - end - return t -end -function string.shuffle(inputStr) - math.randomseed(os.time()); - local outputStr = ''; - local strLength = string.len(inputStr); - while (strLength ~=0) do - local pos = math.random(strLength); - outputStr = outputStr..string.sub(inputStr,pos,pos); - inputStr = inputStr:sub(1, pos-1) .. inputStr:sub(pos+1); - strLength = string.len(inputStr); - end - return outputStr; -end -function string.genKeys(chars,a,f,s,GG) - if GG then - chars=string.rep(chars,a) - end - if s then - chars=string.shuffle(chars) - end - b=#chars - if a==0 then return end - local taken = {} local slots = {} - for i=1,a do slots[i]=0 end - for i=1,b do taken[i]=false end - local index = 1 - local tab={} - for i=1,#chars do - table.insert(tab,chars:sub(i,i)) - end - while index > 0 do repeat - repeat slots[index] = slots[index] + 1 - until slots[index] > b or not taken[slots[index]] - if slots[index] > b then - slots[index] = 0 - index = index - 1 - if index > 0 then - taken[slots[index]] = false - end - break - else - taken[slots[index]] = true - end - if index == a then - local tt={} - for i=1,a do - table.insert(tt,tab[slots[i]]) - end - f(table.concat(tt)) - taken[slots[index]] = false - break - end - index = index + 1 - until true end -end --- io Additions -function io.getInput(msg) - if msg ~= nil then - io.write(msg) - end - return io.read() -end -function io.scanDir(directory) - directory=directory or io.getDir() - local i, t, popen = 0, {}, io.popen - if os.getOS()=='unix' then - for filename in popen('ls -a \''..directory..'\''):lines() do - i = i + 1 - t[i] = filename - end - else - for filename in popen('dir \''..directory..'\' /b'):lines() do - i = i + 1 - t[i] = filename - end - end - return t -end -function io.buildFromTree(tbl, indent,folder) - if not indent then indent = 0 end - if not folder then folder = '' end - for k, v in pairs(tbl) do - formatting = string.rep(' ', indent) .. k .. ':' - if type(v) == 'table' then - if not(io.dirExists(folder..string.sub(formatting,1,-2))) then - io.mkDir(folder..string.sub(formatting,1,-2)) - end - io.buildFromTree(v,0,folder..string.sub(formatting,1,-2)..'\\') - else - a=string.find(tostring(v),':',1,true) - if a then - file=string.sub(tostring(v),1,a-1) - data=string.sub(tostring(v),a+1) - io.mkFile(folder..file,data,'wb') - else - io.mkFile(folder..v,'','wb') - end - end - end -end -function io.cpFile(path,topath) - if os.getOS()=='unix' then - os.execute('cp '..file1..' '..file2) - else - os.execute('Copy '..path..' '..topath) - end -end -function io.delDir(directoryname) - if os.getOS()=='unix' then - os.execute('rm -rf '..directoryname) - else - os.execute('rmdir '..directoryname..' /s /q') - end -end -function io.delFile(path) - os.remove(path) -end -function io.mkDir(dirname) - os.execute('mkdir "' .. dirname..'"') -end -function io.mkFile(filename,data,tp) - if not(tp) then tp='wb' end - if not(data) then data='' end - file = io.open(filename, tp) - if file==nil then return end - file:write(data) - file:close() -end -function io.movFile(path,topath) - io.cpFile(path,topath) - io.delFile(path) -end -function io.listFiles(dir) - if not(dir) then dir='' end - local f = io.popen('dir \''..dir..'\'') - if f then - return f:read('*a') - else - print('failed to read') - end -end -function io.getDir(dir) - if not dir then return io.getWorkingDir() end - if os.getOS()=='unix' then - return os.capture('cd '..dir..' ; cd') - else - return os.capture('cd '..dir..' & cd') - end -end -function io.getWorkingDir() - return io.popen'cd':read'*l' -end -function io.fileExists(path) - g=io.open(path or '','r') - if path =='' then - p='empty path' - return nil - end - if g~=nil and true or false then - p=(g~=nil and true or false) - end - if g~=nil then - io.close(g) - else - return false - end - return p -end -function io.fileCheck(file_name) - if not file_name then print('No path inputed') return false end - local file_found=io.open(file_name, 'r') - if file_found==nil then - file_found=false - else - file_found=true - end - return file_found -end -function io.dirExists(strFolderName) - strFolderName = strFolderName or io.getDir() - local fileHandle, strError = io.open(strFolderName..'\\*.*','r') - if fileHandle ~= nil then - io.close(fileHandle) - return true - else - if string.match(strError,'No such file or directory') then - return false - else - return true - end - end -end -function io.getAllItems(dir) - local t=os.capture("cd \""..dir.."\" & dir /a-d | find",true):lines() - return t -end -function io.listItems(dir) - if io.dirExists(dir) then - temp=io.listFiles(dir) -- current directory if blank - if io.getDir(dir)=='C:\\\n' then - a,b=string.find(temp,'C:\\',1,true) - a=a+2 - else - a,b=string.find(temp,'..',1,true) - end - temp=string.sub(temp,a+2) - list=string.linesToTable(temp) - temp=string.sub(temp,1,list[#list-2]) - slist=string.lines(temp) - table.remove(slist,1) - table.remove(slist,#slist) - temp={} - temp2={} - for i=1,#slist do - table.insert(temp,string.sub(slist[i],40,-1)) - end - return temp - else - return nil - end -end -function io.getDirectories(dir,l) - if dir then - dir=dir..'\\' - else - dir='' - end - local temp2=io.scanDir(dir) - for i=#temp2,1,-1 do - if io.fileExists(dir..temp2[i]) then - table.remove(temp2,i) - elseif l then - temp2[i]=dir..temp2[i] - end - end - return temp2 -end -function io.getFiles(dir,l) - if dir then - dir=dir..'\\' - else - dir='' - end - local temp2=io.scanDir(dir) - for i=#temp2,1,-1 do - if io.dirExists(dir..temp2[i]) then - table.remove(temp2,i) - elseif l then - temp2[i]=dir..temp2[i] - end - end - return temp2 -end -function io.getFullName(name) - local temp=name or arg[0] - if string.find(temp,'\\',1,true) or string.find(temp,'/',1,true) then - temp=string.reverse(temp) - a,b=string.find(temp,'\\',1,true) - if not(a) or not(b) then - a,b=string.find(temp,'/',1,true) - end - return string.reverse(string.sub(temp,1,b-1)) - end - return temp -end -function io.getName(file) - local name=io.getFullName(file) - name=string.reverse(name) - a,b=string.find(name,'.',1,true) - name=string.sub(name,a+1,-1) - return string.reverse(name) -end -function io.readFile(file) - local f = io.open(file, 'rb') - local content = f:read('*all') - f:close() - return content -end -function io.getExtension(file) - local file=io.getFullName(file) - file=string.reverse(file) - local a,b=string.find(file,'.',0,true) - local temp=string.sub(file,1,b) - return string.reverse(temp) -end -function io.pathToTable(path) - local p=io.splitPath(path) - local temp={} - temp[p[1]]={} - local last=temp[p[1]] - for i=2,#p do - snd=last - last[p[i]]={} - last=last[p[i]] - end - return temp,last,snd -end -function io.splitPath(str) - return string.split(str,'[\\/]+') -end - -function io.parseDir(dir,t) - io.tempFiles={} - function _p(dir) - local dirs=io.getDirectories(dir,true) - local files=io.getFiles(dir,true) - for i=1,#files do - p,l,s=io.pathToTable(files[i]) - if t then - s[io.getFullName(files[i])]=io.readFile(files[i]) - else - s[io.getFullName(files[i])]=io.open(files[i],'r+') - end - table.merge(io.tempFiles,p) - end - for i=1,#dirs do - table.merge(io.tempFiles,io.pathToTable(dirs[i])) - _p(dirs[i],t) - end - end - _p(dir) - return io.tempFiles -end -function io.parsedir(dir,f) - io.tempFiles={} - function _p(dir,f) - local dirs=io.getDirectories(dir,true) - local files=io.getFiles(dir,true) - for i=1,#files do - if not f then - table.insert(io.tempFiles,files[i]) - else - f(files[i]) - end - end - for i=1,#dirs do - _p(dirs[i],f) - end - end - _p(dir,f) - return io.tempFiles -end -function io.driveReady(drive) - drive=drive:upper() - if not(drive:find(':',1,true)) then - drive=drive..':' - end - drives=io.getDrives() - for i=1,#drives do - if drives[i]==drive then - return true - end - end - return false -end -function io.getDrives() - if os.getOS()=='windows' then - local temp={} - local t1=os.capture('wmic logicaldisk where drivetype=2 get deviceid, volumename',true) - local t2=os.capture('wmic logicaldisk where drivetype=3 get deviceid, volumename',true) - for drive,d2 in t1:gmatch('(.:)%s-(%w+)') do - if #d2>1 then - table.insert(temp,drive) - end - end - for drive in t2:gmatch('(.:)') do - table.insert(temp,drive) - end - return temp - end - error('Command is windows only!') -end --- table Additions -function table.dump(t,indent) - local names = {} - if not indent then indent = '' end - for n,g in pairs(t) do - table.insert(names,n) - end - table.sort(names) - for i,n in pairs(names) do - local v = t[n] - if type(v) == 'table' then - if(v==t) then - print(indent..tostring(n)..': <-') - else - print(indent..tostring(n)..':') - table.dump(v,indent..' ') - end - else - if type(v) == 'function' then - print(indent..tostring(n)..'()') - else - print(indent..tostring(n)..': '..tostring(v)) - end - end - end -end -function table.alphanumsort(o) - local function padnum(d) local dec, n = string.match(d, '(%.?)0*(.+)') - return #dec > 0 and ('%.12f'):format(d) or ('%s%03d%s'):format(dec, #n, n) - end - table.sort(o, function(a,b) return tostring(a):gsub('%.?%d+',padnum)..('%3d'):format(#b)< tostring(b):gsub('%.?%d+',padnum)..('%3d'):format(#a) end) - return o -end -function table.foreach(t,f) - for i,v in pairs(t) do - f(v) - end -end -function table.merge(t1, t2) - for k,v in pairs(t2) do - if type(v) == 'table' then - if type(t1[k] or false) == 'table' then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -function table.print(tbl, indent) - if not indent then indent = 0 end - for k, v in pairs(tbl) do - formatting = string.rep(' ', indent) .. k .. ': ' - if type(v) == 'table' then - print(formatting) - table.print(v, indent+1) - else - print(formatting .. tostring(v)) - end - end -end -function table.merge(t1, t2) - for k,v in pairs(t2) do - if type(v) == 'table' then - if type(t1[k] or false) == 'table' then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -function table.clear(t) - for k in pairs (t) do - t[k] = nil - end -end -function table.copy(t) - function deepcopy(orig) - local orig_type = type(orig) - local copy - if orig_type == 'table' then - copy = {} - for orig_key, orig_value in next, orig, nil do - copy[deepcopy(orig_key)] = deepcopy(orig_value) - end - setmetatable(copy, deepcopy(getmetatable(orig))) - else -- number, string, boolean, etc - copy = orig - end - return copy - end - return deepcopy(t) -end -function table.swap(tab,i1,i2) - tab[i1],tab[i2]=tab[i2],tab[i1] -end -function table.append(t1, ...) - t1,t2= t1 or {},{...} - for k,v in pairs(t2) do - t1[#t1+1]=t2[k] - end - return t1 -end -function table.compare(t1, t2,d) - if d then - return table.deepCompare(t1,t2) - end - --if #t1 ~= #t2 then return false end - if #t2>#t1 then - for i=1,#t2 do - if t1[i] ~= t2[i] then - return false,t2[i] - end - end - else - for i=1,#t1 do - if t1[i] ~= t2[i] then - return false,t2[i] - end - end - end - return true -end -function table.deepCompare(t1,t2) - if t1==t2 then return true end - if (type(t1)~='table') then return false end - local mt1 = getmetatable(t1) - local mt2 = getmetatable(t2) - if( not table.deepCompare(mt1,mt2) ) then return false end - for k1,v1 in pairs(t1) do - local v2 = t2[k1] - if( not table.deepCompare(v1,v2) ) then return false end - end - for k2,v2 in pairs(t2) do - local v1 = t1[k2] - if( not table.deepCompare(v1,v2) ) then return false end - end - return true -end -function table.has(t,_v) - for i,v in pairs(t) do - if v==_v then - return true - end - end - return false -end -function table.reverse(tab) - local size = #tab - local newTable = {} - for i,v in ipairs (tab) do - newTable[size-i] = v - end - for i=1,#newTable do - tab[i]=newTable[i] - end -end --- Math Additions -local Y = function(g) local a = function(f) return f(f) end return a(function(f) return g(function(x) local c=f(f) return c(x) end) end) end -local F = function(f) return function(n)if n == 0 then return 1 else return n*f(n-1) end end end -math.factorial = Y(F) -math.fib={} -math.fib.fibL={} -setmetatable(math.fib,{__call=function(self,n) - if n<=2 then - return 1 - else - if self.fibL[n] then - return self.fibL[n] - else - local t=math.fib(n-1)+math.fib(n-2) - self.fibL[n]=t - return t - end - end -end}) -local floor,insert = math.floor, table.insert -function math.basen(n,b) - n = floor(n) - if not b or b == 10 then return tostring(n) end - local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - local t = {} - local sign = '' - if n < 0 then - sign = '-' - n = -n - end - repeat - local d = (n % b) + 1 - n = floor(n / b) - insert(t, 1, digits:sub(d,d)) - until n == 0 - return sign .. table.concat(t,'') -end -function math.convbase(n,b,tb) - return math.basen(tonumber(tostring(n),b),tb) -end -if BigNum then - function BigNum.mod(a,b) - return a-((a/b)*b) - end - local floor,insert = math.floor, table.insert - function math.basen(n,b) - n = BigNum.new(n) - if not b or b == 10 then return tostring(n) end - local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - local t = {} - local sign = '' - if n < BigNum.new(0) then - sign = '-' - n = -n - end - repeat - local d = BigNum.mod(n , b) + 1 - n = n/b - d=tonumber(tostring(d)) - insert(t, 1, digits:sub(d,d)) - until tonumber(tostring(n)) == 0 - return sign .. table.concat(t,'') - end - function math.to10(n,b) - local num=tostring(n) - local sum=BigNum.new() - local digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' - for i=1,#num do - local v=digits:find(num:sub(i,i),1,true) - sum=sum+BigNum.new(tonumber(v)-1)*BigNum.pow(BigNum.new(b),BigNum.new(#num-i)) - end - return sum - end - function math.convbase(n,b,tb) - return math.basen(math.to10(n,b),tb) - end -end -function math.numfix(n,x) - local str=tostring(n) - if #str olleh -nil = binobj:flipbits() -- flips the binary bits -nil** = binobj:segment(a,b) -- gets a segment of the binobj data works just like string.sub(a,b) without str -nil* = binobj:insert(a,i) -- inserts i (string or number(converts into string)) in position a -nil* = binobj:parseN(n) -- removes ever (nth) byte of data -nil = binobj:getlength() -- gets length or size of binary data -nil* = binobj:shift(n) -- shift the binary data by n positive --> negitive <-- -nil* = binobj:delete(a,b) -- deletes part of a binobj data Usage: binobj:delete(#) deletes at pos # binobj:delete(#1,#2) deletes from #1 to #2 binobj:delete('string') deletes all instances of 'byte' as a string Use string.char(#) or '\#' to get byte as a string -nil* = binobj:encrypt(seed) -- encrypts data using a seed, seed may be left blank -nil* = binobj:decrypt(seed) -- decrypts data encrypted with encrypt(seed) -nil* = binobj:shuffle() -- Shuffles the data randomly Note: there is no way to get it back!!! If original is needed clone beforehand -nil** = binobj:mutate(a,i) -- changes position a's value to i -nil = binobj:merge(o,t) -- o is the binobj you are merging if t is true it merges the new data to the left of the binobj EX: b:merge(o,true) b='yo' o='data' output: b='datayo' b:merge(o) b='yo' o='data' output: b='yodata' -nil* = binobj:parseA(n,a,t) -- n is every byte where you add, a is the data you are adding, t is true or false true before false after -nil = binobj:getHEX(a,b) -- returns the HEX of the bytes between a,b inclusive -nil = binobj:cryptM() -- a mirrorable encryptor/decryptor -nil = binobj:addBlock(d,n) -- adds a block of data to a binobj s is size d is data e is a bool if true then encrypts string values. if data is larger than 'n' then data is lost. n is the size of bytes the data is Note: n is no longer needed but you must use getBlock(type) to get it back -nil = binobj:getBlock(t,n) -- gets block of code by type -nil = binobj:seek(n) -- used with getBlock EX below with all 3 -nil* = binobj:morph(a,b,d) -- changes data between point a and b, inclusive, to d -nil = binobj:fill(n,d) -- fills binobj with data 'd' for n -nil = binobj:fillrandom(n) -- fills binobj with random data for n -nil = binobj:shiftbits(n) -- shifts all bits by n amount -nil = binobj:shiftbit(n,i) -- shifts a bit ai index i by n -nil# = binobj:streamwrite(d,n) -- writes to the streamable binobj d data n position -nil# = binobj:open() -- opens the streamable binobj -nil# = binobj:close() -- closes the streamable binobj -nil = binobj:wipe() -- erases all data in the file -nil* = binobj:tackB(d) -- adds data to the beginning of a file -nil = binobj:tackE(d) -- adds data to the end of a file -nil = binobj:parse(n,f) -- loops through each byte calling function 'f' with the args(i,binobj,data at i) -nil = binobj:flipbit(i) -- flips the binary bit at position i -nil* = binobj:gsub() -- just like string:gsub(), but mutates self -nil = blockWriter:addNamedBlock(name,value) -- writes a named block to the file with name 'name' and the value 'value' - -Note: numbers are written in Big-endian use bin.endianflop(d) to filp to Little-endian - -Note: binobj:tonumber() returns big,little endian so if printing do: b,l=binobj:tonumber() print(l) print(b) - -nil = bitobj:add(i) -- adds i to the bitobj i can be a number (base 10) or a bitobj -nil = bitobj:sub(i) -- subs i to the bitobj i can be a number (base 10) or a bitobj -nil = bitobj:multi(i) -- multiplys i to the bitobj i can be a number (base 10) or a bitobj -nil = bitobj:div(i) -- divides i to the bitobj i can be a number (base 10) or a bitobj -nil = bitobj:flipbits() -- filps the bits 1 --> 0, 0 --> 1 -string = bitobj:getBin() -- returns 1's & 0's of the bitobj - -# stream objects only -* not compatible with stream files -** works but do not use with large files or it works to some degree -*** in stream objects all changes are made directly to the file, so there is no need to do tofile() -*D -]] - -bin.Changelog=[[ -Version.Major.Minor -------------------------- -1.0.0 : initial release load/new/tofile/clone/closeto/compare/sub/reverse/flip/segment/insert/insert/parseN/getlength/shift -1.0.1 : update Delete/tonumber/getbyte/ -1.0.2 : update Changed how delete works. Added encrypt/decrypt/shuffle -1.0.3 : update Added bits class, Added in bin: tobit/mutate/parseA Added in bits: add/sub/multi/div/isover/tobyte/tonumber/flip -1.0.4 : update Changed tobyte() to tobytes()/flipbit() to flipbits() and it now returns a binobj not str Added bin:merge -1.0.5 : update Changed bin.new() now hex data can be inserted EX: bin.new('0xFFC353D') Added in bin: getHEX/cryptM/addBlock/getBlock/seek -1.0.6 : update Added bin.NumtoHEX/bin:getHEX/bin.HEXtoBin/bin.HEXtoStr/bin.tohex/bin.fromhex -1.0.7 : update Added bin:morph/bin.endianflop/bin:scan/bin.ToStr -1.0.8 : update Added bin:fill/bin:fillrandom -1.1.0 : update Added bin.packLLIB/bin.unpackLLIB -1.2.0 : update Updated llib files -1.3.0 : Update Changed bin.unpackLLIB and bin.load() Added: bin.fileExist -1.4.0 : Update Changed bin.unpackLLIB bin.packLLIB Added: bin:shiftbits(n) bin:shiftbit(n,i) - -Woot!!! Version 2 -2.0.0 HUGE UPDATE Added Streamable files!!! lua 5.1, 5.2 and 5.3 compatable!!! -#binobj is the same as binobj:getlength() but only works in 5.2 and 5.3, in 5.1 just use getlength() or getSize() for compatibility -Now you can work with gigabyte sized data without memory crashes(streamable files[WIP]). - -Stream Compatible methods: - sub(a,b) - getlength() - tofile(filename) - flipbits() - tonumber(a,b) - getbyte(n) - segment(a,b) - parse(n,f) - tobits(i) - reverse() - flipbit(i) - cryptM() - getBlock(t,n) - addBlock(d,n) - shiftbits(n) - shiftbit(n,i) - getHEX(a,b) - -Added functions in this version: - binobj:streamwrite(d,n) - binobj:open() - binobj:close() - binobj:tackB(d) - binobj:tackE(d) - binobj:parse(n,f) - binobj:flipbit(i) - bin.stream(file) - binobj:streamData(a,b) - bin.getVersion() - bin.escapeStr(str) - binobj:streamread(a,b) - binobj:canStreamWrite() - binobj:wipe() - -Woot!!! Version 3 -3.0.0 HUGE UPDATE!!! - Added: bin.newVFS() bin.loadVFS() bin.textToBinary(txt) bin.decodeBits(bindata) bitobj:getBin() - Updated: bin.addBlock() <-- Fixed error with added features to the bits.new() function that allow for new functions to work - Notice: The bin library now requires the utils library!!! Put utils.lua in the lua/ directory -3.1.0 - Added: bin.newTempFile(data) binobj:setEndOfFile(n) bin.randomName(n,ext) - Updated: bin:tackE() bin:fill() bin:fillrandom() are now stream compatible! - Notice: bin:setEndOfFile() only works on streamable files! -3.1.1 - Added: bin.trimNul(s) bin:gsub() -3.1.2 - Added: log(data,name,fmt) - In secret something is brewing... - -3.1.3 - Added: bin:getHash(n) -3.2.1 - Added: bin.encryptA(data,seed), bin.decryptA(data,seed), bin.encryptB(data,seed), bin.decryptB(data,seed), bin:flush() - Updated: bin:encrypt(seed) and bin:decrypt(seed) - Fixed: bin:shiftbit() not working right with streamable files -3.2.2 - Fixed: bits.new() -- minor mistake huge error -3.2.3 - General bug fixes - Changed how bin.ToStr(t) -- functions are no longer valid data types -3.3.0 - Added: - bin:getSize() -- same as bin:getlength() just makes more sense. bin:getlength() is still valid and always will be. - bin.newLink() -- creates a link to a file object... Its like opening a file without opening it... Lua can only open a maximum of 200 files so use links if you will be going beyond that or make sure to close your files - bin.getHash2(h,n) -- 'h' hash size 8bit,16bit,32bit,64bit, 128bit, 100000bit whatever. is a number 'n' is the segmentation size defualt is 1024 greater numbers result in faster hashes but eaiser to forge hashes -3.4.1:(7/22/2016) NOTE: I started to add dates so I can see my work flow - Added: - binobj:getData() -- returns bin object as a string - bin:newDataBuffer(s) - Fixed: binobj:tonumber(a,b) -4.0.0:(7/23/2016) - Added: - bin.bufferToBin(b) - bin.binToBuffer(b) - bin.getLuaVersion() - bin.newNamedBlock(indexSize) - bin.newStreamedNamedBlock(indexSize,path) - bin.loadNamedBlock(path) - bin.getIndexSize(tab) - bits.numToBytes(num,occ) -4.1.0:(11/2/2016) NOTE: I took quite a long break due to college lol - Added: - bin.namedBlockManager(name) - Allows for a new way to use NamedBlocks - Example usage: - test=bin.namedBlockManager() - test["name"]="Ryan" -- My name lol - test["age"]=21 -- my age lol - test:tofile("test.dat") - --Now lets load the data we created - test2=bin.namedBlockManager("test.dat") - print(test2["name"]) - print(test2["age"]) - Changed: - bin.newNamedBlock(indexSize) - Now allows for indexSize to be nil and dynamacally adds to the size of the index - Fixed: - bin.loadNamedBlock(name) - Issue with indexing - TODO: - Allow streamed files to have expanding indexes -4.2.0:(12/21/2016) - Added: - bin.gcd(m,n) *takes number types returns a number - gets the greatest common denominator between 2 numbers m and n - bin.numToFraction(num) *takes number type returns a string type - converts a decimal to a fraction - so 5.5 would become 11/2 - bin.doubleToString(double) *takes number type returns string - converts a double to a string - bin.stringToDouble(str) *takes string type returns number type - converts the doublestring into a number - NOTE: this string can be 2 lengths! Either 9 bytes or 25 bytes... depending on the precision needed the program will convert the data - Also: the miniheader -/+ is for 9byte doubles the miniheader _/=(same keys as -/+ on an American keyboard) is for 25byte doubles - Changed: - bits.numToBytes(n,fit,func) - added argument func which is called when the number n takes up more space than size 'fit' - passes a ref table with keys num and fit, modifying these effects the output. - Note: If you change ref.fit make sure to make ref.num fits by adding \0 to the beginning of the numberstring - TODO: - add more useful features :P -4.2.1:(12/23/2016) - Added: - bin.decompress(comp) lzw commpression - bin.compress(uncomp) lzw decommpression - bin:segmentedRead(size,func) -4.3.0:(12/26/2016) - Added: - bin.tob64(data) - converts string data to b64 data - bin.fromb64(data) - converts b64 data to string data - bin:getB64() - returns b64 data from binobj - bits.lsh(value,shift) bit lshift - bits.rsh(value,shift) bit rshift - bits.bit(x,b) bit thing - bits.lor(x,y) or - Changed: - bin.new(data,hex,b64) hex if true treats data as hexdata, b64 if true treats data like b64data - Now allows b64 data to be used in construction of a bin file -4.4.0:(1/1/2017) - Added: - sinkobj=bin:newSink() - nil=sinkobj:tackE(data) - adds data into the sink, same method that binobj and streamobjs have. This does what you would expest the binobj to do but much quicker - nil=sinkobj:tofile(path) - creates a file containing the contents of the sink - str=sinkobj:getData() - returns the data of the sink as a string - nil=sinkobj:reset() - Clears the sink -4.4.1:(1/2/2017) - Changed: - bin.stream(file,lock) - Modified stream files so that multiple streams can link to one file by sharing handles -4.4.2:(1/10/2017) - Added: - bin.freshStream(file) - creates a stream object that wipes all data if the file already exists and readys the object for writing. In short it's doing: bin.new():tofile(file) return bin.stream(file,false) - -- I found myself doing that so much I made a method to simplify the process -4.5.0:(3/31/2017) - Added: - bin:getDataBuffer(a,b) -- a and b are the location to open on the streamed object they are not required though - -- If left out the entire file is open to used as a buffer! Even a empty streamed file works. Be sure to fill the buffer before trying to write to a location without data - -- Index 1 is the start regardless of where you open up the file - Note: Only works on streamed files! Use bin:newDataBuffer(s) to use the non streamed version -]] -bin.data='' -bin.t='bin' -bin.__index = bin -bin.__tostring=function(self) return self:getData() end -bin.__len=function(self) return self:getlength() end -bits={} -bits.data='' -bits.t='bits' -bits.__index = bits -bits.__tostring=function(self) return self.data end -bits.__len=function(self) return (#self.data)/8 end -bin.lastBlockSize=0 -bin.streams={} -- allows for multiple stream objects on one file... tricky stuff lol ---[[---------------------------------------- -Links -------------------------------------------]] -function bin.newLink(path) - if not path then - error("Must include a path when using a link!") - end - local c={} - c.path=path - c.tempfile={} - local mt={ - __tostring=function(self) - if self:getlength()>2048 then - -- - end - end, - __len=function(self) - return self:getlength() - end - } - function c:getlength() - -- - end -end - - ---[[---------------------------------------- -utils -------------------------------------------]] -function cleanName(name) - name=name:gsub("\\","") - name=name:gsub("/","") - name=name:gsub(":","") - name=name:gsub("*","") - name=name:gsub("%?","") - name=name:gsub("\"","''") - name=name:gsub("<","") - name=name:gsub(">","") - name=name:gsub("|","") - return name -end -function math.numfix(n,x) - local str=tostring(n) - if #str/dev/null','r') - if fh then - osname = fh:read() - end - if osname then return osname end - end - local winver='Unknown Version' - local a,b,c=os.capture('ver'):match('(%d+).(%d+).(%d+)') - local win=a..'.'..b..'.'..c - if type(t)=='string' then - win=t - end - if win=='4.00.950' then - winver='95' - elseif win=='4.00.1111' then - winver='95 OSR2' - elseif win=='4.00.1381' then - winver='NT 4.0' - elseif win=='4.10.1998' then - winver='98' - elseif win=='4.10.2222' then - winver='98 SE' - elseif win=='4.90.3000' then - winver='ME' - elseif win=='5.00.2195' then - winver='2000' - elseif win=='5.1.2600' then - winver='XP' - elseif win=='5.2.3790' then - winver='Server 2003' - elseif win=='6.0.6000' then - winver='Vista/Windows Server 2008' - elseif win=='6.0.6002' then - winver='Vista SP2' - elseif win=='6.1.7600' then - winver='7/Windows Server 2008 R2' - elseif win=='6.1.7601' then - winver='7 SP1/Windows Server 2008 R2 SP1' - elseif win=='6.2.9200' then - winver='8/Windows Server 2012' - elseif win=='6.3.9600' then - winver='8.1/Windows Server 2012' - elseif win=='6.4.9841' then - winver='10 Technical Preview 1' - elseif win=='6.4.9860' then - winver='10 Technical Preview 2' - elseif win=='6.4.9879' then - winver='10 Technical Preview 3' - elseif win=='10.0.9926' then - winver='10 Technical Preview 4' - end - return 'Windows '..winver -end -function os.capture(cmd, raw) - local f = assert(io.popen(cmd, 'r')) - local s = assert(f:read('*a')) - f:close() - if raw then return s end - s = string.gsub(s, '^%s+', '') - s = string.gsub(s, '%s+$', '') - s = string.gsub(s, '[\n\r]+', ' ') - return s -end -function io.scanDir(directory) - directory=directory or io.getDir() - local i, t, popen = 0, {}, io.popen - if os.getOS()=='unix' then - for filename in popen('ls -a "'..directory..'"'):lines() do - i = i + 1 - t[i] = filename - end - else - for filename in popen('dir "'..directory..'" /b'):lines() do - i = i + 1 - t[i] = filename - end - end - return t -end -function io.getDir(dir) - if not dir then return io.getWorkingDir() end - if os.getOS()=='unix' then - return os.capture('cd '..dir..' ; cd') - else - return os.capture('cd '..dir..' & cd') - end -end -function string.split(str, pat) - local t = {} -- NOTE: use {n = 0} in Lua-5.0 - local fpat = '(.-)' .. pat - local last_end = 1 - local s, e, cap = str:find(fpat, 1) - while s do - if s ~= 1 or cap ~= '' then - table.insert(t,cap) - end - last_end = e+1 - s, e, cap = str:find(fpat, last_end) - end - if last_end <= #str then - cap = str:sub(last_end) - table.insert(t, cap) - end - return t -end -function io.fileExists(path) - g=io.open(path or '','r') - if path =='' then - p='empty path' - return nil - end - if g~=nil and true or false then - p=(g~=nil and true or false) - end - if g~=nil then - io.close(g) - else - return false - end - return p -end -function io.getDirectories(dir,l) - if dir then - dir=dir..'\\' - else - dir='' - end - local temp2=io.scanDir(dir) - for i=#temp2,1,-1 do - if io.fileExists(dir..temp2[i]) then - table.remove(temp2,i) - elseif l then - temp2[i]=dir..temp2[i] - end - end - return temp2 -end -function io.getFiles(dir,l) - if dir then - dir=dir..'\\' - else - dir='' - end - local temp2=io.scanDir(dir) - for i=#temp2,1,-1 do - if io.dirExists(dir..temp2[i]) then - table.remove(temp2,i) - elseif l then - temp2[i]=dir..temp2[i] - end - end - return temp2 -end -function io.readFile(file) - local f = io.open(file, 'rb') - local content = f:read('*all') - f:close() - return content -end -function table.print(tbl, indent) - if not indent then indent = 0 end - for k, v in pairs(tbl) do - formatting = string.rep(' ', indent) .. k .. ': ' - if type(v) == 'table' then - print(formatting) - table.print(v, indent+1) - else - print(formatting .. tostring(v)) - end - end -end -function io.dirExists(strFolderName) - strFolderName = strFolderName or io.getDir() - local fileHandle, strError = io.open(strFolderName..'\\*.*','r') - if fileHandle ~= nil then - io.close(fileHandle) - return true - else - if string.match(strError,'No such file or directory') then - return false - else - return true - end - end -end -function io.getFullName(name) - local temp=name or arg[0] - if string.find(temp,'\\',1,true) or string.find(temp,'/',1,true) then - temp=string.reverse(temp) - a,b=string.find(temp,'\\',1,true) - if not(a) or not(b) then - a,b=string.find(temp,'/',1,true) - end - return string.reverse(string.sub(temp,1,b-1)) - end - return temp -end -function io.getName(file) - local name=io.getFullName(file) - name=string.reverse(name) - a,b=string.find(name,'.',1,true) - name=string.sub(name,a+1,-1) - return string.reverse(name) -end -function io.getPathName(path) - return path:sub(1,#path-#io.getFullName(path)) -end -function table.merge(t1, t2) - for k,v in pairs(t2) do - if type(v) == 'table' then - if type(t1[k] or false) == 'table' then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -function io.splitPath(str) - return string.split(str,'[\\/]+') -end -function io.pathToTable(path) - local p=io.splitPath(path) - local temp={} - temp[p[1]]={} - local last=temp[p[1]] - for i=2,#p do - snd=last - last[p[i]]={} - last=last[p[i]] - end - return temp,last,snd -end -function io.parseDir(dir,t) - io.tempFiles={} - function _p(dir) - local dirs=io.getDirectories(dir,true) - local files=io.getFiles(dir,true) - for i=1,#files do - p,l,s=io.pathToTable(files[i]) - if t then - s[io.getFullName(files[i])]=io.readFile(files[i]) - else - s[io.getFullName(files[i])]=io.open(files[i],'r+') - end - table.merge(io.tempFiles,p) - end - for i=1,#dirs do - table.merge(io.tempFiles,io.pathToTable(dirs[i])) - _p(dirs[i],t) - end - end - _p(dir) - return io.tempFiles -end -function io.parsedir(dir,f) - io.tempFiles={} - function _p(dir,f) - local dirs=io.getDirectories(dir,true) - local files=io.getFiles(dir,true) - for i=1,#files do - if not f then - table.insert(io.tempFiles,files[i]) - else - f(files[i]) - end - end - for i=1,#dirs do - _p(dirs[i],f) - end - end - _p(dir,f) - return io.tempFiles -end ---[[---------------------------------------- -Random -Not all of this is mine -------------------------------------------]] ---[[------------------------------------ -RandomLua v0.3.1 -Pure Lua Pseudo-Random Numbers Generator -Under the MIT license. -copyright(c) 2011 linux-man ---]]------------------------------------ - -local math_floor = math.floor - -local function normalize(n) --keep numbers at (positive) 32 bits - return n % 0x80000000 -end - -local function bit_and(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if (a % 2 == 1) and (b % 2 == 1) then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function bit_or(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if (a % 2 == 1) or (b % 2 == 1) then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function bit_xor(a, b) - local r = 0 - local m = 0 - for m = 0, 31 do - if a % 2 ~= b % 2 then r = r + 2^m end - if a % 2 ~= 0 then a = a - 1 end - if b % 2 ~= 0 then b = b - 1 end - a = a / 2 b = b / 2 - end - return normalize(r) -end - -local function seed() - --return normalize(tonumber(tostring(os.time()):reverse())) - return normalize(os.time()) -end - ---Mersenne twister -mersenne_twister = {} -mersenne_twister.__index = mersenne_twister - -function mersenne_twister:randomseed(s) - if not s then s = seed() end - self.mt[0] = normalize(s) - for i = 1, 623 do - self.mt[i] = normalize(0x6c078965 * bit_xor(self.mt[i-1], math_floor(self.mt[i-1] / 0x40000000)) + i) - end -end - -function mersenne_twister:random(a, b) - local y - if self.index == 0 then - for i = 0, 623 do - --y = bit_or(math_floor(self.mt[i] / 0x80000000) * 0x80000000, self.mt[(i + 1) % 624] % 0x80000000) - y = self.mt[(i + 1) % 624] % 0x80000000 - self.mt[i] = bit_xor(self.mt[(i + 397) % 624], math_floor(y / 2)) - if y % 2 ~= 0 then self.mt[i] = bit_xor(self.mt[i], 0x9908b0df) end - end - end - y = self.mt[self.index] - y = bit_xor(y, math_floor(y / 0x800)) - y = bit_xor(y, bit_and(normalize(y * 0x80), 0x9d2c5680)) - y = bit_xor(y, bit_and(normalize(y * 0x8000), 0xefc60000)) - y = bit_xor(y, math_floor(y / 0x40000)) - self.index = (self.index + 1) % 624 - if not a then return y / 0x80000000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) - end - else - return a + (y % (b - a + 1)) - end -end - -function twister(s) - local temp = {} - setmetatable(temp, mersenne_twister) - temp.mt = {} - temp.index = 0 - temp:randomseed(s) - return temp -end - ---Linear Congruential Generator -linear_congruential_generator = {} -linear_congruential_generator.__index = linear_congruential_generator - -function linear_congruential_generator:random(a, b) - local y = (self.a * self.x + self.c) % self.m - self.x = y - if not a then return y / 0x10000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) end - else - return a + (y % (b - a + 1)) - end -end - -function linear_congruential_generator:randomseed(s) - if not s then s = seed() end - self.x = normalize(s) -end - -function lcg(s, r) - local temp = {} - setmetatable(temp, linear_congruential_generator) - temp.a, temp.c, temp.m = 1103515245, 12345, 0x10000 --from Ansi C - if r then - if r == 'nr' then temp.a, temp.c, temp.m = 1664525, 1013904223, 0x10000 --from Numerical Recipes. - elseif r == 'mvc' then temp.a, temp.c, temp.m = 214013, 2531011, 0x10000 end--from MVC - end - temp:randomseed(s) - return temp -end - --- Multiply-with-carry -multiply_with_carry = {} -multiply_with_carry.__index = multiply_with_carry - -function multiply_with_carry:random(a, b) - local m = self.m - local t = self.a * self.x + self.c - local y = t % m - self.x = y - self.c = math_floor(t / m) - if not a then return y / 0x10000 - elseif not b then - if a == 0 then return y - else return 1 + (y % a) end - else - return a + (y % (b - a + 1)) - end -end - -function multiply_with_carry:randomseed(s) - if not s then s = seed() end - self.c = self.ic - self.x = normalize(s) -end - -function mwc(s, r) - local temp = {} - setmetatable(temp, multiply_with_carry) - temp.a, temp.c, temp.m = 1103515245, 12345, 0x10000 --from Ansi C - if r then - if r == 'nr' then temp.a, temp.c, temp.m = 1664525, 1013904223, 0x10000 --from Numerical Recipes. - elseif r == 'mvc' then temp.a, temp.c, temp.m = 214013, 2531011, 0x10000 end--from MVC - end - temp.ic = temp.c - temp:randomseed(s) - return temp -end --- Little bind for the methods: My code starts -randomGen={} -randomGen.__index=randomGen -function randomGen:new(s) - local temp={} - setmetatable(temp,randomGen) - temp[1]=twister() - temp[2]=lcg() - temp[3]=mwc() - temp.pos=1 - for i=1,3 do - temp[i]:randomseed(s) - end - return temp -end -function randomGen:randomseed(s) - self.pos=1 - self[1]:randomseed(s) - self[2]:randomseed(s) - self[3]:randomseed(s) -end -function randomGen:randomInt(a,b) - local t=self[self.pos]:random(a,b) - self.pos=self.pos+1 - if self.pos>3 then - self.pos=1 - end - return t -end -function randomGen:newND(a,b,s) - if not(a) or not(b) then error('You must include a range!') end - local temp=randomGen:new(s) - temp.a=a - temp.b=b - temp.range=b-a+1 - temp.dups={no=0} - function temp:nextInt() - local t=self:randomInt(self.a,self.b) - if self.dups[t]==nil then - self.dups[t]=true - self.dups.no=self.dups.no+1 - else - return self:nextInt() - end - if self.dups.no==self.range then - function self:nextInt() - return 1,true - end - return t - else - return t - end - end - function temp:nextIInt() - return function() return self:nextInt() end - end - return temp -end -lzw = {} -function lzw.encode(uncompressed) -- string - local dictionary, result, dictSize, w, c = {}, {}, 255, "" - for i = 0, 255 do - dictionary[string.char(i)] = i - end - for i = 1, #uncompressed do - c = string.sub(uncompressed, i, i) - if dictionary[w .. c] then - w = w .. c - else - table.insert(result, dictionary[w]) - dictSize = dictSize + 1 - dictionary[w .. c] = dictSize - w = c - end - end - if w ~= "" then - table.insert(result, dictionary[w]) - end - return result -end - -function lzw.decode(compressed) -- table - local dictionary, dictSize, entry, result, w, k = {}, 255, "", "", "" - for i = 0, 255 do - dictionary[i] = string.char(i) - end - for i = 1, #compressed do - k = compressed[i] - if dictionary[k] then - entry = dictionary[k] - elseif k == dictSize then - entry = w .. string.sub(w, 1, 1) - else - return nil, i - end - result = result .. entry - dictionary[dictSize] = w .. string.sub(entry, 1, 1) - dictSize = dictSize + 1 - w = entry - end - return result -end ---[[---------------------------------------- -BIN -------------------------------------------]] - -function bin:newSink() - local c={} - c.data={} - c.name="sinkobj" - c.num=1 - c.type="sink" - function c:tackE(data) - self.data[self.num]=data - self.num=self.num+1 - end - function c:tofile(path) - bin.new(table.concat(self.data)):tofile(path) - end - function c:getData() - return table.concat(self.data) - end - function c:reset() - self.data={} - end - function c:close() - -- does nothing lol - end - return c -end -function bin:segmentedRead(size,func) - local mSize=self:getSize() - local pSize=size - local iter=math.ceil(mSize/pSize) - for i=0,iter-1 do - func(self:sub((i*pSize)+1,(i+1)*pSize)) - end -end -function bin.compress(uncomp,n) - n=n or 9 - local cipher = lzw.encode(uncomp) - local dat={} - for i=1,#cipher do - local fix=bits.new(cipher[i]).data:match("0*(%d+)") - if cipher[i]==0 then - fix=string.rep("0",n) - end - fix=string.rep("0",n-#fix)..fix - table.insert(dat,fix) - end - str=table.concat(dat,"") - str=string.rep("0",8-#str%8)..str - comp={} - for i=0,(#str/8) do - table.insert(comp,bits.new(str:sub(i*8+1,i*8+8)):toSbytes()) - end - return table.concat(comp,"") -end -function bin.decompress(comp,n) - n=n or 9 - local tab={} - for i=1,#comp do - table.insert(tab,bits.new(comp:sub(i,i)).data) - end - tab=table.concat(tab,"") - tab=tab:match("0*(%d+)") - tab=string.rep("0",n-#tab%n)..tab - uncomp={} - for i=0,(#tab/n) do - table.insert(uncomp,tonumber(tab:sub(i*n+1,i*n+n),2)) - end - return lzw.decode(uncomp) -end -function bin:getSize() - return self:getlength() -end -function bin.getVersion() - return bin.Version[1]..'.'..bin.Version[2]..'.'..bin.Version[3] -end -function bin:gsub(...) - self.data=self.data:gsub(...) -end --- -function bin:trim() - self.data=self.data:match'^()%s*$' and '' or self.data:match'^%s*(.*%S)' -end -function bin._trim(str) - return str:match'^()%s*$' and '' or str:match'^%s*(.*%S)' -end -function bin:fullTrim(empty) - local t=self:lines() - for i=#t,1,-1 do - t[i]=bin._trim(t[i]) - if empty then - if t[i]=="" then - table.remove(t,i) - end - end - end - self.data = table.concat(t,"\n") -end -function bin:lines() - local t = {} - local function helper(line) table.insert(t, line) return '' end - helper((self.data:gsub('(.-)\r?\n', helper))) - return t -end -function bin._lines(str) - local t = {} - local function helper(line) table.insert(t, line) return '' end - helper((str:gsub('(.-)\r?\n', helper))) - return t -end --- -function bin:find(...) - return self.data:find(...) -end -function bin.fromhex(str) - return (str:gsub('..', function (cc) - return string.char(tonumber(cc, 16)) - end)) -end - --- working lua base64 codec (c) 2006-2008 by Alex Kloss --- compatible with lua 5.1 --- http://www.it-rfc.de --- licensed under the terms of the LGPL2 -bin.base64chars = {[0]='A',[1]='B',[2]='C',[3]='D',[4]='E',[5]='F',[6]='G',[7]='H',[8]='I',[9]='J',[10]='K',[11]='L',[12]='M',[13]='N',[14]='O',[15]='P',[16]='Q',[17]='R',[18]='S',[19]='T',[20]='U',[21]='V',[22]='W',[23]='X',[24]='Y',[25]='Z',[26]='a',[27]='b',[28]='c',[29]='d',[30]='e',[31]='f',[32]='g',[33]='h',[34]='i',[35]='j',[36]='k',[37]='l',[38]='m',[39]='n',[40]='o',[41]='p',[42]='q',[43]='r',[44]='s',[45]='t',[46]='u',[47]='v',[48]='w',[49]='x',[50]='y',[51]='z',[52]='0',[53]='1',[54]='2',[55]='3',[56]='4',[57]='5',[58]='6',[59]='7',[60]='8',[61]='9',[62]='-',[63]='_'} -function bin.tob64(data) - local bytes = {} - local result = "" - for spos=0,string.len(data)-1,3 do - for byte=1,3 do bytes[byte] = string.byte(string.sub(data,(spos+byte))) or 0 end - result = string.format('%s%s%s%s%s',result,bin.base64chars[bits.rsh(bytes[1],2)],bin.base64chars[bits.lor(bits.lsh((bytes[1] % 4),4), bits.rsh(bytes[2],4))] or "=",((#data-spos) > 1) and bin.base64chars[bits.lor(bits.lsh(bytes[2] % 16,2), bits.rsh(bytes[3],6))] or "=",((#data-spos) > 2) and bin.base64chars[(bytes[3] % 64)] or "=") - end - return result -end -bin.base64bytes = {['A']=0,['B']=1,['C']=2,['D']=3,['E']=4,['F']=5,['G']=6,['H']=7,['I']=8,['J']=9,['K']=10,['L']=11,['M']=12,['N']=13,['O']=14,['P']=15,['Q']=16,['R']=17,['S']=18,['T']=19,['U']=20,['V']=21,['W']=22,['X']=23,['Y']=24,['Z']=25,['a']=26,['b']=27,['c']=28,['d']=29,['e']=30,['f']=31,['g']=32,['h']=33,['i']=34,['j']=35,['k']=36,['l']=37,['m']=38,['n']=39,['o']=40,['p']=41,['q']=42,['r']=43,['s']=44,['t']=45,['u']=46,['v']=47,['w']=48,['x']=49,['y']=50,['z']=51,['0']=52,['1']=53,['2']=54,['3']=55,['4']=56,['5']=57,['6']=58,['7']=59,['8']=60,['9']=61,['-']=62,['_']=63,['=']=nil} -function bin.fromb64(data) - local chars = {} - local result="" - for dpos=0,string.len(data)-1,4 do - for char=1,4 do chars[char] = bin.base64bytes[(string.sub(data,(dpos+char),(dpos+char)) or "=")] end - result = string.format('%s%s%s%s',result,string.char(bits.lor(bits.lsh(chars[1],2), bits.rsh(chars[2],4))),(chars[3] ~= nil) and string.char(bits.lor(bits.lsh(chars[2],4), bits.rsh(chars[3],2))) or "",(chars[4] ~= nil) and string.char(bits.lor(bits.lsh(chars[3],6) % 192, (chars[4]))) or "") - end - return result -end --- ^^ - -function bin:getB64() - return bin.tob64(self.data) -end -if table.unpack==nil then - table.unpack=unpack -end -function bin.tohex(str) - return (str:gsub('.', function (c) - return string.format('%02X', string.byte(c)) - end)) -end -function bin:streamData(a,b) - if type(a)=='table' then - a,b,t=table.unpack(a) - end - if type(a)=='number' and type(b)=='string' then - return bin.load(self.file,a,b),bin.load(self.file,a,b).data - else - error('Invalid args!!! Is do you have a valid stream handle or is this a streamable object?') - end -end -function bin.new(data,hex,b64) - data=data or "" - data=tostring(data) - local c = {} - setmetatable(c, bin) - if string.sub(data,1,2)=='0x' and hex then - data=string.sub(data,3) - data=bin.fromhex(data) - elseif hex then - data=bin.fromhex(data) - end - if b64 then - data=bin.fromb64(data) - end - c.data=data - c.t='bin' - c.Stream=false - return c -end -function bin.freshStream(file) - bin.new():tofile(file) - return bin.stream(file,false) -end -function bin.stream(file,l) - local c=bin.new() - if bin.streams[file]~=nil then - c.file=file - c.lock = l - c.workingfile=bin.streams[file].workingfile - c.Stream=true - return c - end - if bin.fileExist(file) then - c.file=file - c.lock = l - c.workingfile=io.open(file,'rb+') - else - c.file=file - c.lock = l - c.workingfile=io.open(file,'w') - io.close(c.workingfile) - c.workingfile=io.open(file,'rb+') - end - c.Stream=true - bin.streams[file]=c - return c -end -function bin:streamwrite(d,n) - if self:canStreamWrite() then - if n then - self.workingfile:seek('set',n) - else - self.workingfile:seek('set',self.workingfile:seek('end')) - end - self.workingfile:write(d) - end -end -function bin:streamread(a,b) - a=a-1 - local loc=self.workingfile:seek('cur') - self.workingfile:seek('set',a) - local dat=self.workingfile:read(b-a) - self.workingfile:seek('set',loc) - return dat -end -function bin:streamreadNext(a) - return self.workingfile:read(a) -end -function bin:close() - if self:canStreamWrite() then - self.workingfile:close() - end -end -function bin:flush() - if self:canStreamWrite() then - self.workingfile:flush() - else - self:tofile(self.filepath) - end -end -function bin:open() - if self:canStreamWrite() then - self.workingfile=io.open(self.file,'r+') - end -end -function bin:canStreamWrite() - return (self.Stream==true and self.lock==false) -end -function bin:getDataBuffer(a,b,filler) - if self:canStreamWrite() then - if not(a) and not(b) then - a=1 - b=math.huge - elseif a and not(b) then - b=a - a=1 - if self:getSize()=k then - me:streamwrite(string.char(v),k+(ss-1)) - elseif type(v)=="string" and s>=k then - if #v~=1 then - t:fillBuffer(v,k+(ss)) - elseif s>=k then - me:streamwrite(v,k+(ss-1)) - else - print("Buffer Overflow!") - end - else - print("Warning Attempting to index outside defined range!") - end - end, - __tostring=function(t) -- GOOD - return t:getBuffer() - end - } - c.t="buffer" - c.dataS={} - function c:getBuffer(a,b) -- GOOD - if not(a) and not(b) then - local str={} - for i=ss,max do - table.insert(str,me:streamread(i+(ss-1),i+(ss-1))) - end - return table.concat(str) - else - return me:streamread(a+(ss-1),b+(ss-1)) - end - end - function c:getData() -- GOOD - return self:getBuffer() - end - function c:getBufferTable() -- GOOD - local str={} - for i=ss,max do - table.insert(str,me:streamread(i+(ss-1),i+(ss-1))) - end - return str - end - function c:getBufferSize() -- GOOD - return #self:getBuffer() - end - function c:getlength() -- GOOD - return #self:getBuffer() - end - function c:tonumber(a,b) -- GOOD - return bin.new(self:getBuffer(a,b)):tonumber() - end - c.getSize=c.getlength - function c:fillBuffer(sg,a) -- GOOD - for i=#sg+(a-1),a,-1 do - if i<=max then - local ii=(a+#sg)-i - self[ii+(a-1)]=sg:sub(ii,ii) - else - return print("Buffer Overflow!") - end - end - return a,a+#sg-1 - end - setmetatable(c,mt) - return c - else - error("Stream not opened for writing!") - end -end -function bin.load(file,s,r) - if not(s) or not(r) then - if type(file)~="string" then return bin.new() end - local f = io.open(file, 'rb') - local content = f:read('*a') - f:close() - return bin.new(content) - end - s=s or 0 - r=r or -1 - if type(r)=='number' then - r=r+s-1 - elseif type(r)=='string' then - r=tonumber(r) or -1 - end - local f = io.open(file, 'rb') - f:seek('set',s) - local content = f:read((r+1)-s) - f:close() - local temp=bin.new(content) - temp.filepath=file - return temp -end -function bin:tofile(filename) - if not(filename) or self.Stream then return nil end - io.mkFile(filename,self.data) -end -function bin.trimNul(s) - for i=1,#s do - if s:sub(i,i)=='\0' then - return s:sub(1,i-1) - end - end - return s -end -function bin:match(pat) - return self.data:match(pat) -end -function bin:gmatch(pat) - return self.data:gmatch(pat) -end -function bin:getHash(n) - if self:getlength()==0 then - return "NaN" - end - n=(n or 32)/2 - local rand = randomGen:newND(1,self:getlength(),self:getlength()) - local h,g={},0 - for i=1,n do - g=rand:nextInt() - table.insert(h,bin.tohex(self:sub(g,g))) - end - return table.concat(h,'') -end -function bin:getRandomHash(n) - if self:getlength()==0 then - return "NaN" - end - n=(n or 32)/2 - local rand = randomGen:new(math.random(1,self:getlength()^2)) - local h,g={},0 - for i=1,n do - g=rand:randomInt(1,self:getlength()) - table.insert(h,bin.tohex(self:sub(g,g))) - end - return table.concat(h,'') -end -function bin:newDataBuffer(s,def) - local c={} - local mt={ - __index=function(t,k,v) - if k<=t.maxBuffer then - if t.dataS[k] then - return string.byte(t.dataS[k]) - else - return "NOINDEX" - end - else - return - end - end, - __newindex=function(t,k,v) - if type(v)=="number" and t.maxBuffer>=k then - t.dataS[k]=string.char(v) - elseif type(v)=="string" and t.maxBuffer>=k then - if #v~=1 then - t:fillBuffer(v,k) - elseif t.maxBuffer>=k then - t.dataS[k]=v - else - print("Buffer Overflow!") - end - end - end, - __tostring=function(t) - return t:getBuffer() - end - } - c.t="buffer" - c.dataS={} - if s then - if type(s)=="number" then - c.maxBuffer=s - s=string.rep(def or"\0",s) - else - c.maxBuffer=math.huge - end - for i=1,#s do - c.dataS[i]=s:sub(i,i) - end - else - c.maxBuffer=math.huge - end - function c:getBuffer(a,b) - if a and b then - return table.concat(self.dataS,""):sub(a,b) - else - return table.concat(self.dataS,"") - end - end - function c:getData() - return table.concat(self.dataS,"") - end - function c:getBufferTable() - return self.dataS - end - function c:getBufferSize() - if self.maxBuffer~=math.huge then - return self.maxBuffer - end - return #self:getBuffer() - end - function c:getlength() - return #self:getBuffer(a,b) - end - function c:tonumber(a,b) - return bin.new(self:getBuffer(a,b)):tonumber() - end - c.getSize=c.getlength - function c:fillBuffer(s,a) - for i=0,#s-1 do - if i+a<=self.maxBuffer then - c.dataS[i+a]=s:sub(i+1,i+1) - else - return "Buffer Overflow!" - end - end - return a,a+#s-1 - end - setmetatable(c,mt) - return c -end -function bin:getHash2(h,n) - n=n or 1024 - h=(h or 32) - local temp=bin.new() - local len=self:getSize() - local seg=math.ceil(len/n) - temp:fill("\0",h) - for i=1,seg do - local s=bin.new(self:sub(n*(i-1)+1,n*i)):getHash(h) - for i=1,h do - temp:shiftbit(string.byte(s:sub(i,i)),i) - end - end - return temp:getHEX() -end -function bin.encryptA(data,seed) - seed=seed or 1 - local d=bin.new(data) - local r=randomGen:newND(1,#d.data,seed) - for i=1,#d.data do - d:shiftbit(r:nextInt(),i) - end - return bin.tohex(d.data) -end -function bin.decryptA(data,seed) - seed=seed or 1 - local d=bin.new('0x'..data) - local r=randomGen:newND(1,#d.data,seed) - for i=1,#d.data do - d:shiftbit(-r:nextInt(),i) - end - return d.data -end -function bin.encryptB(data,seed) - seed=seed or 'abcdefghijklmnopqrstuvwxyz' - seed=tostring(seed) - local d=bin.new(data) - local r,mr=1,#seed - for i=1,#d.data do - d:shiftbit(string.byte(seed:sub(r,r)),i) - r=r+1 - if r>mr then - r=1 - end - end - return bin.tohex(d.data) -end -function bin.decryptB(data,seed) - seed=seed or 'abcdefghijklmnopqrstuvwxyz' - seed=tostring(seed) - local d=bin.new('0x'..data) - local r,mr=1,#seed - for i=1,#d.data do - d:shiftbit(-string.byte(seed:sub(r,r)),i) - r=r+1 - if r>mr then - r=1 - end - end - return d.data -end -function bin:encrypt(seed) - seed=seed or 'abcdefghijklmnopqrstuvwxyz' - seed=tostring(seed) - local r,mr=1,#seed - for i=1,self:getlength() do - self:shiftbit(string.byte(seed:sub(r,r)),i) - r=r+1 - if r>mr then - r=1 - end - end -end -function bin:decrypt(seed) - seed=seed or 'abcdefghijklmnopqrstuvwxyz' - seed=tostring(seed) - local r,mr=1,#seed - for i=1,self:getlength() do - self:shiftbit(-string.byte(seed:sub(r,r)),i) - r=r+1 - if r>mr then - r=1 - end - end -end -function bin.randomName(n,ext) - n=n or math.random(7,15) - if ext then - a,b=ext:find('.',1,true) - if a and b then - ext=ext:sub(2) - end - end - local str,h = '',0 - strings = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} - for i=1,n do - h = math.random(1,#strings) - str = str..''..strings[h] - end - return str..'.'..(ext or 'tmp') -end -function bin.newTempFile(data) - data=data or '' - local name=bin.randomName() - bin.new():tofile(name) - local tempfile=bin.stream(name,false) - tempfile:streamwrite(data,0) - tempfile:setEndOfFile(#data) - return tempfile -end -function bin:wipe() - if self:canStreamWrite() then - self:close() - os.remove(self.file) - self:open() - else - self.data='' - end -end -function bin:setEndOfFile(n) - if self:canStreamWrite() then - local name=bin.randomName() - local tempfile=bin.stream(name,false) - tempfile:streamwrite(self:sub(0,n-1)) - self:close() - os.remove(self.file) - tempfile:close() - os.rename(name,self.file) - self:open() - tempfile=nil - else - self.data=self.data:sub(1,n) - end -end -function bin:reverse() - if self:canStreamWrite() then - local x,f,b=self:getlength(),0,0 - for i=0,math.floor((x-1)/2) do - self:streamwrite(self:sub(i+1,i+1),x-i-1) - self:streamwrite(self:sub(x-i,x-i),i) - end - elseif self.Stream==false then - self.data=string.reverse(self.data) - end -end -function bin:flipbits() - if self:canStreamWrite() then - for i=0,self:getlength()-1 do - self:streamwrite(string.char(255-string.byte(self:streamread(i,i))),i) - end - elseif self.Stream==false then - local temp={} - for i=1,#self.data do - table.insert(temp,string.char(255-string.byte(string.sub(self.data,i,i)))) - end - self.data=table.concat(temp,'') - end -end -function bin:flipbit(i) - if self:canStreamWrite() then - self:streamwrite(string.char(255-string.byte(self:streamread(i-1,i-1))),i-1) - elseif self.Stream==false then - self:mutate(string.char(255-string.byte(string.sub(self.data,i,i))),i) - end -end -function bin:segment(a,b) -- needs to be updated!!! - if self:canStreamWrite() then - --[[local pos=1 - for i=a,b do - self:streamwrite(self:sub(i,i),b-a-i) - end]] - local temp=self:sub(a,b) - self:close() - local f=io.open(self.file,'w') - f:write(temp) - io.close(f) - self:open() - elseif self.Stream==false then - self.data=string.sub(self.data,a,b) - end -end -function bin:insert(i,a) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - if type(i)=='number' then i=string.char(i) end - self.data=string.sub(self.data,1,a)..i..string.sub(self.data,a+1) - end -end -function bin:parseN(n) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - local temp={} - for i=1,#self.data do - if i%n==0 then - table.insert(temp,string.sub(self.data,i,i)) - end - end - self.data=table.concat(temp,'') - end -end -function bin:parse(n,f) - local f = f - local n=n or 1 - if not(f) then return end - for i=1,self:getlength() do - if i%n==0 then - f(i,self,self:sub(i,i)) - end - end -end -function bin.copy(file,tofile,s) - if not(s) then - bin.load(file):tofile(tofile) - else - rf=bin.stream(file) - wf=bin.stream(tofile,false) - for i=1,rf:getlength(),s do - wf:streamwrite(rf:sub(i,i-1+s)) - end - end -end -function bin:getlength() - if self.Stream then - if self.workingfile==nil then print("Error getting size of file!") return 0 end - local current = self.workingfile:seek() -- get current position - local size = self.workingfile:seek('end') -- get file size - self.workingfile:seek('set', current) -- restore position - return size - elseif self.Stream==false then - return #self.data - end -end -function bin:sub(a,b) - if self.Stream then - return bin.load(self.file,a-1,tostring(b-1)).data - elseif self.Stream==false then - return string.sub(self.data,a,b) - end -end -function bin:tackB(d) - if self:canStreamWrite() then - -- do something don't know if possible - elseif self.Stream==false then - self.data=d..self.data - end -end -function bin:tackE(d) - if type(d)=='table' then - if d:canStreamWrite() then - d=d:sub(1,d:getlength()) - else - d=d.data - end - return - end - if self:canStreamWrite() then - self:streamwrite(d) - elseif self.Stream==false then - self.data=self.data..d - end -end -function bin:clone(filename) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - return bin.new(self.data) - end -end -function bin.closeto(a,b,v) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - if type(a)~=type(b) then - error('Attempt to compare unlike types') - elseif type(a)=='number' and type(b)=='number' then - return math.abs(a-b)<=v - elseif type(a)=='table' and type(b)=='table' then - if a.data and b.data then - return (math.abs(string.byte(a.data)-string.byte(b.data)))<=v - else - error('Attempt to compare non-bin data') - end - elseif type(a)=='string' and type(b)=='string' then - return math.abs(string.byte(a)-string.byte(b))<=v - else - error('Attempt to compare non-bin data') - end - end -end -function bin:compare(_bin,t) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - t=t or 1 - local tab={} - local a,b=self:getlength(),_bin:getlength() - if not(a==b) then - print('Unequal Lengths!!! Equalizing...') - if a>b then - _bin.data=_bin.data..string.rep(string.char(0),a-b) - else - self.data=self.data..string.rep(string.char(0),b-a) - end - end - if t==1 then - for i=1,self:getlength() do - table.insert(tab,self:sub(i,i)==_bin:sub(i,i)) - end - else - for i=1,self:getlength() do - table.insert(tab,bin.closeto(self:sub(i,i),_bin:sub(i,i),t)) - end - end - local temp=0 - for i=1,#tab do - if tab[i]==true then - temp=temp+1 - end - end - return (temp/#tab)*100 - end -end -function bin:shift(n) - if self:canStreamWrite() then - local a,b,x,p='','',self:getlength(),0 - for i=1,x do - if i+n>x then - p=(i+n)-(x) - else - p=i+n - end - end - elseif self.Stream==false then - n=n or 0 - local s=#self.data - if n>0 then - self.data = string.sub(self.data,s-n+1)..string.sub(self.data,1,s-n) - elseif n<0 then - n=math.abs(n) - self.data = string.sub(self.data,n+1)..string.sub(self.data,1,n*1) - end - end -end -function bin:delete(a,b) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - if type(a)=='string' then - local tab={} - for i=1,self:getlength() do - if self:getbyte(i)~=string.byte(a) then - table.insert(tab,self:sub(i,i)) - end - end - self.data=table.concat(tab) - elseif a and not(b) then - self.data=self:sub(1,a-1)..self:sub(a+1) - elseif a and b then - self.data=self:sub(1,a-1)..self:sub(b+1) - else - self.data='' - end - end -end -function bin:tonumber(a,b) - local temp={} - if a then - temp.data=self:sub(a,b) - else - temp=self - end - local l,r=0,0 - local g=#temp.data - for i=1,g do - r=r+(256^(g-i))*string.byte(string.sub(temp.data,i,i)) - l=l+(256^(i-1))*string.byte(string.sub(temp.data,i,i)) - end - return r,l -end -function bin:getbyte(n) - return string.byte(self:sub(n,n)) -end -function bin:shuffle(s) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - s=tonumber(s) or 4546 - math.randomseed(s) - local t={} - for i=1,self:getlength() do - table.insert(t,self:sub(i,i)) - end - local n = #t - while n >= 2 do - local k = math.random(n) - t[n], t[k] = t[k], t[n] - n = n - 1 - end - self.data=table.concat(t) - end -end -function bin:tobits(i) - return bits.new(self:getbyte(i)) -end -function bin:mutate(a,i) - if self:canStreamWrite() then - self:streamwrite(a,i-1) - elseif self.Stream==false then - self:delete(i) - self:insert(a,i-1) - end -end -function bin:parseA(n,a,t) - if self:canStreamWrite() then - -- do something - elseif self.Stream==false then - local temp={} - for i=1,#self.data do - if i%n==0 then - if t then - table.insert(temp,a) - table.insert(temp,string.sub(self.data,i,i)) - else - table.insert(temp,string.sub(self.data,i,i)) - table.insert(temp,a) - end - else - table.insert(temp,string.sub(self.data,i,i)) - end - end - self.data=table.concat(temp,'') - end -end -function bin:merge(o,t) - if self:canStreamWrite() then - self:close() - self.workingfile=io.open(self.file,'a+') - self.workingfile:write(o.data) - self:close() - self:open() - elseif self.Stream==false then - if not(t) then - self.data=self.data..o.data - else - seld.data=o.data..self.data - end - end -end -function bin:cryptM() - self:flipbits() - self:reverse() -end -function bin.escapeStr(str) - local temp='' - for i=1,#str do - temp=temp..'\\'..string.byte(string.sub(str,i,i)) - end - return temp -end - -function bin.ToStr(val, name, skipnewlines, depth) - skipnewlines = skipnewlines or false - depth = depth or 0 - local tmp = string.rep(" ", depth) - if name then - if type(name) == "string" then - tmp = tmp .. "[\""..name.."\"] = " - else - tmp = tmp .. "["..(name or "").."] = " - end - end - if type(val) == "table" then - tmp = tmp .. "{" .. (not skipnewlines and " " or "") - for k, v in pairs(val) do - tmp = tmp .. bin.ToStr(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and " " or "") - end - tmp = tmp .. string.rep(" ", depth) .. "}" - elseif type(val) == "number" then - tmp = tmp .. tostring(val) - elseif type(val) == "string" then - tmp = tmp .. string.format("%q", val) - elseif type(val) == "boolean" then - tmp = tmp .. (val and "true" or "false") - else - tmp = tmp .. "\"[inserializeable datatype:" .. type(val) .. "]\"" - end - return tmp -end -function bin:addBlock(d,n,e) - local temp={} - if type(d)=='table' then - if d.t=='bin' then - temp=d - elseif d.t=='bit' then - temp=bin.new(d:tobytes()) - else - self:addBlock('return '..bin.ToStr(d)) - return - end - elseif type(d)=='string' then - temp=bin.new(d) - if e or not(n) then - temp.data=temp.data..'_EOF' - temp:flipbits() - end - elseif type(d)=='function' then - temp=bin.new(string.dump(d)) - if e or not(n) then - temp.data=temp.data..'_EOF' - temp:flipbits() - end - elseif type(d)=='number' then - local nn=tostring(d) - if nn:find('.',1,true) then - temp=bin.new(nn) - temp.data=temp.data..'_EOF' - temp:flipbits() - else - temp=bits.new(d):tobytes() - if not n then - temp.data=temp.data..'_EOF' - temp:flipbits() - end - end - elseif type(d)=='boolean' then - n=1 - if d then - temp=bits.new(math.random(0,127)):tobytes() - else - temp=bits.new(math.random(128,255)):tobytes() - end - end - if n then - if temp:getlength()n then - temp:segment(1,n) - end - end - self:merge(temp) -end -function bin:getBlock(t,n,se) - if not(self.Block) then - self.Block=1 - end - local x=self.Block - local temp=bin.new() - if n then - temp=bin.new(self:sub(x,x+n-1)) - self.Block=self.Block+n - end - if se then - self.Block=self.Block+se - end - if t=='stringe' or t=='stre' or t=='se' and n then - temp:flipbits() - bin.lastBlockSize=#temp - return temp.data - elseif t=='string' or t=='str' or t=='s' and n then - bin.lastBlockSize=#temp - return temp.data - elseif t=='number' or t=='num' or t=='n' and n then - bin.lastBlockSize=n - return self:tonumber(x,x+n-1) - elseif t=='boolean' or t=='bool' or t=='b' then - self.Block=self.Block+1 - bin.lastBlockSize=1 - return self:tonumber(x,x)<127 - elseif t=='stringe' or t=='stre' or t=='se' or t=='string' or t=='str' or t=='s' then - local a,b=self:scan('_EOF',self.Block,true) - if not(b) then return nil end - local t=bin.new(self:sub(self.Block,b-4)) - bin.lastBlockSize=t:getlength() - t:flipbits() - self.Block=self.Block+t:getlength()+4 - return tostring(t) - elseif t=='table' or t=='tab' or t=='t' then - temp=self:getBlock('s') - bin.lastBlockSize=#temp - return assert(loadstring(temp))() - elseif t=='function' or t=='func' or t=='f' then - local temp=self:getBlock('s') - bin.lastBlockSize=#temp - return assert(loadstring(temp)) - elseif t=='number' or t=='num' or t=='n' then - local num=bin.new(self:getBlock('s')) - bin.lastBlockSize=#num - if tonumber(num.data) then - return tonumber(num.data) - end - local a,b=num:tonumber() - return a - elseif n then - -- C data - else - print('Invalid Args!!!') - end -end -function bin:seek(n) - self.Block=self.Block+n -end -function bin.NumtoHEX(num) - local hexstr = '0123456789ABCDEF' - local s = '' - while num > 0 do - local mod = math.fmod(num, 16) - s = string.sub(hexstr, mod+1, mod+1) .. s - num = math.floor(num / 16) - end - if s == '' then - s = '0' - end - return s -end -function bin:getHEX(a,b,e) - a=a or 1 - local temp = self:sub(a,b) - if e then temp=string.reverse(temp) end - return bin.tohex(temp) -end -function bin.HEXtoBin(hex,e) - if e then - return bin.new(string.reverse(bin.fromhex(hex))) - else - return bin.new(bin.fromhex(hex)) - end -end -function bin.HEXtoStr(hex,e) - if e then - return string.reverse(bin.fromhex(hex)) - else - return bin.fromhex(hex) - end -end -function bin:morph(a,b,d) - if self:canStreamWrite() then - local len=self:getlength() - local temp=bin.newTempFile(self:sub(b+1,self:getlength())) - self:streamwrite(d,a-1) - print(temp:sub(1,temp:getlength())) - self:setEndOfFile(len+(b-a)+#d) - self:streamwrite(temp:sub(1,temp:getlength()),a-1) - temp:remove() - elseif self.Stream==false then - if a and b then - self.data=self:sub(1,a-1)..d..self:sub(b+1) - else - print('error both arguments must be numbers and the third a string') - end - end -end -function bin.endianflop(data) - return string.reverse(data) -end -function bin:scan(s,n,f) - n=n or 1 - if self.Stream then - for i=n,self:getlength() do - if f then - local temp=bin.new(self:sub(i,i+#s-1)) - temp:flipbits() - if temp.data==s then - return i,i+#s-1 - end - else - if self:sub(i,i+#s-1)==s then - return i,i+#s-1 - end - end - end - elseif self.Stream==false then - if f then - s=bin.new(s) - s:flipbits() - s=s.data - end - n=n or 1 - local a,b=string.find(self.data,s,n,true) - return a,b - end -end -function bin:fill(s,n) - if self:canStreamWrite() then - self:streamwrite(string.rep(s,n),0) - self:setEndOfFile(n*#s) - elseif self.Stream==false then - self.data=string.rep(s,n) - end -end -function bin:fillrandom(n) - if self:canStreamWrite() then - local t={} - for i=1,n do - table.insert(t,string.char(math.random(0,255))) - end - self:streamwrite(table.concat(t),0) - self:setEndOfFile(n) - elseif self.Stream==false then - local t={} - for i=1,n do - table.insert(t,string.char(math.random(0,255))) - end - self.data=table.concat(t) - end -end -function bin.packLLIB(name,tab,ext) - local temp=bin.new() - temp:addBlock('') - temp:addBlock(bin.getVersion()) - temp:addBlock(tab) - for i=1,#tab do - temp:addBlock(tab[i]) - temp:addBlock(bin.load(tab[i]).data) - end - temp:addBlock('Done') - temp:tofile(name.. ('.'..ext or '.llib')) -end -function bin.unpackLLIB(name,exe,todir,over,ext) - local temp=bin.load(name..('.'..ext or '.llib')) - local name='' - Head=temp:getBlock('s') - ver=temp:getBlock('s') - infiles=temp:getBlock('t') - if ver~=bin.getVersion() then - print('Incompatable llib file') - return nil - end - local tab={} - while name~='Done' do - name,data=temp:getBlock('s'),bin.new(temp:getBlock('s')) - if string.find(name,'.lua',1,true) then - table.insert(tab,data.data) - else - if not(bin.fileExist((todir or '')..name) and not(over)) then - data:tofile((todir or '')..name) - end - end - end - os.remove((todir or '')..'Done') - if exe then - for i=1,#tab do - assert(loadstring(tab[i]))() - end - end - return infiles -end -function bin.fileExist(path) - g=io.open(path or '','r') - if path =='' then - p='empty path' - return nil - end - if g~=nil and true or false then - p=(g~=nil and true or false) - end - if g~=nil then - io.close(g) - else - return false - end - return p -end -function bin:shiftbits(n) - if self:canStreamWrite() then - n=n or 0 - if n>=0 then - for i=0,self:getlength() do - print(string.byte(self:sub(i,i))+n%256) - self:streamwrite(string.char(string.byte(self:sub(i,i))+n%256),i-1) - end - else - n=math.abs(n) - for i=0,self:getlength() do - self:streamwrite(string.char((string.byte(self:sub(i,i))+(256-n%256))%256),i-1) - end - end - elseif self.Stream==false then - n=n or 0 - if n>=0 then - for i=1,self:getlength() do - self:morph(i,i,string.char(string.byte(self:sub(i,i))+n%256)) - end - else - n=math.abs(n) - for i=1,self:getlength() do - self:morph(i,i,string.char((string.byte(self:sub(i,i))+(256-n%256))%256)) - end - end - end -end -function bin:shiftbit(n,i) - if self:canStreamWrite() then - i=i-1 - n=n or 0 - if n>=0 then - print((string.byte(self:sub(i,i))+n)%256,n) - self:streamwrite(string.char((string.byte(self:sub(i,i))+n)%256),i-1) - else - n=math.abs(n) - print((string.byte(self:sub(i,i))+(256-n))%256,n) - self:streamwrite(string.char((string.byte(self:sub(i,i))+(256-n%256))%256),i-1) - end - elseif self.Stream==false then - n=n or 0 - if n>=0 then - self:morph(i,i,string.char((string.byte(self:sub(i,i))+n)%256)) - else - n=math.abs(n) - self:morph(i,i,string.char((string.byte(self:sub(i,i))+(256-n%256))%256)) - end - end -end -function bin.decodeBits(par) - if type(par)=='table' then - if par.t=='bit' then - return bin.new(par:toSbytes()) - end - else - if par:find(' ') then - par=par:gsub(' ','') - end - local temp=bits.new() - temp.data=par - return bin.new((temp:toSbytes()):reverse()) - end -end -function bin.textToBinary(txt) - return bin.new(bits.new(txt:reverse()):getBin()) -end -function bin:getData() - if self.Stream then - return self:sub(1,self:getSize()) - else - return self.data - end -end -function bin.getLuaVersion() - if type(jit)=="table" then - if jit.version then - return "JIT",jit.version - end - end - return "PUC",_VERSION:match("(%d-)%.(%d+)") -end -function bin.binToBuffer(b) - return bin:newDataBuffer(b.data) -end -function bin.bufferToBin(b) - return bin.new(b:getBuffer()) -end -function bin.newNamedBlock(indexSize) - local c={} - c.data=bin.new() - c.lastLoc=0 - if indexSize then - indexSize=indexSize+4 - end - c.index=bin:newDataBuffer(indexSize) - c.conv={ - ["n"]="\1", - ["b"]="\2", - ["s"]="\3", - ["t"]="\4", - ["f"]="\5" - } - if indexSize then - c.index:fillBuffer(bits.numToBytes(indexSize,4),1) - c.lastLoc=4 - else - --c.index:fillBuffer(bits.numToBytes(2048,4),1) - end - function c:tofile(path) - bin.new(self:tostring()):tofile(path) - end - function c:tostring() - c.index:fillBuffer(bits.numToBytes(c.index:getSize()-4,4),1) - return self.index:getBuffer()..self.data.data - end - function c:setPointer(name,data,t) - t=c.conv[t] - data=t..data - local dSize=#data - local index=bin:newDataBuffer() - local nLen=#name - local test="" - index:fillBuffer(bits.numToBytes(self.data:getSize()+1,4),1) - index:fillBuffer(name,5) - self.data:tackE(data) - test=self.index:fillBuffer(index:getBuffer().."\31",self.lastLoc+1) - self.lastLoc=self.lastLoc+1+index:getBufferSize() - if test=="Buffer Overflow!" then - error("Increase Index size!") - end - end - function c:addNamedBlock(name,value) - local bSize=#name - local ftype={} - if type(value)=="number" then - local dat=bits.numToBytes(value,8) -- makes 64 bit version of lua compatable - self:setPointer(name,dat,"n") - elseif type(value)=="boolean" then - if value then - self:setPointer(name,"1","b") - else - self:setPointer(name,"0","b") - end - elseif type(value)=="string" then - self:setPointer(name,value,"s") - elseif type(value)=="table" then - local str=bin.ToStr(value) - self:setPointer(name,str,"t") - elseif type(value)=="function" then - local ver,verM,verm=bin.getLuaVersion() - local data=string.dump(value) - if ver=="JIT" then - ftype=bin:newDataBuffer(bits.numToBytes(0,4)) -- luajit version - else - ftype=bin:newDataBuffer(bits.numToBytes(tonumber(verM..verm),4)) -- lua version with MajorMinor data - end - local fdata=bin.new() - fdata:tackE(ftype:getBuffer()..data) - self:setPointer(name,fdata.data,"f") - elseif type(value)=="userdata" then - error("Userdata cannot be put into a block!") - end - end - if not indexSize then - c:addNamedBlock("__UNBOUNDEDINDEX__",true) - end - return c -end -function bin.newStreamedNamedBlock(indexSize,path,update) - local c={} - c.data=bin.stream(path,false) - c.lastLoc=4 - c.conv={ - ["n"]="\1", - ["b"]="\2", - ["s"]="\3", - ["t"]="\4", - ["f"]="\5" - } - if not update then - c.data:tackE(bin:newDataBuffer(indexSize+4 or 2052):getBuffer()) - if indexSize then - c.data:mutate(bits.numToBytes(indexSize,4),1) - else - c.data:mutate(bits.numToBytes(2048,4),1) - end - c.indexSize=indexSize+4 or 2052 - else - c.indexSize=c.data:tonumber(1,4) - local i=bin.new(c.data:sub(5,c.indexSize+4)).data - local last=0 - for b=#i,1,-1 do - if i:sub(b,b)=="\31" then - last=b+4 - break - end - end - c.lastLoc=last - end - function c:tofile(path) - --No need when using a streamed block - end - function c:tostring() - return self.index:getBuffer()..self.data.data - end - function c:setPointer(name,data,t) - t=c.conv[t] - data=t..data - local dSize=#data - local index=bin:newDataBuffer() - local nLen=#name - local test="" - index:fillBuffer(bits.numToBytes((self.data:getSize()+1)-self.indexSize,4),1) - index:fillBuffer(name,5) - local test=self.data:mutate(index:getBuffer().."\31",self.lastLoc+1) - self.lastLoc=self.lastLoc+1+index:getBufferSize() - self.data:tackE(data) - if test=="Buffer Overflow!" then - error("Increase Index size!") - end - end - function c:addNamedBlock(name,value) - local bSize=#name - local ftype={} - if type(value)=="number" then - local dat=bits.numToBytes(value,8) -- makes 64 bit version of lua compatable - self:setPointer(name,dat,"n") - elseif type(value)=="boolean" then - if value then - self:setPointer(name,"1","b") - else - self:setPointer(name,"0","b") - end - elseif type(value)=="string" then - self:setPointer(name,value,"s") - elseif type(value)=="table" then - local str=bin.ToStr(value) - self:setPointer(name,str,"t") - elseif type(value)=="function" then - local ver,verM,verm=bin.getLuaVersion() - local data=string.dump(value) - if ver=="JIT" then - ftype=bin:newDataBuffer(bits.numToBytes(0,4)) -- luajit version - else - ftype=bin:newDataBuffer(bits.numToBytes(tonumber(verM..verm),4)) -- lua version with MajorMinor data - end - local fdata=bin.new() - fdata:tackE(ftype:getBuffer()..data) - self:setPointer(name,fdata.data,"f") - elseif type(value)=="userdata" then - error("Userdata cannot be put into a block!") - end - end - function c:close() - self:addNamedBlock("",false) - self.data:close() - end - return c -end -function bin.loadNamedBlock(path) - local c={} - c.data=bin.stream(path) - c.iSize=c.data:tonumber(1,4) - c.index=bin.new(c.data:sub(5,c.iSize+4)) - c.sData=bin.new(c.data:sub(c.iSize+5,-1)) - function c:CheckRestOfIndex(name) - local a,b=self.index:scan(name) - local d=self.index:tonumber(b+2,b+5) - if d==0 or b+5>self.iSize then - return -1 - end - return d - end - function c:getIndexes() - local tab={} - ind=5 - while ind do - local a=self.index:find("\31",ind) - if not a then break end - local b=self.index:sub(ind,a-1) - table.insert(tab,b) - ind=a+5 - end - return tab - end - function c:getBlock(name) - local a,b=self.index:scan(name) - if not a then return "index not found" end - local dloc=self.index:tonumber(a-4,a-1) - local dindex=bin:newDataBuffer(self.sData:sub(dloc,dloc)) - if dindex[1]==0x01 then -- type number - return self.sData:tonumber(dloc+1,dloc+8) - elseif dindex[1]==0x02 then -- type bool - return ({[1]=true,[0]=false})[tonumber(self.sData:sub(dloc+1,dloc+1))] - elseif dindex[1]==0x03 then -- type string - local dend=self:CheckRestOfIndex(name)--self.index:tonumber(b+2,b+5) - return self.sData:sub(dloc+1,dend-1) - elseif dindex[1]==0x04 then -- type table - local dend=self.index:tonumber(b+2,b+5) - return loadstring("return "..self.sData:sub(dloc+1,dend-1))() - elseif dindex[1]==0x05 then -- type function - local dend=self:CheckRestOfIndex(name)--self.index:tonumber(b+2,b+5) - local _ver=self.sData:tonumber(dloc+1,dloc+4) - local ver,verM,verm=bin.getLuaVersion() - if tonumber(verM..verm)==_ver then - return loadstring(self.sData:sub(dloc+5,dend-1)) - else - return function() error("This lua function is not compatible with the current version of lua!") end - end - end - end - return c -end -function bin.namedBlockManager(name) - if type(name)=="string" then - local i={} - local data=bin.loadNamedBlock(name) - local mt={ - __index=function(t,k) - return data:getBlock(k) - end, - } - setmetatable(i,mt) - return i - else - local i={} - local data=bin.newNamedBlock(name) - local mt={ - __newindex=function(t,k,v) - data:addNamedBlock(k,v) - end, - __index=data - } - setmetatable(i,mt) - return i - end -end -function bin.getIndexSize(tab) - size=0 - for i=1,#tab do - size=size+#tab[i]+5 - end - return size+5 -end -function bin.gcd( m, n ) - while n ~= 0 do - local q = m - m = n - n = q % n - end - return m -end -function bin.numToFraction(num) - num=num or error("Must enter a number!") - local n=#tostring(num) - num=num*(10^n) - local d=(10^n) - local g=bin.gcd(num,d) - return tostring(num/g).."/"..tostring(d/g),num/g,d/g -end -function bin.doubleToString(double) - local s=({[false]="-",[true]="+"})[double>=0] - double=math.abs(double) - local _,n,d=bin.numToFraction(double) - gfit=4 - local a=bits.numToBytes(n,gfit,function(ref) - ref.fit=12 -- should be able to pack any number into that space - ref.num=string.rep("\0",12-#ref.num)..ref.num - if s=="-" then - s="_" - else - s="=" - end - gfit=12 - end) - local b=bits.numToBytes(d,gfit) - return s..a..b -end -function bin.stringToDouble(str) - local s=str:sub(1,1) - if #str~=9 and #str~=25 then - if s~="-" and s~="+" and s~="_" and s~="=" then - print(s) - error("Not a double encoded string") - end - error("Not a double encoded string") - end - local n,d - if s=="_" or s=="=" then - n,d=str:sub(2,13),str:sub(14) - else - n,d=str:sub(2,5),str:sub(6) - end - local n=bin.new(n):tonumber() - local d=bin.new(d):tonumber() - local num=n/d - if s=="-" or s=="_" then - num=-num - end - return num -end ---[[---------------------------------------- -VFS -------------------------------------------]] -local _require = require -function require(path,vfs) - if bin.fileExist(path..'.lvfs') then - local data = bin.loadVFS(path..'.lvfs') - if data:fileExist(vsf) then - loadstring(data:readFile(vfs))() - end - else - return _require(path) - end -end -function bin.loadVFS(path) - local vfs=bin.newVFS() - local temp=bin.stream(path,false) - local files=temp:getBlock("t") - local size=0 - for i=1,#files do - local p,len=files[i]:match("(.-)|(.+)") - len=tonumber(len) - size=size+bin.lastBlockSize - local dat=temp:sub(size+5,size+len+4) - bin.lastBlockSize=len - vfs:mkfile(p:gsub("%./",""),dat) - end - return vfs -end -function bin.copyDir(dir,todir) - local vfs=bin.newVFS(dir,true) - vfs:toFS(todir) - vfs=nil -end -function bin.newVFS(t,l) - l=l or true - if type(t)=='string' then - t=io.parseDir(t,l) - end - local c={} - c.FS= t or {} - function c:merge(vfs) - bin.newVFS(table.merge(self.FS,vfs.FS)) - end - function c:mirror(file) - self:mkfile(file,file) - end - function c:mkdir(path) - table.merge(self.FS,io.pathToTable(path)) - end - function c:scanDir(path) - path=path or '' - local tab={} - if path=='' then - for i,v in pairs(self.FS) do - tab[#tab+1]=i - end - return tab - end - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath-1 do - last=last[spath[i]] - end - return last[spath[#spath]] - end - function c:getFiles(path) - if not self:dirExist(path) then return end - path=path or '' - local tab={} - if path=='' then - for i,v in pairs(self.FS) do - if self:fileExist(i) then - tab[#tab+1]=i - end - end - return tab - end - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath-1 do - last=last[spath[i]] - end - local t=last[spath[#spath]] - for i,v in pairs(t) do - if self:fileExist(path..'/'..i) then - tab[#tab+1]=path..'/'..i - end - end - return tab - end - function c:getDirectories(path) - if not self:dirExist(path) then return end - path=path or '' - local tab={} - if path=='' then - for i,v in pairs(self.FS) do - if self:dirExist(i) then - tab[#tab+1]=i - end - end - return tab - end - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath-1 do - last=last[spath[i]] - end - local t=last[spath[#spath]] - for i,v in pairs(t) do - if self:dirExist(path..'/'..i) then - tab[#tab+1]=path..'/'..i - end - end - return tab - end - function c:mkfile(path,data) - local name=io.getFullName(path) - local temp=path:reverse() - local a,b=temp:find('/') - if not a then - a,b=temp:find('\\') - end - if a then - temp=temp:sub(a+1):reverse() - path=temp - local t,l=io.pathToTable(path) - l[name]=data - table.merge(self.FS,t) - else - self.FS[name]=data - end - end - function c:remove(path) - if path=='' or path==nil then return end - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath-1 do - last=last[spath[i]] - end - last[spath[#spath]]=nil - end - function c:readFile(path) - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath do - last=last[spath[i]] - end - if type(last)=='userdata' then - last=last:read('*all') - end - return last - end - function c:copyFile(p1,p2) - self:mkfile(p2,self:readFile(p1)) - end - function c:moveFile(p1,p2) - self:copyFile(p1,p2) - self:remove(p1) - end - function c:fileExist(path) - return type(self:readFile(path))=='string' - end - function c:dirExist(path) - if path=='' or path==nil then return end - spath=io.splitPath(path) - local last=self.FS - for i=1,#spath-1 do - last=last[spath[i]] - end - if last[spath[#spath]]~=nil then - if type(last[spath[#spath]])=='table' then - return true - end - end - return false - end - function c:_getHierarchy() - local ord={} - local datlink=bin.new() - local function toStr(val, name, skipnewlines, depth, path) - skipnewlines = skipnewlines or false - path=path or "." - depth = depth or 0 - local tmp = string.rep(" ", depth) - if name then - if type(name) == "string" then - tmp = tmp .. "[\""..name.."\"] = " - else - tmp = tmp .. "["..(name or "").."] = " - end - end - if type(val) == "table" then - tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") - for k, v in pairs(val) do - tmp = tmp .. toStr(v, k, skipnewlines, depth + 1,path.."/"..k) .. "," .. (not skipnewlines and "\n" or "") - end - tmp = tmp .. string.rep(" ", depth) .. "}" - elseif type(val) == "string" then - tmp = tmp .. #val - datlink:tackE(val) - ord[#ord+1]=path.."|"..#val - end - return tmp - end - return toStr(self.FS),ord,datlink - end - function c:getHierarchy() - local ord={} - local function toStr(val, name, skipnewlines, depth, path) - skipnewlines = skipnewlines or false - path=path or "." - depth = depth or 0 - local tmp = string.rep(" ", depth) - if name then - if type(name) == "string" then - tmp = tmp .. "[\""..name.."\"] = " - else - tmp = tmp .. "["..(name or "").."] = " - end - end - if type(val) == "table" then - tmp = tmp .. "{" .. (not skipnewlines and "\n" or "") - for k, v in pairs(val) do - tmp = tmp .. toStr(v, k, skipnewlines, depth + 1,path.."/"..k) .. "," .. (not skipnewlines and "\n" or "") - end - tmp = tmp .. string.rep(" ", depth) .. "}" - elseif type(val) == "string" then - tmp = tmp .. ";" - ord[#ord+1]=path.."|"..#val - end - return tmp - end - return toStr(self.FS),ord - end - function c:tofile(path) - local temp=bin.new() - local h,o,link=self:_getHierarchy() - temp:addBlock(o) - temp:merge(link) - temp:tofile(path) - end - function c:toFS(path) - if path then - if path:sub(-1,-1)~='\\' then - path=path..'\\' - elseif path:find('/') then - path=path:gsub('/','\\') - end - io.mkDir(path) - else - path='' - end - function build(tbl, indent, folder) - if not indent then indent = 0 end - if not folder then folder = '' end - for k, v in pairs(tbl) do - formatting = string.rep(' ', indent) .. k .. ':' - if type(v) == 'table' then - if v.t~=nil then - io.mkFile(folder..k,tostring(v),'wb') - else - if not(io.dirExists(path..folder..string.sub(formatting,1,-2))) then - io.mkDir(folder..string.sub(formatting,1,-2)) - end - build(v,0,folder..string.sub(formatting,1,-2)..'\\') - end - elseif type(v)=='string' then - io.mkFile(folder..k,v,'wb') - elseif type(v)=='userdata' then - io.mkFile(folder..k,v:read('*all'),'wb') - end - end - end - build(self.FS,0,path) - end - function c:print() - table.print(self.FS) - end - return c -end ---[[---------------------------------------- -BITS -------------------------------------------]] -function bits.lsh(value,shift) - return (value*(2^shift)) % 256 -end -function bits.rsh(value,shift) - return math.floor(value/2^shift) % 256 -end -function bits.bit(x,b) - return (x % 2^b - x % 2^(b-1) > 0) -end -function bits.lor(x,y) - result = 0 - for p=1,8 do result = result + (((bits.bit(x,p) or bits.bit(y,p)) == true) and 2^(p-1) or 0) end - return result -end -function bits.newBitBuffer(n) - -- -end -function bits.newConverter(bitsIn,bitsOut) - local c={} - -- -end -bits.ref={} -function bits.newByte(d) - local c={} - if type(d)=="string" then - if #d>1 or #d<1 then - error("A byte must be one character!") - else - c.data=string.byte(d) - end - elseif type(d)=="number" then - if d>255 or d<0 then - error("A byte must be between 0 and 255!") - else - c.data=d - end - else - error("cannot use type "..type(d).." as an argument! Takes only strings or numbers!") - end - c.__index=function(self,k) - if k>=0 and k<9 then - if self.data==0 then - return 0 - elseif self.data==255 then - return 1 - else - return bits.ref[self.data][k] - end - end - end - c.__tostring=function(self) - return bits.ref[tostring(self.data)] - end - setmetatable(c,c) - return c -end -function bits.newByteArray(s) - local c={} - if type(s)~="string" then - error("Must be a string type or bin/buffer type") - elseif type(s)=="table" then - if s.t=="sink" or s.t=="buffer" or s.t=="bin" then - local data=s:getData() - for i=1,#data do - c[#c+1]=bits.newByte(data:sub(i,i)) - end - else - error("Must be a string type or bin/buffer type") - end - else - for i=1,#s do - c[#c+1]=bits.newByte(s:sub(i,i)) - end - end - return c -end -function bits.new(n,s) - if type(n)=='string' then - local t=tonumber(n,2) - if t and #n<8 and not(s) then - t=nil - end - if not(t) then - t={} - for i=#n,1,-1 do - table.insert(t,bits:conv(string.byte(n,i))) - end - n=table.concat(t) - else - n=t - end - end - local temp={} - temp.t='bit' - setmetatable(temp, bits) - if type(n)~='string' then - local tab={} - while n>=1 do - table.insert(tab,n%2) - n=math.floor(n/2) - end - local str=string.reverse(table.concat(tab)) - if #str%8~=0 then - str=string.rep('0',8-#str%8)..str - end - temp.data=str - else - temp.data=n - end - setmetatable({__tostring=function(self) return self.data end},temp) - return temp -end -for i=0,255 do - local d=bits.new(i).data - bits.ref[i]={d:match("(%d)(%d)(%d)(%d)(%d)(%d)(%d)(%d)")} - bits.ref[tostring(i)]=d - bits.ref[d]=i - bits.ref["\255"..string.char(i)]=d -end -function bits.numToBytes(n,fit,func) - local num=bits.new(n):toSbytes() - num=bin.endianflop(num) - local ref={["num"]=num,["fit"]=fit} - if fit then - if fit<#num then - if func then - print("Warning: attempting to store a number that takes up more space than allotted! Using provided method!") - func(ref) - else - print("Warning: attempting to store a number that takes up more space than allotted!") - end - return ref.num:sub(1,ref.fit) - elseif fit==#num then - return num - else - return string.rep("\0",fit-#num)..num - end - else - return num - end -end -function bits:conv(n) - local tab={} - while n>=1 do - table.insert(tab,n%2) - n=math.floor(n/2) - end - local str=string.reverse(table.concat(tab)) - if #str%8~=0 then - str=string.rep('0',8-#str%8)..str - end - return str -end -function bits:add(i) - if type(i)=='number' then - i=bits.new(i) - end - self.data=self:conv(tonumber(self.data,2)+tonumber(i.data,2)) -end -function bits:sub(i) - if type(i)=='number' then - i=bits.new(i) - end - self.data=self:conv(tonumber(self.data,2)-tonumber(i.data,2)) -end -function bits:multi(i) - if type(i)=='number' then - i=bits.new(i) - end - self.data=self:conv(tonumber(self.data,2)*tonumber(i.data,2)) -end -function bits:div(i) - if type(i)=='number' then - i=bits.new(i) - end - self.data=self:conv(tonumber(self.data,2)/tonumber(i.data,2)) -end -function bits:tonumber(s) - if type(s)=='string' then - return tonumber(self.data,2) - end - s=s or 1 - return tonumber(string.sub(self.data,(8*(s-1))+1,8*s),2) or error('Bounds!') -end -function bits:isover() - return #self.data>8 -end -function bits:flipbits() - tab={} - for i=1,#self.data do - if string.sub(self.data,i,i)=='1' then - table.insert(tab,'0') - else - table.insert(tab,'1') - end - end - self.data=table.concat(tab) -end -function bits:tobytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return bin.new(table.concat(tab)) -end -function bits:toSbytes() - local tab={} - for i=self:getbytes(),1,-1 do - table.insert(tab,string.char(self:tonumber(i))) - end - return table.concat(tab) -end -function bits:getBin() - return self.data -end -function bits:getbytes() - return #self.data/8 -end diff --git a/examples/love2d Threading Example/core/lovebind.lua b/examples/love2d Threading Example/core/lovebind.lua deleted file mode 100644 index eca6618..0000000 --- a/examples/love2d Threading Example/core/lovebind.lua +++ /dev/null @@ -1,103 +0,0 @@ -os.sleep=love.timer.sleep -function bin.load(file,s,r) - content, size = love.filesystem.read(file) - local temp=bin.new(content) - temp.filepath=file - return temp -end -function bin:tofile(filename) - if not(filename) or self.Stream then return nil end - love.filesystem.write(filename,self.data) -end -function bin.stream(file,l) - error("Sorry streaming is not available when using love2d :(, I am looking for a solution though :)") -end -function love.run() - if love.math then - love.math.setRandomSeed(os.time()) - end - if love.event then - love.event.pump() - end - if love.load then love.load(arg) end - if love.timer then love.timer.step() end - local dt = 0 - while true do - -- Process events. - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - if multi.boost then - for i=1,multi.boost-1 do - multi:uManager(dt) - end - end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end - end -end -multi.drawF={} -function multi:dManager() - for ii=1,#multi.drawF do - multi.drawF[ii]() - end -end -function multi:onDraw(func,i) - i=i or 1 - table.insert(self.drawF,i,func) -end -function multi:lManager() - if love.event then - love.event.pump() - for e,a,b,c,d in love.event.poll() do - if e == "quit" then - if not love.quit or not love.quit() then - if love.audio then - love.audio.stop() - end - return nil - end - end - love.handlers[e](a,b,c,d) - end - end - if love.timer then - love.timer.step() - dt = love.timer.getDelta() - end - if love.update then love.update(dt) end - multi:uManager(dt) - if love.window and love.graphics and love.window.isCreated() then - love.graphics.clear() - love.graphics.origin() - if love.draw then love.draw() end - multi.dManager() - love.graphics.setColor(255,255,255,255) - if multi.draw then multi.draw() end - love.graphics.present() - end -end diff --git a/examples/love2d Threading Example/core/net/Documentation.txt b/examples/love2d Threading Example/core/net/Documentation.txt deleted file mode 100644 index 462add6..0000000 --- a/examples/love2d Threading Example/core/net/Documentation.txt +++ /dev/null @@ -1,106 +0,0 @@ -Hey guys, I am currently working on a net library which aims to make Async servers/clients a piece of cake. It is still in heavy development, but a release will be made soon. The basic features are done and work great. The modules are being worked on though. -Right now I have the core and 4 modules finished -+CORE <-- The base library -+net.identity <-- makes registration and login for users seamless -+net.sft <-- a Simple File Transfer module. -NOTE: Once net.aft Is complete net.sft will no longer be supported -+net.aft <-- an Advanced File Transfer module. -NOTE: As of right now user can only download files in aft -+net.chatting <-- allows for chatting between users - -I will go into detail on how the core and 'stable' modules work - - -[color=#FF0000][b]Creating A Server[/b][/color] -EXAMPLE:1 -[code] ---[[Filename: server.lua -+Dependencies: -+the net library -+the bin library -+the multimanager library -+luasocket - -I suggest using luajit when creating the server for that extra boost in performance! -]] - -require("net") --- All you need is a port for the server init -server=net:newServer(12345) ---server=net:newTCPServer(12345) - ---[[The commented line above creates a TCP server -CID: Client ID, unique for each user connected to the server. If you are using a TCP Server then you get the handle used for communication -IP_OR_HANDLE, works much like CID_OR_HANDLE, where you get a handle if using TCP -The reason for this is so modules could be made for both types of servers and work flawlessly, The only exception is the sft and aft module, TCP is recommended to ensure things are sent in order -PORT_OR_IP is like the above as well... Think of it this way UDP_TCP for each argument -]] - -server:OnDataRecived(function(serv,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - if data=="Hello Server!" then -- the client say hi lets say something back - serv:send(IP_OR_HANDLE,"Hey client!",PORT_OR_IP,CID_OR_HANDLE)-- cid only needs to be passed for UDP Servers, you can exclude the cid argument if you want though. The server stores ports and IPs for each CID while they are logged on! - end -end) -multi:mainloop() -[/code] - -This is the basic setup for a server where you can send data back and forth. Note: modules that receive data will bypass triggering this event to save CPU time... Only events that are important get triggered If you want to speed up your code and make your event triggered when data you want gets passed use "!eventname! ...rest_of_your_data_here" - -For example You would do this: -EXAMPLE:2 -[code] ---[[ -Assume your client is sending this data: "!gamedata! MOVE bob 10 10" -take a look at the new server OnDataRecieved event -]] - -require("net") -server=net:newServer(12345) -world={["bob"]={x=0,y=0}} -server:OnDataRecived(function(serv,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - local cmd,entity,arg1,arg2=data:match("!gamedata! (%S+) (%S+) (%S+) (%S+)") - if cmd=="MOVE" then - --lets move bob - world[entity].x=tonumber(arg1) - world[entity].y=tonumber(arg2) - --Now lets tell every client connected what happened - serv:sendAll("!gamedata! UPDATE "..entity.." "..arg1.." "..arg2) -- note only data is needed now! - end -end,"gamedata") -- notice this string right here it allows the CORE to know that you should call this when !gamedata! is within a method. This is useful especally when you have many connections to the server OnDataRecieved event -multi:mainloop() -[/code] - -Now that was fun... But what if I'm sending binary data over to the client... Doesn't non-ASCII tend to get messed up? -Yes it does and even when using TCP data tends to not always transfer right - -net.normalize(data) converts data into all ASCII characters to keep your data safe, so even binary data can be passed. Since this uses base64 encoding every 3 characters become 4 so your data size becomes a bit bigger. To avoid problems keep all data being normalized data under 384 characters! The data here is converted into 512 bytes. -net.denormalize(data) takes the normalized and converts it back to what it was originally. - -Take a look at this example -EXAMPLE:3 -[code] ---Assume your client is sending this data: "!gamedata! MSG bob NORMILZED_MSG NIL" empty data so pattern matches - -require("net") -function CheckMSG(data) - -- TODO: modify the message for things that break our rules - returns data -end -server=net:newServer(12345) -world={["bob"]={x=0,y=0}} -server:OnDataRecived(function(serv,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - local cmd,entity,arg1,arg2=data:match("!gamedata! (%S+) (%S+) (%S+) (%S+)") - if cmd=="MOVE" then - --lets move bob - world[entity].x=tonumber(arg1) -- we are sending the numbers as binary data - world[entity].y=tonumber(arg2) - --Now lets tell every client connected what happened - serv:sendAll("!gamedata! UPDATE "..entity.." "..arg1.." "..arg2) -- note only data is needed now! - elseif cmd=="MSG" then -- client is sending a message NOTE: I have a module that handles chatting however for example sake here is a simple chat message - --Lets look at the data We normalize the data because we can have \n characters in the data and TCP/UDP are line based so that would mess up packets! - local msg=CheckMSG(net.denormalize(arg1)) - serv:sendAll("!gamedata! MSG "..entity.." "..msg.." NIL") - end -end,"gamedata") -- notice this string right here it allows the CORE to know that you should call this when !gamedata! is within a method. This is useful especally when you have many connections to the server OnDataRecieved event -multi:mainloop() -[/code] \ No newline at end of file diff --git a/examples/love2d Threading Example/core/net/admin.lua b/examples/love2d Threading Example/core/net/admin.lua deleted file mode 100644 index 886a7f7..0000000 --- a/examples/love2d Threading Example/core/net/admin.lua +++ /dev/null @@ -1,58 +0,0 @@ -require("parseManager") -require("net.identity") -require("net.aft") -net:registerModule("admin",{1,0,0}) --- Localhost does not need to log in to connect to the server and do whatever... This inculdes modules that you are writing for the server --- LAN connections can request data from the server without logging in, but must log in to alter server settings --- WAN connections can only request or alter settings if they are logged in - ---[[ -User levels: 1 - SERVEROWNER/localhost (Autodetect) - 2 - ADMIN - 3 - Modded User - 4 - Privileged User - 5 - Regular User - 6 - Restricted User - 7 - USER DEFINED - 8 - USER DEFINED - 9 - USER DEFINED - 10 - Banned User -]] -if not io.dirExists("-ADMINS-") then - io.mkdir("-ADMINS-") -end -if not io.fileExists("-ADMINS-/LEVELS-List.dat") then - io.mkfile("-ADMINS-/LEVELS-List.dat") -end -net.statuslist={} -net.OnServerCreated:connect(function(s) - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - local IP=tonumber(IP_OR_HANDLE) or tonumber(PORT_OR_IP) - end,"admin") - function s:setUserLevel(user,n) - -- - end - function s:makeAdmin(user) - -- - end - function s:makeMod(user) - -- - end - function s:makePrivileged(user) - -- - end - function s:restrict(user) - -- - end - function s:ban(user) - -- - end - function s:getUserLevel(user) - -- - end -end) -net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) - -- - end,"admin") -end) diff --git a/examples/love2d Threading Example/core/net/aft.lua b/examples/love2d Threading Example/core/net/aft.lua deleted file mode 100644 index 0ce6c59..0000000 --- a/examples/love2d Threading Example/core/net/aft.lua +++ /dev/null @@ -1,325 +0,0 @@ -require("net") ---General Stuff ---[[ What this module does! -Allows reliable transfer of files over the internet! -Hash testing and piece transfer -TODO: Add uploading support... For now use sft less intensive on the client/server -]] -net:registerModule("aft",{2,1,0}) -net.aft.transfers={} -net.aft.sinks={} -net.aft.cache={} -net.aft.preload={} -net.aft.pieceSize=768 -- max data packet for b64 that can safely be transfered without erroring! DO NOT CHANGE!!! -function net.aft:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The aft(Advance File Transfer) Module has been loaded onto the server!") - if s.Type~="tcp" then - print("It is recomended that you use tcp to transfer files!") - end - s.OnUploadRequest=multi:newConnection() -- create an aft event - s.OnDownloadRequest=multi:newConnection() - s.OnClientClosed:connect(function(self,reason,cid,ip,port) - if net.aft.transfers[cid] then - for i,v in pairs(net.aft.transfers[cid]) do - v.resendAlarm:Destroy() - end - net.aft.transfers[cid]=nil - end - end) - function s:preloadFile(name) - net.aft.preload[name]={} - local temp=bin.stream(name) - temp:segmentedRead(768,function(data) - local unpackedDATA1=data:sub(1,384) - local unpackedDATA2=data:sub(385) - local packedDATA=net.normalize(unpackedDATA1)..net.normalize(unpackedDATA2) - table.insert(net.aft.preload,packedDATA) - end) - end - function s:isPreloaded(name) - return net.aft.preload[name]~=nil - end - s.allowSmallFileCaching=false - s.cachable=10 -- 10 MBs - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - local cmd,arg1,arg2=data:match("!aft! (%S+) (%S+) (%S+)") - --print(cmd,arg1,arg2) - if cmd=="PIECE" then - local FID,piecenum=arg1,tonumber(arg2) - local pp=piecenum-1 - net.aft.transfers[cid][FID].resendAlarm:Reset() - if net.aft.transfers[cid][FID] then - if pp>net.aft.transfers[cid][FID].pieces-1 then - self:send(ip,"!aft! DOWNLOAD INVALID_PIECENUM NIL NIL NIL",port) - print("ERROR 101") - else - if self:isPreloaded(name) then - self:send(ip,net.aft.preload[name][piecenum],port) - return - end - if self.allowSmallFileCaching then - if net.aft.cache[net.aft.transfers[cid][FID].name] then - if net.aft.cache[net.aft.transfers[cid][FID].name][piecenum] then - self:send(ip,net.aft.cache[net.aft.transfers[cid][FID].name][piecenum],port) - return - end - end - end - local ddata - local unpackedDATA=net.aft.transfers[cid][FID].sink:sub((pp*net.aft.pieceSize)+1,(pp+1)*net.aft.pieceSize) - local num=#unpackedDATA - if num<384 then - ddata="!aft! TRANS "..piecenum.." "..FID.." | "..net.normalize(unpackedDATA) - else - local unpackedDATA1=unpackedDATA:sub(1,384) - local unpackedDATA2=unpackedDATA:sub(385) - local packedDATA=net.normalize(unpackedDATA1)..net.normalize(unpackedDATA2) - ddata="!aft! TRANS "..piecenum.." "..FID.." | "..packedDATA - end - net.aft.transfers[cid][FID].resendAlarm.piecenum=piecenum - net.aft.transfers[cid][FID].resendAlarm.hash="" -- not needed anymore - net.aft.transfers[cid][FID].resendAlarm.packedDATA=packedDATA - -- SAFE - if self.allowSmallFileCaching then - net.aft.cache[net.aft.transfers[cid][FID].name][piecenum]=ddata - end - self:send(ip,ddata,port) - end - else - self:send(ip,"!aft! DOWNLOAD INVALID_FID NIL NIL NIL",port) - print("ERROR 102") - end - elseif cmd=="UPLOAD" then -- here we set up the spot for file writing - local FID,filename=arg1:match("(.-)|(.+)") - local struct={ - FID=FID, - filename=filename, - numpieces=tonumber(arg2) or -1 - } - if struct.numpieces==-1 then -- error handling catch it all :) - self:send(ip,"!aft! UPLOAD UPLOAD_REFUSED INVALID_NUMBER_OF_PIECES | |",port) - return - end - self.OnUploadRequest:Fire(struct,cid,ip,port) - if not(struct.deny) then -- block request or allow it - -- If we are allowed to lets do this - if not(net.aft.transfers.DOWNLOADS) then - net.aft.transfers.DOWNLOADS={} - end - if not(net.aft.transfers.DOWNLOADS[FID]) then - net.aft.transfers.DOWNLOADS[FID]={} - end - bin.new(""):tofile(struct.filename) - net.aft.transfers.DOWNLOADS[struct.FID].sink=struct.sink or bin.stream(struct.filename,false) - net.aft.transfers.DOWNLOADS[struct.FID].currentPiece=1 - net.aft.transfers.DOWNLOADS[struct.FID].numPieces=tonumber(arg2) - --we got that setup... Lets Request a piece now! - self:send(ip,"!aft! PIECE 1 "..FID.." | |",port) -- request piece # 1 - else - self:send(ip,"!aft! UPLOAD UPLOAD_REFUSED "..(struct.reason or "UNSPECIFIED_ERROR").." | |",port) - end - elseif cmd=="TRANS" then - local FID,piece=arg1:match("(.-)|(.+)") - local piece=tonumber(piece) or -1 - if pieces==-1 then -- error handling catch it all :) - self:send(ip,"!aft! UPLOAD UPLOAD_CANCLED PIECE_DATA_MALFORMED | |",port) - return - end - if #arg2<512 then - net.aft.transfers.DOWNLOADS[FID].sink:tackE(net.denormalize(arg2)) - else - net.aft.transfers.DOWNLOADS[FID].sink:tackE(net.denormalize(arg2:sub(1,512))..net.denormalize(arg2:sub(513))) - end - -- request the next piece - if piece==net.aft.transfers.DOWNLOADS[FID].numPieces then - -- We are done! - self:send(ip,"!aft! DONE "..FID.." | | |",port) - net.aft.transfers.DOWNLOADS[FID].sink:close() -- close the file - else - self:send(ip,"!aft! PIECE "..piece+1 .." "..FID.." | |",port) - end - elseif cmd=="REQUEST" then - local filename=arg1 - local struct={ - filename=filename - } - self.OnDownloadRequest:Fire(self,struct) - if io.fileExists(struct.filename) or struct.handle then - local FID=bin.new(filename):getRandomHash(16) - if struct.handle then - FID=struct.handle:getRandomHash(16) - end - if not net.aft.transfers[cid] then - net.aft.transfers[cid]={} -- setup server-client filestream - end - net.aft.transfers[cid][FID]={} - net.aft.transfers[cid][FID].name=struct.filename - if struct.handle then - net.aft.transfers[cid][FID].sink=struct.handle - else - net.aft.transfers[cid][FID].sink=bin.stream(struct.filename,false) - end - net.aft.transfers[cid][FID].size=net.aft.transfers[cid][FID].sink:getSize() - net.aft.transfers[cid][FID].pieces=math.ceil(net.aft.transfers[cid][FID].size/net.aft.pieceSize) - net.aft.transfers[cid][FID].resendAlarm=multi:newAlarm(.25) - net.aft.transfers[cid][FID].resendAlarm:OnRing(function(alarm) - if not(alarm.packedDATA) then return end - self:send(ip,"!aft! TRANS "..alarm.piecenum.." "..FID.." | "..alarm.packedDATA,port) - alarm:Reset() - end) - if self.allowSmallFileCaching then - if net.aft.transfers[cid][FID].size<=1024*self.cachable then -- 10 MB or smaller can be cached - net.aft.cache[struct.filename]={} - end - end - self:send(ip,"!aft! START "..net.aft.transfers[cid][FID].pieces.." "..FID.." "..filename.." NIL",port) - else - self:send(ip,"!aft! DOWNLOAD REQUEST_REFUSED NIL NIL NIL",port) - print("ERROR 103") - end - elseif cmd=="COMPLETE" then - net.aft.transfers[cid][arg1].resendAlarm:Destroy() - net.aft.transfers[cid][arg1]=nil - end - end,"aft") -- some new stuff - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnPieceRecieved=multi:newConnection() - c.OnTransferStarted=multi:newConnection() - c.OnTransferCompleted=multi:newConnection() - c.OnFileRequestFailed=multi:newConnection() -- create an aft event - c.OnFileUploadFailed=multi:newConnection() -- not yet must ensure oneway works well first - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - local cmd,pieces,FID,arg1,arg2=data:match("!aft! (%S+) (%S+) (%S+) (%S+) (%S+)") - --print(cmd,pieces,FID,arg1,arg2) - if cmd=="START" then-- FID filename #pieces - local struct={ - FID=FID, - filename=arg1, - numpieces=tonumber(pieces) - } - self.OnTransferStarted:Fire(self,struct) - local fid,filename,np=struct.FID,struct.filename,struct.numpieces - local sink="" - if type(net.aft.sinks[filename])=="table" then - sink=net.aft.sinks[filename] - sink.file=filename - else - if net.aft.sinks[filename] then - bin.new():tofile(net.aft.sinks[filename]) - sink=bin.stream(net.aft.sinks[filename],false) - else - bin.new():tofile(filename) - sink=bin.stream(filename,false) - end - end - net.aft.transfers[FID]={} - net.aft.transfers[FID].name=sink.file - net.aft.transfers[FID].sink=sink - net.aft.transfers[FID].currentPiece=1 - net.aft.transfers[FID].piecesRecieved=0 - net.aft.transfers[FID].numpieces=tonumber(pieces) - c:requestPiece(FID,1) - elseif cmd=="DONE" then - local FID=pieces - print(net.aft.transfers.UPLOADS[FID].name.." has Finished Uploading!") - self.OnTransferCompleted:Fire(self,net.aft.transfers[FID].name,"U") - net.aft.transfers[FID]=nil -- clean up - elseif cmd=="PIECE" then -- Server is asking for a piece to some file - local pieces=tonumber(pieces) - local pp=pieces-1 - local unpackedDATA=net.aft.transfers.UPLOADS[FID].sink:sub((pp*net.aft.pieceSize)+1,(pp+1)*net.aft.pieceSize) - local num=#unpackedDATA - if num<384 then - self:send("!aft! TRANS "..FID.."|"..pieces.." "..net.normalize(unpackedDATA)) - else - local unpackedDATA1=unpackedDATA:sub(1,384) - local unpackedDATA2=unpackedDATA:sub(385) - local packedDATA=net.normalize(unpackedDATA1)..net.normalize(unpackedDATA2) - self:send("!aft! TRANS "..FID.."|"..pieces.." "..packedDATA) - end - elseif cmd=="TRANS" then-- self,data,FID,piecenum,hash - if self.autoNormalization==false then -- if we already handled normalization in the main data packet then don't redo - local ddata - if #arg2<512 then - ddata=net.denormalize(arg2) - else - ddata=net.denormalize(arg2:sub(1,512))..net.denormalize(arg2:sub(513)) - end - struct={ - data=ddata, - FID=FID, - piecenum=tonumber(pieces), - numpieces=net.aft.transfers[FID].numpieces, - hash=arg1, - name=net.aft.transfers[FID].name, - } - else - struct={ - data=arg2, - FID=FID, - piecenum=tonumber(pieces), - numpieces=net.aft.transfers[FID].numpieces, - hash=arg1, - name=net.aft.transfers[FID].name, - } - end - net.aft.transfers[FID].currentPiece=tonumber(pieces) - self.OnPieceRecieved:Fire(self,struct) - local data,FID,piecenum,hash=struct.data,struct.FID,struct.piecenum,struct.hash - net.aft.transfers[FID].sink:tackE(data) - net.aft.transfers[FID].piecesRecieved=net.aft.transfers[FID].piecesRecieved+1 - if net.aft.transfers[FID].numpieces==net.aft.transfers[FID].piecesRecieved then - print(net.aft.transfers[FID].name.." has finished downloading!") - net.aft.transfers[FID].sink:close() - self:send("!aft! COMPLETE "..FID.." NIL") -- for clean up purposes - self.OnTransferCompleted:Fire(self,net.aft.transfers[FID].name) - else - self:requestPiece(FID,piecenum+1) -- get next piece - end - elseif cmd=="DOWNLOAD" then - local msg=FID - self.OnFileRequestFailed:Fire(msg) - print("Download Error!",msg) - elseif cmd=="UPLOAD" then - local msg=FID - self.OnFileUploadFailed:Fire(msg) - print("Upload Error!",msg) - end - end,"aft") - function c:requestFile(filename,sink) -- sinks data through a bin-stream sink if the filename you want otherwise the filename is used instead - self:send("!aft! REQUEST "..filename.." NIL") - if sink then - net.aft.sinks[filename]=sink - end - end - function c:requestUpload(filename) - if io.fileExists(filename) then - local FID=bin.new(filename):getRandomHash(16) -- We need this, but its not as important for client as it is for servers - local file=bin.stream(filename) - if not net.aft.transfers.UPLOADS then - net.aft.transfers.UPLOADS={} - end - if not net.aft.transfers.UPLOADS[FID] then - net.aft.transfers.UPLOADS[FID]={} - end - net.aft.transfers.UPLOADS[FID].sink=file -- client file management is much simpler since we only have to worry about 1 reciever/sender - net.aft.transfers.UPLOADS[FID].name=filename - net.aft.transfers.UPLOADS[FID].size=file:getSize() - net.aft.transfers.UPLOADS[FID].pieces=math.ceil(net.aft.transfers.UPLOADS[FID].size/net.aft.pieceSize) - self:send("!aft! UPLOAD "..FID.."|"..filename.." "..net.aft.transfers.UPLOADS[FID].pieces)-- Lets send the FID we will be using and the number of pieces the server should look out for - else - self.OnFileUploadFailed:Fire("File specified not found! "..filename.." does not exist!") - end - end - function c:requestPiece(FID,piecenum) - self:send("!aft! PIECE "..FID.." "..piecenum) - end - end) -end -if net.autoInit then - net.aft.init() -end diff --git a/examples/love2d Threading Example/core/net/audp.lua b/examples/love2d Threading Example/core/net/audp.lua deleted file mode 100644 index d310477..0000000 --- a/examples/love2d Threading Example/core/net/audp.lua +++ /dev/null @@ -1,273 +0,0 @@ -function net:newAUDPServer(port,servercode) - local c={} - c.udp=assert(socket.udp()) - c.udp:settimeout(0) - c.udp:setsockname("*", port) - c.ips={} - c.Type="udp" - c.port=port - c.ids={} - c.servercode=servercode - c.bannedIPs={} - c.bannedCIDs={} - c.autoNormalization=false - function c:setUpdateRate(n) - print("Not needed in a audp server!") - end - function c:banCID(cid) - table.insert(self.bannedCIDs,cid) - end - function c:banIP(ip) - table.insert(self.bannedIPs,cid) - end - function c:send(ip,data,port,cid) - if self.autoNormalization then - data=net.normalize(data) - end - if self.servercode then - cid=cid or self:CIDFrom(ip,port) - if not self.ips[cid] then - print("Can't determine cid from client... sending the client a new one!") - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,0,self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - return - end - if net.inList(self.bannedIPs,ip) or net.inList(self.bannedCIDs,cid) then - self.udp:sendto("BANNED CLIENT", ip, port or self.port) - elseif self.ips[cid][4] then - self.udp:sendto(data, ip, port or self.port) - elseif self.ips[cid][4]==false then - self.udp:sendto("Make sure your server code is correct!", ip, port) - end - else - self.udp:sendto(data, ip, port or self.port) - end - end - function c:pollClientModules(ip,port) - self:send(ip,"L!",port) - end - function c:CIDFrom(ip,port) - for i,v in pairs(self.ips) do - if(ip==v[1] and v[2]==port) then - return i - end - end - end - function c:sendAll(data) - for i,v in pairs(self.ips) do - self:send(v[1],data,v[2],i) - end - end - function c:sendAllBut(data,cid) - for i,v in pairs(self.ips) do - if i~=cid then - self:send(v[1],data,v[2],i) - end - end - end - function c:clientRegistered(cid) - return self.ips[cid] - end - function c:clientLoggedIn(cid) - if not self.clientRegistered(cid) then - return nil - end - return self.ips[cid][4] - end - function c:update() - local data,ip,port=self.udp:receivefrom() - if net.inList(self.bannedIPs,ip) or net.inList(self.bannedCIDs,cid) then - print("We will ingore data from a banned client!") - return - end - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - if data:sub(1,4)=="pong" then - self.ips[data:sub(5,-1)][3]=os.clock() - elseif data:sub(1,2)=="S!" then - local cid=self:CIDFrom(ip,port) - if data:sub(3,-1)==self.servercode then - print("Servercode Accepted: "..self.servercode) - if self.ips[cid] then - self.ips[cid][4]=true - else - print("Server can't keep up! CID: "..cid.." has been skipped! Sending new CID to the client!") - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,0,self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - end - else - self.udp:sendto("Make sure your server code is correct!", ip, port) - end - elseif data:sub(1,2)=="C!" then - local hook=(data:sub(11,-1)):match("!(.-)!") - self.OnDataRecieved:getConnection(hook):Fire(self,data:sub(11,-1),data:sub(3,10),ip,port) - elseif data:sub(1,2)=="E!" then - self.ips[data:sub(3,10)]=nil - obj.ids[data:sub(3,10)]=false - self.OnClientClosed:Fire(self,"Client Closed Connection!",data:sub(3,10),ip,port) - elseif data=="I!" then - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,os.clock(),self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - self.OnClientConnected:Fire(self,cid,ip,port) - elseif data:sub(1,2)=="L!" then - cid,cList=data:sub(3,10),data:sub(11,-1) - local list={} - for m,v in cList:gmatch("(%S-):(%S-)|") do - list[m]=v - end - self.OnClientsModulesList:Fire(list,cid,ip,port) - end - end - for cid,dat in pairs(self.ips) do - if not((os.clock()-dat[3])<65) then - self.ips[cid]=nil - self.OnClientClosed:Fire(self,"Client lost Connection: ping timeout",cid,ip,port) - end - end - end - c.OnClientsModulesList=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnClientClosed=multi:newConnection() - c.OnClientConnected=multi:newConnection() - c.connectiontest=multi:newAlarm(30) - c.connectiontest.link=c - c.connectiontest:OnRing(function(alarm) - --print("pinging clients!") - alarm.link:sendAll("ping") - alarm:Reset() - end) - multi:newLoop(function() - c:update() - end) - net.OnServerCreated:Fire(c) - return c -end - -function net:newAUDPClient(host,port,servercode,nonluaServer) - local c={} - c.ip=assert(socket.dns.toip(host)) - c.udp=assert(socket.udp()) - c.udp:settimeout(0) - c.cid="NIL" - c.lastPing=0 - c.Type="udp" - c.servercode=servercode - c.autoReconnect=true - c.autoNormalization=false - function c:pollPing(n) - return not((os.clock()-self.lastPing)<(n or 60)) - end - function c:send(data) - if self.autoNormalization then - data=net.normalize(data) - end - self.udp:send("C!"..self.cid..data) - end - function c:sendRaw(data) - if self.autoNormalization then - data=net.normalize(data) - end - self.udp:send(data) - end - function c:getCID() - if self:IDAssigned() then - return self.cid - end - end - function c:close() - self:send("E!") - end - function c:IDAssigned() - return self.cid~="NIL" - end - function c:update() - local data=self.udp:receive() - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - if data:sub(1,2)=="I!" then - self.cid=data:sub(3,-1) - self.OnClientReady:Fire(self) - elseif data=="S!" then - self.udp:send("S!"..(self.servercode or "")) - elseif data=="L!" then - local mods="" - local m="" - for i=1,#net.loadedModules do - m=net.loadedModules[i] - mods=mods..m..":"..net.getModuleVersion(m).."|" - end - self.udp:send("L!"..self.cid..mods) - elseif data=="ping" then - self.lastPing=os.clock() - self.OnPingRecieved:Fire(self) - self.udp:send("pong"..self.cid) - else - local hook=data:match("!(.-)!") - self.OnDataRecieved:getConnection(hook):Fire(self,data) - end - end - end - function c:reconnect() - if not nonluaServer then - self.cid="NIL" - c.udp:send("I!") - end - self.OnConnectionRegained:Fire(self) - end - c.pingEvent=multi:newEvent(function(self) return self.link:pollPing() end) - c.pingEvent:OnEvent(function(self) - if self.link.autoReconnect then - self.link.OnServerNotAvailable:Fire("Connection to server lost: ping timeout! Attempting to reconnect...") - self.link.OnClientDisconnected:Fire(self,"closed") - self.link:reconnect() - else - self.link.OnServerNotAvailable:Fire("Connection to server lost: ping timeout!") - self.link.OnClientDisconnected:Fire(self,"closed") - end - end) - c.pingEvent.link=c - c.OnPingRecieved=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnServerNotAvailable=multi:newConnection() - c.OnClientReady=multi:newConnection() - c.OnClientDisconnected=multi:newConnection() - c.OnConnectionRegained=multi:newConnection() - c.notConnected=multi:newFunction(function(self) - self:hold(3) - if self.link:IDAssigned()==false then - self.link.OnServerNotAvailable:Fire("Can't connect to the server: no response from server") - end - end) - c.notConnected.link=c - if not nonluaServer then - c.udp:send("I!") - end - multi:newLoop(function() - c:update() - end) - multi:newJob(function() c.notConnected() end) - net.OnClientCreated:Fire(c) - return c -end diff --git a/examples/love2d Threading Example/core/net/chatting.lua b/examples/love2d Threading Example/core/net/chatting.lua deleted file mode 100644 index b2ab8d5..0000000 --- a/examples/love2d Threading Example/core/net/chatting.lua +++ /dev/null @@ -1,134 +0,0 @@ -require("net") -require("net.identity") ---General Stuff ---[[ What this module does! -Adds -net.chatting:init() -server:OnChatRecieved(function({user,msg}) end) -client:OnChatRecieved(function(user,msg) end) -client:sendChat(user,msg) -]] -net:registerModule("chatting",{3,0,0}) -net.chatting.users={} -function net.chatting:getUserIdFromIP(ip) - return net.chatting.users[ip] -end -function net.chatting:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The Chatting Module has been loaded onto the server!") - s.OnUserLoggedIn(function(user,cid,ip,port,dTable) - dTable=loadstring("return "..dTable)() - local USERID=bin.new(user):getHash(32) - net.chatting.users[USERID]={dTable.nick,cid,ip,port,dTable} -- add users that log in to the userlist - net.chatting.users[ip]=USERID -- add users that log in to the userlist - local users={} - for i,v in pairs(net.chatting.users) do - if type(i)~="userdata" then - table.insert(users,i.."|"..net.chatting.users[i][1]) - end - end - table.insert(users,"") - for i,v in pairs(s.ips) do - s:send(v,"!chatting! $Users|NIL|NIL '"..table.concat(users,",").."'") - end - end) - s.OnUserLoggerOut(function(self,user) - local USERID=bin.new(user):getHash(32) - local ip=net.chatting.users[USERID] - print(USERID) - net.chatting.users[USERID]=nil - net.chatting.users[ip]=nil - end) - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - --First Lets make sure we are getting chatting data - local user,msg = data:match("!chatting! (%S-) (.+)") - if user and msg then - if user:sub(1,1)=="$" then - local cmd,arg=user:match("$(.+)|(.+)") - print("Using extended chatting protocal!") - if cmd=="DM" then - local struct={ -- pack the info up as a table so the server can do filtering and whatnot to the chat - user=user, - msg=net.denormalize(msg) - } - self.OnChatRecieved:Fire(struct,"PRIVATE") - print("USERID",arg) - self:send(net.chatting.users[arg][3],"!chatting! $DM|"..net.chatting.users[arg][1].."|"..net.chatting:getUserIdFromIP(ip).." "..net.normalize(struct.msg).."",net.chatting.users[arg][4]) - elseif cmd=="getUsers" then - local users={} - for i,v in pairs(net.chatting.users) do - if type(i)~="userdata" then - table.insert(users,i.."|"..net.chatting.users[i][1]) - end - end - table.insert(users,"") - self:send(ip,"!chatting! $Users|NIL|NIL "..table.concat(users,",").."",port) - end - else - local struct={ -- pack the info up as a table so the server can do filtering and whatnot to the chat - user=user, - msg=net.denormalize(msg) - } - self.OnChatRecieved:Fire(struct,"GROUP") -- trigger the chat event - local USERID=net.chatting:getUserIdFromIP(ip) - for i,v in pairs(self.ips) do - if ip==v then - self:send(v,"!chatting! 1|"..struct.user.."|"..USERID.." "..net.normalize(struct.msg).."") - else - self:send(v,"!chatting! 0|"..struct.user.."|"..USERID.." "..net.normalize(struct.msg).."") - end - end - end - end - end,"chatting") - s.rooms={} - function s:regesterRoom(roomname) - self.rooms[roomname]={} - end - s.OnChatRecieved=multi:newConnection() -- create a chat event - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - --First Lets make sure we are getting chatting data - local isself,user,USERID,msg = data:match("!chatting! (%S-)|(%S-)|(%S-) (.+)") - if not isself then return end - if tonumber(isself) then - --This is the client so our job here is done - local msg=net.denormalize(msg) - self.OnChatRecieved:Fire(user,msg,({["1"]=true, ["0"]=false})[isself],USERID) -- trigger the chat event - elseif isself:sub(1,1)=="$" then - local cmd=isself:match("$(.+)") - if cmd=="DM" then - local msg=net.denormalize(msg) - c.OnPrivateChatRecieved:Fire(user,msg,USERID) - elseif cmd=="Users" then - local tab={} - for ID,nick in msg:gmatch("(%S-)|(%S-),") do - tab[nick]=ID - end - c.OnUserList:Fire(tab) - end - end - end,"chatting") - function c:sendChat(user,msg) - self:send("!chatting! "..user.." "..net.normalize(msg).."") - end - function c:sendChatTo(user,touser,msg) - self:send("!chatting! $DM|"..touser.." "..net.normalize(msg).."") - end - function c:getUserList() - self:send("!chatting! $getUsers|NIL NIL") - end - function c:getChatFrom(userID) - self:send("!chatting! getPrivateChat|NIL "..userID) -- add if time permits - end - c.OnPrivateChatRecieved=multi:newConnection() - c.OnUserList=multi:newConnection() - c.OnChatRecieved=multi:newConnection() -- create a chat event - end) -end -if net.autoInit then - net.chatting:init() -end diff --git a/examples/love2d Threading Example/core/net/db.lua b/examples/love2d Threading Example/core/net/db.lua deleted file mode 100644 index 6e2c41e..0000000 --- a/examples/love2d Threading Example/core/net/db.lua +++ /dev/null @@ -1,15 +0,0 @@ -require("parseManager") -require("net.identity") -- serversie module -net:registerModule("db",{1,0,0}) -net.OnServerCreated:connect(function(s) - s.OnUserLoggedIn(function(user,cid,ip,port,dTable) -- dealing with userdata - -- - end) - function s:createTable(PKey,fmt,path) - -- - end -end) ---keys are case insensitive, hex and regular base 10 numbers are allowed as well as other structures ---We define a table below with keys and their max size - - diff --git a/examples/love2d Threading Example/core/net/eft.lua b/examples/love2d Threading Example/core/net/eft.lua deleted file mode 100644 index c88e472..0000000 --- a/examples/love2d Threading Example/core/net/eft.lua +++ /dev/null @@ -1,24 +0,0 @@ -require("net") -net:registerModule("eft",{1,0,0}) ---[[ - This module provides a dedicated socket for file transfer - This allows us to do some more complex stuff with it - The only data that is non file stuff is the initial handshake - CMDs are done on the general socket while transfers are done on the file socket -]] -net.OnServerCreated:connect(function(s) - print("The eft(Expert File Transfer) Module has been loaded onto the server!") - if s.Type~="tcp" then - print("It is recomended that you use tcp to transfer files!") - end - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - -- - end,"eft") - -- -end) -net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) - -- - end,"eft") - -- -end) diff --git a/examples/love2d Threading Example/core/net/email.lua b/examples/love2d Threading Example/core/net/email.lua deleted file mode 100644 index 1f46368..0000000 --- a/examples/love2d Threading Example/core/net/email.lua +++ /dev/null @@ -1,54 +0,0 @@ -require("net.identity") -net:registerModule("email",{1,0,0}) --- needs rewriting, where it uses the identity module and can send an email. EX: server:email(user,subject,body) -smtp = require 'socket.smtp' -ssl = require 'ssl' -- server side only so noworries for love2d users - -function net.email.init(from,user,pass) - net.OnServerCreated:connect(function(s) - s.from=from - s.user=user - s.pass=pass - function s:sendMessage(subject, body, dTable) - local msg = { - headers = { - from = '<'..dTable.email..'>' - to = dTable.nick..' <'..dTable.email..'>', - subject = subject - }, - body = body - } - local ok, err = smtp.send { - from = '<'..self.from..'>', - rcpt = '<'..dTable.email..'>', - source = smtp.message(msg), - user = self.user, - password = self.pass, - server = 'smtp.gmail.com', - port = 465, - create = net.sslCreate - } - if not ok then - print("Mail send failed", err) -- better error handling required - end - end - end) -end -function net.sslCreate() - local sock = socket.tcp() - return setmetatable({ - connect = function(_, host, port) - local r, e = sock:connect(host, port) - if not r then return r, e end - sock = ssl.wrap(sock, {mode='client', protocol='tlsv1'}) - return sock:dohandshake() - end - }, { - __index = function(t,n) - return function(_, ...) - return sock[n](sock, ...) - end - end - }) -end - diff --git a/examples/love2d Threading Example/core/net/emailWIP.lua b/examples/love2d Threading Example/core/net/emailWIP.lua deleted file mode 100644 index dbea43a..0000000 --- a/examples/love2d Threading Example/core/net/emailWIP.lua +++ /dev/null @@ -1,53 +0,0 @@ -require("net.identity") -net:registerModule("email",{1,0,0}) -smtp = require 'socket.smtp' -ssl = require 'ssl' - -function net.email.init(from,user,pass) - net.OnServerCreated:connect(function(s) - s.from=from - s.user=user - s.pass=pass - function s:sendMessage(subject, body, dTable) - local msg = { - headers = { - from = '<'..dTable.email..'>' - to = dTable.nick..' <'..dTable.email..'>', - subject = subject - }, - body = body - } - local ok, err = smtp.send { - from = '<'..self.from..'>', - rcpt = '<'..dTable.email..'>', - source = smtp.message(msg), - user = self.user, - password = self.pass, - server = 'smtp.gmail.com', - port = 465, - create = net.sslCreate - } - if not ok then - print("Mail send failed", err) -- better error handling required - end - end - end) -end -function net.sslCreate() - local sock = socket.tcp() - return setmetatable({ - connect = function(_, host, port) - local r, e = sock:connect(host, port) - if not r then return r, e end - sock = ssl.wrap(sock, {mode='client', protocol='tlsv1'}) - return sock:dohandshake() - end - }, { - __index = function(t,n) - return function(_, ...) - return sock[n](sock, ...) - end - end - }) -end - diff --git a/examples/love2d Threading Example/core/net/identity.lua b/examples/love2d Threading Example/core/net/identity.lua deleted file mode 100644 index c16aa43..0000000 --- a/examples/love2d Threading Example/core/net/identity.lua +++ /dev/null @@ -1,266 +0,0 @@ -require("net") ---General Stuff ---[[ What this module does! -Adds -net.identity:init() - -]] -net:registerModule("identity",{2,1,0})--1.0.1 Note: Added eaiser ways to get user data using only cid -function net.hash(text,n) - n=n or 16 - return bin.new(text.."jgmhktyf"):getHash(n) -end -net.identity.UIDS={} -net.identity.UIDS.ids={} -function net.identity:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated(function(s) - s.userFolder="./USERS" - print("The identity Module has been loaded onto the server!") - function s:_isRegistered(user) - return io.fileExists(self.userFolder..net.hash(user)..".dat") - end - function s:getUserData(user) - local userdata=bin.load(self.userFolder..net.hash(user)..".dat") - local nick,dTable=userdata:match("%S-|%S-|(%S-)|(.+)") - return nick,loadstring("return "..(dTable or "{}"))() - end - function s:modifyUserData(user,oldpass,pass,nick,dTable) - if self:_isRegistered(user) then - local userdata=bin.load(self.userFolder..net.hash(user)..".dat") - local args={} - local _pass,_nick,_dTable=userdata:match("%S-|(%S-)|(%S-)|(.+)") - if oldpass~=_pass then - args.invalidPass=true - pass=_pass - end - if not nick then nick=_nick args.invalidNick=true end - table.merge(_dTable or {}, dTable or {}) - bin.new(string.format("%s|%s|%s|%s\n",user,pass,nick,dTable)):tofile(self.userFolder..net.hash(user)..".dat") - else - return false - end - end - function s:getUserCred(user) - local userdata=bin.load(self.userFolder..net.hash(user)..".dat") - return userdata:match("%S-|(%S-)|") - end - function s:getUSERID(cid) - return (net.identity.UIDS[cid] or "User Not Logged In!") - end - function s:getUsername(cid) - return self:userLoggedIn(cid) - end - function s:getNickname(cid) - return self.loggedIn[self:getUsername(cid)].nick - end - function s:getdTable(cid) - return self.loggedIn[self:getUsername(cid)] - end - function s:getUserDat(cid) - return self:getUserDataHandle(self:getUsername(cid)) - end - function s:getNickFromUSERID(USERID) - return bin.load(self.userFolder..net.hash(user)..".dat"):match("%S-|%S-|(%S-)|") - end - function s:userLoggedIn(cid) - for i,v in pairs(self.loggedIn) do - if v.cid==cid then - return i - end - end - return false - end - function s:setDataLocation(loc) - if not io.dirExists(loc) then - io.mkDir(loc) - end - self.userFolder=loc - end - s:setDataLocation("USERS/") - function s:logoutUser(user) - net.identity.UIDS.ids[user.UID]=nil - self.loggedIn[user]=nil - end - function s:loginUser(user,cid) - net.identity.UIDS[cid]=net.hash(user) - local nick,dTable=self:getUserData(user) - self.loggedIn[user]={} - table.merge(self.loggedIn[user],dTable or {}) - self.loggedIn[user].cid=cid - self.loggedIn[user].nick=nick - self.loggedIn[user].UID=net.resolveID(net.identity.UIDS) - return self.loggedIn[user] - end - function s:getUserDataHandle(user) - return self.loggedIn[user] - end - function s:syncUserData(user,ip,port) - local handle=self:getUserDataHandle(user) - self:send(ip,"!identity! SYNC <-|"..bin.ToStr(handle).."|->",port) - end - s.loggedIn={} - s.allowDuplicateNicks=true - s.minimumNickLength=4 - s.minimumUserLength=4 - s.OnUserRegistered=multi:newConnection() - s.OnUserLoggedIn=multi:newConnection() - s.OnUserLoggerOut=multi:newConnection() - s.OnAlreadyLoggedIn=multi:newConnection() - s.OnPasswordForgotten=multi:newConnection() - s.OnDataRecieved:connect(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - local cmd,arg1,arg2,arg3,arg4 = data:match("!identity! (%S-) '(.-)' '(.-)' '(.-)' <%-|(.+)|%->") - if cmd=="register" then - local user,pass,nick,dTable = arg1,arg2,arg3,arg4 - if self:_isRegistered(user) then - self:send(ip,"!identity! REGISTERED <-|"..user.."|->",port) - else - if not(self.userFolder:sub(-1,-1)=="/" or self.userFolder:sub(-1,-1)=="\\") then - self.userFolder=self.userFolder.."/" - end - local rets=self.OnUserRegistered:Fire(user,pass,nick,loadstring("return "..(dTable or "{}"))()) - if #user<=self.minimumUserLength then - self:send(ip,"!identity! REGISTERREFUSED <-|Username too short|->",port) - return - end - if #user<=self.minimumNickLength then - self:send(ip,"!identity! REGISTERREFUSED <-|Nickname too short|->",port) - return - end - for i=1,#rets do - if rets[i][1]==false then - print("Server refused to accept registration request!") - self:send(ip,"!identity! REGISTERREFUSED <-|Unspecified Error|->",port) - return - end - end - multi:newFunction(function(func) -- anom func, allows for fancy multitasking - local dupnickfilemanager=bin.stream(self.userFolder.."Nicks.dat",false) - local isValid=func:newCondition(function() return t~=nil end) - local tab={} - local t=dupnickfilemanager:getBlock("s") - if self.allowDuplicateNicks==false then - while func:condition(isValid) do - tab[#tab]=t - if t==nick then - self:send(ip,"!identity! REGISTERREFUSED <-|Duplicate Nicks are not allowed|->",port) - dupnickfilemanager:close() - return - end - end - t=dupnickfilemanager:getBlock("s") - end - dupnickfilemanager:addBlock(nick.."|"..bin.new(user):getHash(32)) - dupnickfilemanager:close() - bin.new(string.format("%s|%s|%s|%s\n",user,pass,nick,dTable)):tofile(self.userFolder..net.hash(user)..".dat") - self:send(ip,"!identity! REGISTEREDGOOD <-|"..user.."|->",port) - func=nil -- we dont want 1000s+ of these anom functions lying around - return - end)()-- lets call the function - end - return - elseif cmd=="login" then - local user,pass = arg1,arg2 - local _pass=s:getUserCred(user) - if not(self:_isRegistered(user)) then - self:send(ip,"!identity! LOGINBAD <-|nil|->",port) - return - end - if pass==_pass then - if self:userLoggedIn(cid) then - self.OnAlreadyLoggedIn:Fire(self,user,cid,ip,port) - self:send(ip,"!identity! ALREADYLOGGEDIN <-|nil|->",port) - return - end - local handle=self:loginUser(user,cid) -- binds the cid to username - self:send(ip,"!identity! LOGINGOOD <-|"..bin.ToStr(handle).."|->",port) - self.OnUserLoggedIn:Fire(user,cid,ip,port,bin.ToStr(handle)) - return - else - self:send(ip,"!identity! LOGINBAD <-|nil|->",port) - return - end - elseif cmd=="logout" then - self:logoutUser(user) - self.OnClientClosed:Fire(self,"User logged out!",cid,ip,port) - elseif cmd=="sync" then - local dTable = loadstring("return "..(arg4 or "{}"))() - local handle = self:getUserDataHandle(self:userLoggedIn(cid)) - table.merge(handle,dTable) - elseif cmd=="pass" then - local user=arg1 - if self:_isRegistered(user) then - self.OnPasswordForgotten:Fire(arg1,cid) - self:send(ip,"!identity! PASSREQUESTHANDLED <-|NONE|->",port) - else - self:send(ip,"!identity! NOUSER <-|"..user.."|->",port) - end - end - end) - s.OnClientClosed:connect(function(self,reason,cid,ip,port) - self.OnUserLoggerOut:Fire(self,self:userLoggedIn(cid),cid,reason) - end) - end,"identity") - --Client Stuff - net.OnClientCreated:connect(function(c) - c.userdata={} - c.OnUserLoggedIn=multi:newConnection() - c.OnBadLogin=multi:newConnection() - c.OnUserAlreadyRegistered=multi:newConnection() - c.OnUserAlreadyLoggedIn=multi:newConnection() - c.OnUserRegistered=multi:newConnection() - c.OnNoUserWithName=multi:newConnection() - c.OnPasswordRequest=multi:newConnection() - c.OnUserRegisterRefused=multi:newConnection() - function c:logout() - self:send("!identity! logout 'NONE' 'NONE' 'NONE' <-|nil|->") - end - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - local cmd,arg1 = data:match("!identity! (%S-) <%-|(.+)|%->") - if cmd=="REGISTERED" then - self.OnUserAlreadyRegistered:Fire(self,arg1) - elseif cmd=="REGISTEREDGOOD" then - self.OnUserRegistered:Fire(self,arg1) - elseif cmd=="REGISTERREFUSED" then - self.OnUserRegisterRefused:Fire(self,arg1) - elseif cmd=="ALREADYLOGGEDIN" then - self.OnUserAlreadyLoggedIn:Fire(self,arg1) - elseif cmd=="LOGINBAD" then - self.OnBadLogin:Fire(self) - elseif cmd=="LOGINGOOD" then - local dTable=loadstring("return "..(arg1 or "{}"))() - table.merge(self.userdata,dTable) - self.OnUserLoggedIn:Fire(self,self.userdata) - elseif cmd=="SYNC" then - local dTable=loadstring("return "..(arg1 or "{}"))() - table.merge(self.userdata,dTable) - elseif cmd=="NOUSER" then - self.OnNoUserWithName:Fire(self,arg1) - elseif cmd=="PASSREQUESTHANDLED" then - self.OnPasswordRequest:Fire(self) - end - end,"identity") - function c:syncUserData() - self:send(string.format("!identity! sync 'NONE' 'NONE' 'NONE' <-|%s|->",bin.ToStr(dTable))) - end - function c:forgotPass(user) - self:send(string.format("!identity! pass '%s' 'NONE' 'NONE' <-|nil|->",user)) - end - function c:getUserDataHandle() - return self.userdata - end - function c:logIn(user,pass) - self:send(string.format("!identity! login '%s' '%s' 'NONE' <-|nil|->",user,net.hash(pass))) - end - function c:register(user,pass,nick,dTable) - if dTable then - self:send(string.format("!identity! register '%s' '%s' '%s' <-|%s|->",user,net.hash(pass),nick,bin.ToStr(dTable))) - else - self:send(string.format("!identity! register '%s' '%s' '%s' <-|nil|->",user,net.hash(pass),nick)) - end - end - end) -end -if net.autoInit then - net.identity:init() -end diff --git a/examples/love2d Threading Example/core/net/inbox.lua b/examples/love2d Threading Example/core/net/inbox.lua deleted file mode 100644 index d76f37c..0000000 --- a/examples/love2d Threading Example/core/net/inbox.lua +++ /dev/null @@ -1,70 +0,0 @@ -require("net.identity") -require("net.aft") -require("net.users") -require("net.db") -net:registerModule("inbox",{1,0,0}) ---self.OnUserLoggedIn:Fire(user,cid,ip,port,bin.ToStr(handle)) ---allows the storing of messages that the user can recieve and view whenever. Allows user to also send messeges to users that are even offline! ---requires an account setup and nick name to be set at account creation -if not io.dirExists("INBOX") then - io.mkDir("INBOX") -end -net.inbox.dbfmt=db.format([=[ -[INBOX]{ - string MSG 0x800 -- contents of the message -} -[MAIL]{ - string NAME 0x20 -- username - string UID 0x10 -- User ID - string NICK 0x20 -- Nickname - number[3] DATE -- list of numbers - table INBO INBOX -- Inbox -} -]=]) -net.OnServerCreated:connect(function(s) - s.OnUserLoggedIn(function(user,cid,ip,port,dTable) - if not io.dirExists("INBOX/"..self:getUSERID(cid)) then -- Make sure inbox stuff is set up - io.mkDir("INBOX/"..self:getUSERID(cid)) - bin.new():tofile("info.dat") - end - end) - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - if self:userLoggedIn(cid) then -- If the user is logged in we do the tests - local cmd,arg1,arg2=data:match("!inbox! (%S+) (%S+) (%S+)") - if cmd=="SEND" then - -- - elseif cmd=="LIST" then - -- - elseif cmd=="OPEN" then - -- - elseif cmd=="DELETE" then - -- - elseif cmd=="CLEAR" then - -- - end - else - return - end - end,"inbox") -end) -net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) - -- - end,"inbox") - function c:sendMessage(USERID,msg) -- USERID who, msg being sent. Server handles time stamps - self:send("!inbox! SEND "..USERID.." "..msg) - end - function c:checkInbox() -- returns list of msgIDs - self:send("!inbox! LIST NIL NIL") - end - function c:checkMsg(msgId) - self:send("!inbox! OPEN "..msgId.." NIL") -- server sends back msg content as a file - end - function c:deleteMessage(msgID) - self:send("!inbox! DELETE "..msgId.." NIL") - end - function c:clearInbox() - self:send("!inbox! CLEAR NIL NIL") - end - -- -end) diff --git a/examples/love2d Threading Example/core/net/init.lua b/examples/love2d Threading Example/core/net/init.lua deleted file mode 100644 index 21f3db9..0000000 --- a/examples/love2d Threading Example/core/net/init.lua +++ /dev/null @@ -1,664 +0,0 @@ ---[[ - UPCOMMING ADDITIONS - AUDP - advance udp/ Ensures packets arrive and handles late packets. - P2P - peer to peer (Server to set up initial connection) - Relay - offput server load (locally) - Threading - Simple threading (UDP/AUDP Only) - Priority handling -]] ---[[ - TODO: Finish stuff for Priority handling -]] -function table.merge(t1, t2) - for k,v in pairs(t2) do - if type(v) == 'table' then - if type(t1[k] or false) == 'table' then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -function string.trim(s) - local from = s:match"^%s*()" - return from > #s and "" or s:match(".*%S", from) -end -socket=require("socket") -http=require("socket.http") -mime=require("mime") -net={} -net.Version={2,0,0} -- This will probably stay this version for quite a while... The modules on the otherhand will be more inconsistant -net._VERSION="2.0.0" -net.OnServerCreated=multi:newConnection() -net.OnClientCreated=multi:newConnection() -net.loadedModules={} -net.autoInit=true -function net.normalize(input) - local enc=mime.b64(input) - return enc -end -function net.denormalize(input) - local unenc=mime.unb64(input) - return unenc -end -function net.getLocalIP() - local someRandomIP = "192.168.1.122" - local someRandomPort = "3102" - local mySocket = socket.udp() - mySocket:setpeername(someRandomIP,someRandomPort) - local dat = (mySocket:getsockname()) - mySocket:close() - return dat -end -function net.getExternalIP() - local data=http.request("http://whatismyip.org/") - return data:match("600;\">(%d-.%d-.%d-.%d-)") -end -function net:registerModule(mod,version) - if net[mod] then - error("Module by the name: "..mod.." has already been registered! Remember some modules are internal and use certain names!") - end - table.insert(self.loadedModules,mod) - net[mod]={} - if version then - net[mod].Version=version - net[mod]._VERSION=version[1].."."..version[2].."."..version[3] - else - net[mod].Version={1,0,0} - net[mod]._VERSION={1,0,0} - end - return {Version=version,_VERSION=version[1].."."..version[2].."."..version[3]} -end -function net.getModuleVersion(ext) - if not ext then - return string.format("%d.%d.%d",net.Version[1],net.Version[2],net.Version[3]) - end - return string.format("%d.%d.%d",net[ext].Version[1],net[ext].Version[2],net[ext].Version[3]) -end -function net.resolveID(obj) - local num=math.random(10000000,99999999) - if obj[tostring(num)] then - return net.resolveID(obj) - end - obj.ids[tostring(num)]=true - return tostring(num) -end -function net.inList(list,dat) - for i,v in pairs(list) do - if v==dat then - return true - end - end - return false -end -function net.setTrigger(funcW,funcE) - multi:newTrigger(func) -end -net:registerModule("net",net.Version) --- Client broadcast -function net:newCastedClient(name) -- connects to the broadcasted server - local listen = socket.udp() -- make a new socket - listen:setsockname(net.getLocalIP(), 11111) - listen:settimeout(0) - local timer=multi:newTimer() - while true do - local data, ip, port = listen:receivefrom() - if timer:Get()>3 then - error("Timeout! Server by the name: "..name.." has not been found!") - end - if data then - local n,tp,ip,port=data:match("(%S-)|(%S-)|(%S-):(%d+)") - if n:match(name) then - print("Found Server!",n,tp,ip,port) - if tp=="tcp" then - return net:newTCPClient(ip,tonumber(port)) - else - return net:newClient(ip,tonumber(port)) - end - end - end - end -end --- UDP Stuff -function net:newServer(port,servercode) - local c={} - c.udp=assert(socket.udp()) - c.udp:settimeout(0) - c.udp:setsockname("*", port) - c.ips={} - c.Type="udp" - c.port=port - c.ids={} - c.servercode=servercode - c.bannedIPs={} - c.bannedCIDs={} - c.autoNormalization=false - function c:setUpdateRate(n) - print("Not needed in a udp server!") - end - function c:banCID(cid) - table.insert(self.bannedCIDs,cid) - end - function c:banIP(ip) - table.insert(self.bannedIPs,cid) - end - c.broad=socket.udp() - c.hostip=net.getLocalIP() - function c:broadcast(name) - local loop=multi:newTLoop(function(dt,loop) - self.broad:setoption('broadcast',true) - self.broad:sendto(name.."|"..self.Type.."|"..self.hostip..":"..self.port, "255.255.255.255", 11111) - self.broad:setoption('broadcast',false) - end,1) - end - function c:send(ip,data,port,cid) - if self.autoNormalization then - data=net.normalize(data) - end - if self.servercode then - cid=cid or self:CIDFrom(ip,port) - if not self.ips[cid] then - print("Can't determine cid from client... sending the client a new one!") - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,0,self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - return - end - if net.inList(self.bannedIPs,ip) or net.inList(self.bannedCIDs,cid) then - self.udp:sendto("BANNED CLIENT", ip, port or self.port) - elseif self.ips[cid][4] then - self.udp:sendto(data, ip, port or self.port) - elseif self.ips[cid][4]==false then - self.udp:sendto("Make sure your server code is correct!", ip, port) - end - else - self.udp:sendto(data, ip, port or self.port) - end - end - function c:pollClientModules(ip,port) - self:send(ip,"L!",port) - end - function c:CIDFrom(ip,port) - for i,v in pairs(self.ips) do - if(ip==v[1] and v[2]==port) then - return i - end - end - end - function c:sendAll(data) - for i,v in pairs(self.ips) do - self:send(v[1],data,v[2],i) - end - end - function c:sendAllBut(data,cid) - for i,v in pairs(self.ips) do - if i~=cid then - self:send(v[1],data,v[2],i) - end - end - end - function c:clientRegistered(cid) - return self.ips[cid] - end - function c:clientLoggedIn(cid) - if not self.clientRegistered(cid) then - return nil - end - return self.ips[cid][4] - end - function c:update() - local data,ip,port=self.udp:receivefrom() - if net.inList(self.bannedIPs,ip) or net.inList(self.bannedCIDs,cid) then - print("We will ingore data from a banned client!") - return - end - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - if data:sub(1,4)=="pong" then - --print("Recieved pong from: "..data:sub(5,-1)) - self.ips[data:sub(5,-1)][3]=os.clock() - elseif data:sub(1,2)=="S!" then - local cid=self:CIDFrom(ip,port) - if data:sub(3,-1)==self.servercode then - print("Servercode Accepted: "..self.servercode) - if self.ips[cid] then - self.ips[cid][4]=true - else - print("Server can't keep up! CID: "..cid.." has been skipped! Sending new CID to the client!") - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,0,self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - end - else - self.udp:sendto("Make sure your server code is correct!", ip, port) - end - elseif data:sub(1,2)=="C!" then - local hook=(data:sub(11,-1)):match("!(.-)!") - self.OnDataRecieved:getConnection(hook):Fire(self,data:sub(11,-1),data:sub(3,10),ip,port) - elseif data:sub(1,2)=="E!" then - self.ips[data:sub(3,10)]=nil - obj.ids[data:sub(3,10)]=false - self.OnClientClosed:Fire(self,"Client Closed Connection!",data:sub(3,10),ip,port) - elseif data=="I!" then - local cid=net.resolveID(self) - print("Sending unique cid to client: "..cid) - self.ips[cid]={ip,port,os.clock(),self.servercode==nil} - print(ip) - self.udp:sendto("I!"..cid,ip,port) - if self.servercode then - self.udp:sendto("S!",ip,port) - end - self.OnClientConnected:Fire(self,cid,ip,port) - elseif data:sub(1,2)=="L!" then - cid,cList=data:sub(3,10),data:sub(11,-1) - local list={} - for m,v in cList:gmatch("(%S-):(%S-)|") do - list[m]=v - end - self.OnClientsModulesList:Fire(list,cid,ip,port) - end - end - for cid,dat in pairs(self.ips) do - if not((os.clock()-dat[3])<65) then - self.ips[cid]=nil - self.OnClientClosed:Fire(self,"Client lost Connection: ping timeout",cid,ip,port) - end - end - end - c.OnClientsModulesList=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnClientClosed=multi:newConnection() - c.OnClientConnected=multi:newConnection() - c.connectiontest=multi:newAlarm(30) - c.connectiontest.link=c - c.connectiontest:OnRing(function(alarm) - --print("pinging clients!") - alarm.link:sendAll("ping") - alarm:Reset() - end) - multi:newLoop(function() - c:update() - end) - net.OnServerCreated:Fire(c) - return c -end - -function net:newClient(host,port,servercode,nonluaServer) - local c={} - c.ip=assert(socket.dns.toip(host)) - c.udp=assert(socket.udp()) - c.udp:settimeout(0) - c.udp:setpeername(c.ip, port) - c.cid="NIL" - c.lastPing=0 - c.Type="udp" - c.servercode=servercode - c.autoReconnect=true - c.autoNormalization=false - function c:pollPing(n) - return not((os.clock()-self.lastPing)<(n or 60)) - end - function c:send(data) - if self.autoNormalization then - data=net.normalize(data) - end - self.udp:send("C!"..self.cid..data) - end - function c:sendRaw(data) - if self.autoNormalization then - data=net.normalize(data) - end - self.udp:send(data) - end - function c:getCID() - if self:IDAssigned() then - return self.cid - end - end - function c:close() - self:send("E!") - end - function c:IDAssigned() - return self.cid~="NIL" - end - function c:update() - local data=self.udp:receive() - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - if data:sub(1,2)=="I!" then - self.cid=data:sub(3,-1) - self.OnClientReady:Fire(self) - elseif data=="S!" then - self.udp:send("S!"..(self.servercode or "")) - elseif data=="L!" then - local mods="" - local m="" - for i=1,#net.loadedModules do - m=net.loadedModules[i] - mods=mods..m..":"..net.getModuleVersion(m).."|" - end - self.udp:send("L!"..self.cid..mods) - elseif data=="ping" then - self.lastPing=os.clock() - self.OnPingRecieved:Fire(self) - self.udp:send("pong"..self.cid) - else - local hook=data:match("!(.-)!") - self.OnDataRecieved:getConnection(hook):Fire(self,data) - end - end - end - function c:reconnect() - if not nonluaServer then - self.cid="NIL" - c.udp:send("I!") - end - self.OnConnectionRegained:Fire(self) - end - c.pingEvent=multi:newEvent(function(self) return self.link:pollPing() end) - c.pingEvent:OnEvent(function(self) - if self.link.autoReconnect then - self.link.OnServerNotAvailable:Fire("Connection to server lost: ping timeout! Attempting to reconnect...") - self.link.OnClientDisconnected:Fire(self,"closed") - self.link:reconnect() - else - self.link.OnServerNotAvailable:Fire("Connection to server lost: ping timeout!") - self.link.OnClientDisconnected:Fire(self,"closed") - end - end) - c.pingEvent.link=c - c.OnPingRecieved=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnServerNotAvailable=multi:newConnection() - c.OnClientReady=multi:newConnection() - c.OnClientDisconnected=multi:newConnection() - c.OnConnectionRegained=multi:newConnection() - c.notConnected=multi:newFunction(function(self) - self:hold(3) - if self.link:IDAssigned()==false then - self.link.OnServerNotAvailable:Fire("Can't connect to the server: no response from server") - end - end) - c.notConnected.link=c - if not nonluaServer then - c.udp:send("I!") - end - multi:newLoop(function() - c:update() - end) - multi:newJob(function() c.notConnected() end) - net.OnClientCreated:Fire(c) - return c -end ---TCP Stuff -function net:newTCPServer(port) - local c={} - c.tcp=assert(socket.bind("*", port)) - c.tcp:settimeout(0) - c.ip,c.port=c.tcp:getsockname() - c.ips={} - c.port=port - c.ids={} - c.bannedIPs={} - c.Type="tcp" - c.rMode="*l" - c.sMode="*l" - c.updaterRate=1 - c.autoNormalization=false - c.updates={} - c.links={} - c.broad=socket.udp() - c.hostip=net.getLocalIP() - function c:broadcast(name) - local loop=multi:newTLoop(function(dt,loop) - self.broad:setoption('broadcast',true) - self.broad:sendto(name.."|"..self.Type.."|"..self.hostip..":"..self.port, "255.255.255.255", 11111) - self.broad:setoption('broadcast',false) - end,1) - end - function c:setUpdateRate(n) - self.updaterRate=n - end - function c:setReceiveMode(mode) - self.rMode=mode - end - function c:setSendMode(mode) - self.rMode=mode - end - function c:banCID(cid) - print("Function not supported on a tcp server!") - end - function c:banIP(ip) - table.insert(self.bannedIPs,cid) - end - function c:send(handle,data) - if self.autoNormalization then - data=net.normalize(data) - end - if self.sMode=="*l" then - handle:send(data.."\n") - else - handle:send(data) - end - end - function c:sendAllData(handle,data) - if self.autoNormalization then - data=net.normalize(data) - end - handle:send(data) - end - function c:pollClientModules(ip,port) - self:send(ip,"L!",port) - end - function c:CIDFrom(ip,port) - print("Method not supported when using a TCP Server!") - return "CIDs in TCP work differently!" - end - function c:sendAll(data) - for i,v in pairs(self.ips) do - self:send(v,data) - end - end - function c:sendAllBut(data,cid) - for i,v in pairs(self.ips) do - if not(cid==i) then - self:send(v,data) - end - end - end - function c:clientRegistered(cid) - return self.ips[cid] - end - function c:clientLoggedIn(cid) - return self.ips[cid] - end - function c:getUpdater(cid) - return self.updates[cid] - end - function c:update() - local client = self.tcp:accept(self.rMode) - if not client then return end - table.insert(self.ips,client) - client:settimeout(0) - --client:setoption('tcp-nodelay', true) - client:setoption('keepalive', true) - ip,port=client:getpeername() - if ip and port then - print("Got connection from: ",ip,port) - local updater=multi:newUpdater(skip) - self.updates[client]=updater - self.OnClientConnected:Fire(self,self.client,self.client,ip) - updater:OnUpdate(function(self) - local data, err = self.client:receive(self.rMode or self.Link.rMode) - if err=="closed" then - for i=1,#self.Link.ips do - if self.Link.ips[i]==self.client then - table.remove(self.Link.ips,i) - end - end - self.Link.OnClientClosed:Fire(self.Link,"Client Closed Connection!",self.client,self.client,ip) - self.Link.links[self.client]=nil -- lets clean up - self:Destroy() - end - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - if net.inList(self.Link.bannedIPs,ip) then - print("We will ingore data from a banned client!") - return - end - local hook=data:match("!(.-)!") - self.Link.OnDataRecieved:getConnection(hook):Fire(self.Link,data,self.client,self.client,ip,self) - if data:sub(1,2)=="L!" then - cList=data - local list={} - for m,v in cList:gmatch("(%S-):(%S-)|") do - list[m]=v - end - self.Link.OnClientsModulesList:Fire(list,self.client,self.client,ip) - end - end - end) - updater:setSkip(self.updaterRate) - updater.client=client - updater.Link=self - function updater:setReceiveMode(mode) - self.rMode=mode - end - self.links[client]=updater - end - end - c.OnClientsModulesList=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnClientClosed=multi:newConnection() - c.OnClientConnected=multi:newConnection() - multi:newLoop(function() - c:update() - end) - net.OnServerCreated:Fire(c) - return c -end -function net:newTCPClient(host,port) - local c={} - c.ip=assert(socket.dns.toip(host)) - c.port=port - c.tcp=socket.connect(c.ip,port) - if not c.tcp then - print("Can't connect to the server: no response from server") - return false - end - c.tcp:settimeout(0) - --c.tcp:setoption('tcp-nodelay', true) - c.tcp:setoption('keepalive', true) - c.Type="tcp" - c.autoReconnect=true - c.rMode="*l" - c.sMode="*l" - c.autoNormalization=false - function c:setReceiveMode(mode) - self.rMode=mode - end - function c:setSendMode(mode) - self.sMode=mode - end - function c:send(data) - if self.autoNormalization then - data=net.normalize(data) - end - if self.sMode=="*l" then - ind,err=self.tcp:send(data.."\n") - else - ind,err=self.tcp:send(data) - end - if err=="closed" then - self.OnClientDisconnected:Fire(self,err) - elseif err=="timeout" then - self.OnClientDisconnected:Fire(self,err) - elseif err then - print(err) - end - end - function c:sendRaw(data) - if self.autoNormalization then - data=net.normalize(data) - end - self.tcp:send(data) - end - function c:getCID() - return "No Cid on a tcp client!" - end - function c:close() - self.tcp:close() - end - function c:IDAssigned() - return true - end - function c:update() - if not self.tcp then return end - local data,err=self.tcp:receive() - if err=="closed" then - self.OnClientDisconnected:Fire(self,err) - elseif err=="timeout" then - self.OnClientDisconnected:Fire(self,err) - elseif err then - print(err) - end - if data then - if self.autoNormalization then - data=net.denormalize(data) - end - local hook=data:match("!(.-)!") - self.OnDataRecieved:getConnection(hook):Fire(self,data) - end - end - function c:reconnect() - multi:newFunction(function(func) - self.tcp=socket.connect(self.ip,self.port) - if self.tcp==nil then - print("Can't connect to the server: No response from server!") - func:hold(3) - self:reconnect() - return - end - self.OnConnectionRegained:Fire(self) - self.tcp:settimeout(0) - --self.tcp:setoption('tcp-nodelay', true) - self.tcp:setoption('keepalive', true) - end) - end - c.event=multi:newEvent(function(event) - return event.link:IDAssigned() - end) - c.event:OnEvent(function(event) - event.link.OnClientReady:Fire(event.link) - end) - c.event.link=c - c.OnClientReady=multi:newConnection() - c.OnClientDisconnected=multi:newConnection() - c.OnDataRecieved=multi:newConnection() - c.OnConnectionRegained=multi:newConnection() - multi:newLoop(function() - c:update() - end) - net.OnClientCreated:Fire(c) - return c -end diff --git a/examples/love2d Threading Example/core/net/logging.lua b/examples/love2d Threading Example/core/net/logging.lua deleted file mode 100644 index be82728..0000000 --- a/examples/love2d Threading Example/core/net/logging.lua +++ /dev/null @@ -1,7 +0,0 @@ -net.OnServerCreated:connect(function(s) - print("The logging Module has been loaded onto the server!") - s.OnDataRecieved:fConnect(function(self,data,cid,ip,port) - log(tostring(ip)..":"..tostring(port),"Server-log.log") - log(data,"Server-log.log") - end) -end) diff --git a/examples/love2d Threading Example/core/net/loggingWIP.lua b/examples/love2d Threading Example/core/net/loggingWIP.lua deleted file mode 100644 index be82728..0000000 --- a/examples/love2d Threading Example/core/net/loggingWIP.lua +++ /dev/null @@ -1,7 +0,0 @@ -net.OnServerCreated:connect(function(s) - print("The logging Module has been loaded onto the server!") - s.OnDataRecieved:fConnect(function(self,data,cid,ip,port) - log(tostring(ip)..":"..tostring(port),"Server-log.log") - log(data,"Server-log.log") - end) -end) diff --git a/examples/love2d Threading Example/core/net/p2p.lua b/examples/love2d Threading Example/core/net/p2p.lua deleted file mode 100644 index a1ece36..0000000 --- a/examples/love2d Threading Example/core/net/p2p.lua +++ /dev/null @@ -1,31 +0,0 @@ -net:registerModule("p2p",{1,0,0}) -net.p2p.peerdata={} ---[[ -PID(peerID)= - -]] -function net.newP2PClient(host,port) - -- -end -function net.aft:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The aft(Advance File Transfer) Module has been loaded onto the server!") - if s.Type~="udp" then - print("As of right now p2p is only avaliable using udp!") - return "ERR_NOT_UDP" - end - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - -- - end,"p2p") -- some new stuff - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - -- - end,"p2p") - end) -end -if net.autoInit then - net.aft.init() -end diff --git a/examples/love2d Threading Example/core/net/p2pWIP.lua b/examples/love2d Threading Example/core/net/p2pWIP.lua deleted file mode 100644 index a1ece36..0000000 --- a/examples/love2d Threading Example/core/net/p2pWIP.lua +++ /dev/null @@ -1,31 +0,0 @@ -net:registerModule("p2p",{1,0,0}) -net.p2p.peerdata={} ---[[ -PID(peerID)= - -]] -function net.newP2PClient(host,port) - -- -end -function net.aft:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The aft(Advance File Transfer) Module has been loaded onto the server!") - if s.Type~="udp" then - print("As of right now p2p is only avaliable using udp!") - return "ERR_NOT_UDP" - end - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - -- - end,"p2p") -- some new stuff - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - -- - end,"p2p") - end) -end -if net.autoInit then - net.aft.init() -end diff --git a/examples/love2d Threading Example/core/net/relay.lua b/examples/love2d Threading Example/core/net/relay.lua deleted file mode 100644 index f1f267c..0000000 --- a/examples/love2d Threading Example/core/net/relay.lua +++ /dev/null @@ -1,24 +0,0 @@ -require("net") -net:registerModule("relay",{1,0,0}) -net.OnServerCreated:connect(function(s) - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - local IP="" - if self.Type=="tcp" then - error("Relays only work when using UDP or AUDP! They will not function with TCP! Support may one day be added for TCP!") - else - IP=IP_OR_HANDLE - end - local cmd,dat=data:match("!relay! (%S-) (.+)") - if cmd == "RELAY" then - -- - elseif cmd == "LOAD" then - local cpuload=multi:getLoad() - self:send(IP_OR_HANDLE,"!relay! LOAD "..cpuload,PORT_OR_IP) - end - end,"relay") -end) -net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) - -- - end,"relay") -end) diff --git a/examples/love2d Threading Example/core/net/settings.lua b/examples/love2d Threading Example/core/net/settings.lua deleted file mode 100644 index de9c190..0000000 --- a/examples/love2d Threading Example/core/net/settings.lua +++ /dev/null @@ -1,48 +0,0 @@ -require("net") ---General Stuff ---[[ What this module does! -Adds -net.settings:init() -server:regSetting(namespace,setting) -]] -net:registerModule("settings",{1,0,0}) -net.settings.config={} -function net.settings:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The Settings Module has been loaded onto the server!") - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - local namespace,args=data:match("!settings! (%s+) (.+)") - local args - if namespace then - for i,v in pairs(net.settings.config) do - args={data:match(v[1])} - if #args~=0 then - v[2]:Fire(self,data,cid,ip,port,unpack(args)) - break - end - end - end - end,"settings") - function s:regSetting(namespace,settings) - if not net.settings.config[namespace] then - net.settings.config[namespace]={} - end - local connection=multi:newConnection() - table.insert(net.settings.config[namespace],{"!settings! "..namespace.." "..settings,connection}) - return connection - end - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnDataRecieved:(function(self,data) -- when the client recieves data this method is triggered - --First Lets make sure we are getting Setting data - end,"setings") - function sendSetting(namespace,args) - self:send("!settings! "..namespace.." "..args) - end - end) -end -if net.autoInit then - net.settings:init() -end diff --git a/examples/love2d Threading Example/core/net/settingsWIP.lua b/examples/love2d Threading Example/core/net/settingsWIP.lua deleted file mode 100644 index de9c190..0000000 --- a/examples/love2d Threading Example/core/net/settingsWIP.lua +++ /dev/null @@ -1,48 +0,0 @@ -require("net") ---General Stuff ---[[ What this module does! -Adds -net.settings:init() -server:regSetting(namespace,setting) -]] -net:registerModule("settings",{1,0,0}) -net.settings.config={} -function net.settings:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The Settings Module has been loaded onto the server!") - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - local namespace,args=data:match("!settings! (%s+) (.+)") - local args - if namespace then - for i,v in pairs(net.settings.config) do - args={data:match(v[1])} - if #args~=0 then - v[2]:Fire(self,data,cid,ip,port,unpack(args)) - break - end - end - end - end,"settings") - function s:regSetting(namespace,settings) - if not net.settings.config[namespace] then - net.settings.config[namespace]={} - end - local connection=multi:newConnection() - table.insert(net.settings.config[namespace],{"!settings! "..namespace.." "..settings,connection}) - return connection - end - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.OnDataRecieved:(function(self,data) -- when the client recieves data this method is triggered - --First Lets make sure we are getting Setting data - end,"setings") - function sendSetting(namespace,args) - self:send("!settings! "..namespace.." "..args) - end - end) -end -if net.autoInit then - net.settings:init() -end diff --git a/examples/love2d Threading Example/core/net/sft.lua b/examples/love2d Threading Example/core/net/sft.lua deleted file mode 100644 index b695fc9..0000000 --- a/examples/love2d Threading Example/core/net/sft.lua +++ /dev/null @@ -1,179 +0,0 @@ -require("net") ---General Stuff ---[[ What this module does! -Adds - -]] -function io.fileExists(path) - g=io.open(path or '','r') - if path =='' then - p='empty path' - return nil - end - if g~=nil and true or false then - p=(g~=nil and true or false) - end - if g~=nil then - io.close(g) - else - return false - end - return p -end -net:registerModule("sft",{1,0,0}) -function net.sft:init() -- calling this initilizes the library and binds it to the servers and clients created - --Server Stuff - net.OnServerCreated:connect(function(s) - print("The sft(Simple File Transfer) Module has been loaded onto the server!") - if s.Type~="tcp" then - print("It is recomended that you use tcp to transfer files!") - end - s.transfers={} - s.OnUploadRequest=multi:newConnection() -- create a sft event - s.OnFileUploaded=multi:newConnection() -- create a sft event - s.OnDownloadRequest=multi:newConnection() - s.OnDataRecieved(function(self,data,cid,ip,port) -- when the server recieves data this method is triggered - --First Lets make sure we are getting sft data - --filename,dat=data:match("!sft! (%S-) (%S+)") - local cmd,arg1,arg2=data:match("!sft! (%S-) (%S-) (.+)") - if cmd=="tstart" then - local rets=self.OnUploadRequest:Fire(self,cid,ip,port) - for i=1,#rets do - if rets[i][1]==false then - print("Server refused to accept upload request!") - self:send(ip,"!sft! CANTUPLOAD NIL NIL",port) - return - end - end - local ID,streamable=arg1:match("(.+)|(.+)") - local file,hash=arg2:match("(.+)|(.+)") - if streamable~="NIL" then - self.transfers[ID]={bin.stream(streamable,false),hash,file} - else - self.transfers[ID]={bin.new(""),hash,file} - end - return - elseif cmd=="transfer" then - if self.transfers[arg1]~=nil then - self.transfers[arg1][1]:tackE(bin.fromhex(arg2)) - --print(self.transfers[arg1][1]:getSize()) - end - return - elseif cmd=="tend" then - if self.transfers[arg1]~=nil then - if self.transfers[arg1][1]:getHash(32)==self.transfers[arg1][2] then - self.OnFileUploaded:Fire(self,self.transfers[arg1][1],self.transfers[arg1][3],"Hash Good!") - else - print("Hash Error!") - self.OnFileUploaded:Fire(self,self.transfers[arg1][1],self.transfers[arg1][3],"Hash Bad!") - end - self.transfers[arg1]=nil - end - return - end - local filename=cmd - local dat=arg1 - if filename==nil then return end - local rets=self.OnDownloadRequest:Fire(self,cid,ip,port) - for i=1,#rets do - if rets[i][1]==false then - print("Server refused to accept download request!") - self:send(ip,"!sft! CANTREQUEST NIL NIL",port) - return - end - end - if io.fileExists(filename) then - --Lets first load the file - local file=bin.stream(filename,false) - local size=file:getSize() - local pieceSize=512 - local pieces=math.ceil(size/pieceSize) - local step=multi:newStep(1,pieces) - step.TransferID=tostring(math.random(1000,9999)) - step.sender=self - step.ip=ip - step.port=port - step.pieceSize=pieceSize - step:OnStart(function(self) - self.sender:send(self.ip,"!sft! TSTART "..self.TransferID.."|"..dat.." "..filename.."|"..file:getHash(32),self.port) - end) - step:OnStep(function(pos,self) - self:hold(.01) - self.sender:send(self.ip,"!sft! TRANSFER "..self.TransferID.." "..bin.tohex(file:sub(((self.pieceSize*pos)+1)-self.pieceSize,self.pieceSize*pos)),self.port) - end) - step:OnEnd(function(self) - self.sender:send(self.ip,"!sft! TEND "..self.TransferID.." NIL",self.port) - end) - else - self:send(ip,"!sft! CANTREQUEST NIL NIL",port) - end - end,"sft") - end) - --Client Stuff - net.OnClientCreated:connect(function(c) - c.transfers={} - c.OnTransferStarted=multi:newConnection() -- create a sft event - c.OnTransferFinished=multi:newConnection() -- create a sft event - c.OnFileRequestFailed=multi:newConnection() -- create a sft event - c.OnFileUploadFailed=multi:newConnection() -- create a sft event - c.OnDataRecieved(function(self,data) -- when the client recieves data this method is triggered - --First Lets make sure we are getting sft data - local cmd,arg1,arg2=data:match("!sft! (%S-) (%S-) (.+)") - if cmd=="TSTART" then - local ID,streamable=arg1:match("(.+)|(.+)") - local file,hash=arg2:match("(.+)|(.+)") - if streamable~="NIL" then - self.transfers[ID]={bin.stream(streamable,false),hash,file} - else - self.transfers[ID]={bin.new(""),hash,file} - end - self.OnTransferStarted:Fire(self) - elseif cmd=="TRANSFER" then - self.transfers[arg1][1]:tackE(bin.fromhex(arg2)) - elseif cmd=="TEND" then - if self.transfers[arg1][1]:getHash(32)==self.transfers[arg1][2] then - self.OnTransferFinished:Fire(self,self.transfers[arg1][1],self.transfers[arg1][3],"Hash Good!") - else - print("Hash Error!") - self.OnTransferFinished:Fire(self,self.transfers[arg1][1],self.transfers[arg1][3],"Hash Bad!") - end - self.transfers[arg1]=nil - elseif cmd=="CANTREQUEST" then - self.OnFileRequestFailed:Fire(self,"Could not request the file for some reason!") - elseif cmd=="CANTUPLOAD" then - self.OnFileUploadFailed:Fire(self,"Could not upload the file for some reason!") - end - end,"sft") - function c:uploadFile(filename) - if io.fileExists(filename) then - local file=bin.stream(filename,false) - local size=file:getSize() - local pieceSize=512 - local pieces=math.ceil(size/pieceSize) - local step=multi:newStep(1,pieces) - step.TransferID=tostring(math.random(1000,9999)) - step.sender=self - step.pieceSize=pieceSize - step:OnStart(function(self) - self.sender:send("!sft! tstart "..self.TransferID.."|NIL "..filename.."|"..file:getHash(32)) - end) - step:OnStep(function(pos,self) - self:hold(.01) - self.sender:send("!sft! transfer "..self.TransferID.." "..bin.tohex(file:sub(((self.pieceSize*pos)+1)-self.pieceSize,self.pieceSize*pos))) - end) - step:OnEnd(function(self) - print("Request done!") - self.sender:send("!sft! tend "..self.TransferID.." NIL") - end) - else - self.OnFileUploadFailed:Fire(self,filename,"File does not exist!") - end - end - function c:requestFile(filename) - self:send("!sft! "..filename.." NIL NIL NIL") - end - end) -end -if net.autoInit then - net.sft.init() -end diff --git a/examples/love2d Threading Example/core/net/status.lua b/examples/love2d Threading Example/core/net/status.lua deleted file mode 100644 index ae79213..0000000 --- a/examples/love2d Threading Example/core/net/status.lua +++ /dev/null @@ -1,44 +0,0 @@ -print([[ -the 'admin' module STATUS: 0 -the 'aft' module STATUS: 9 -the 'chatting' module STATUS: 5 -the 'db' module STATUS: 1 -the 'email' module STATUS: 2 -the 'identity' module STATUS: 7 -the 'inbox' module STATUS: 1 -the 'init' module STATUS: 9 Not a module, but the core of the program -the 'logging' module STATUS: 8 -the 'p2p' module STATUS: 1 -the 'settings' module STATUS: 3 -the 'sft' module STATUS: 10 -the 'status' module STATUS: 5 -the 'threading' module STATUS: 1 -the 'users' module STATUS: 1 -the 'version' module STATUS: 2 - -STATUS: -0: The idea is there but no progress to actual coding has been made -1: The idea has been coded and thoughts well defined. However only a frame is existing atm -2: The module has limited functionality, but gets its basic function through -3: The module has decent functionality, but needs much more -4: The module functions are stable and works great, however not all of the original idea has been completed -5: The module functions are stable and works great, most of the functions have been fleshed out aside for a few minor ones -6: The module has all features completed and is stable for average use, minor bugs are present. -7: The module has few to no bugs, and is currently being made more secure -8: The module is very secure and odds are it wont crash unless they were implemented wrong -9: The module has most if not all exception handled so even incorrect implementation will be 'error free' Probably wont change, but if it does it will be a huge change! -10: The module is never going to change from its current status! It is done. - -NOTE: once a module reaches a status of 4, it will always be backward compatable. server-client relations will be safe! - -Each module has a version -1.0.0 -A.M.m -addition.Major.minor -whenever a new addition is added the A is increased... You must update to make use of that feature -When a major addition or change Major is incresed. This can be code breaking... However I will try my best to make at least client side code compatible with future changes -when a minor addition or change is made minor in incresed - -Why client side stabality in code changes? -Until the update module can seamless update your modules I will ensure that client code can work regardless of server version starting from this version -]]) diff --git a/examples/love2d Threading Example/core/net/threading.lua b/examples/love2d Threading Example/core/net/threading.lua deleted file mode 100644 index 50299ef..0000000 --- a/examples/love2d Threading Example/core/net/threading.lua +++ /dev/null @@ -1,41 +0,0 @@ ---[=[ About This Module! - This module is server side only! (Might add client side if requested) - Aim is to make each lane (thread) have no more than 'n' number of connections - This module hyjacks the multi:newConnection() function to seemlessly add support for threads without you having to change much - As long as each server-client connection is isolated you should be fine - The chatting module however IS NOT an isolated module, so take a look at how data was handled in that module to allow for both - threaded and non threaded use - - How? - When this module is loaded all server creation is altered by passing a proxyServer instead of an actual server object - for example: - proxy=net:newTCPServer(12345) - proxy:OnDataRecieved(function(self,data,cid,ip,port) - self:send("My data!") - end) - the real server instance could be on any of the threads. Careful! While using this is seemless becareful of IO opperations! -]=] ---~ net:registerModule("threading",{1,0,0}) ---~ if not(lanes) then error("Require the lanes module!") end ---~ local serverlinda = lanes.linda() ---~ net.threading.newServer=net.newServer -- store the original method ---~ net.threading.newTCPServer=net.newTCPServer -- store the original method ---~ net.threading.proxy={} -- namespace for the proxy stuff. Because of the desgin intention of both UDP/TCP servers Only one proxy is needed -print({}) - ---~ lanes=require("lanes") ---~ serverlinda = lanes.linda() ---~ mt={ ---~ __index=function(t,k) print("IND",t,k) end, ---~ __newindex=function(t,k,v) print("NewIND",t,k,v) end, ---~ } ---~ test={} ---~ setmetatable(test,mt) ---~ test.a="hi" ---~ test.a=true ---~ g=test['a'] ---~ print(test.b) - - ---~ setmetatable(net.threading.proxy,mt) -- set the proxies metatable, to prevent bleeding only create one server. - diff --git a/examples/love2d Threading Example/core/net/threadingWIP.lua b/examples/love2d Threading Example/core/net/threadingWIP.lua deleted file mode 100644 index c83b2c2..0000000 --- a/examples/love2d Threading Example/core/net/threadingWIP.lua +++ /dev/null @@ -1,37 +0,0 @@ ---[=[ About This Module! - This module is server side only! (Might add client side if requested) - Aim is to make each lane (thread) have no more than 'n' number of connections - This module hyjacks the multi:newConnection() function to seemlessly add support for threads without you having to change much - As long as each server-client connection is isolated you should be fine - The chatting module however IS NOT an isolated module, so take a look at how data was handled in that module to allow for both - threaded and non threaded use - - How? - When this module is loaded all server creation is altered by passing a proxyServer instead of an actual server object - for example: - proxy=net:newTCPServer(12345) - proxy:OnDataRecieved(function(self,data,cid,ip,port) - self:send("My data!") - end) - the real server instance could be on any of the threads. Careful! While using this is seemless becareful of IO opperations! -]=] ---~ net:registerModule("threading",{1,0,0}) ---~ if not(lanes) then error("Require the lanes module!") end ---~ local serverlinda = lanes.linda() ---~ net.threading.newServer=net.newServer -- store the original method ---~ net.threading.newTCPServer=net.newTCPServer -- store the original method ---~ net.threading.proxy={} -- namespace for the proxy stuff. Because of the desgin intention of both UDP/TCP servers Only one proxy is needed -lanes=require("lanes") -serverlinda = lanes.linda() -mt={ - __index=function(t,k) print("IND",t,k) end, - __newindex=function(t,k,v) print("NewIND",t,k,v) end, -} -test={} -setmetatable(test,mt) -test.a="hi" -test.a=true -g=test['a'] -print(test.b) ---~ setmetatable(net.threading.proxy,mt) -- set the proxies metatable, to prevent bleeding only create one server. - diff --git a/examples/love2d Threading Example/core/net/users.lua b/examples/love2d Threading Example/core/net/users.lua deleted file mode 100644 index f99f2ec..0000000 --- a/examples/love2d Threading Example/core/net/users.lua +++ /dev/null @@ -1,37 +0,0 @@ -require("net.identity") --[[ This module extends the functions of the identity module -It aims to make the handling of users who are not online more seamless. -Without this handling offline users is a pain. -]] -net:registerModule("users",{1,0,0}) -net.users.online={} -- all online users and offline users -net.users.offline={} -- all online users and offline users -net.OnServerCreated:connect(function(s) - s.OnUserLoggedIn(function(user,cid,ip,port,dTable) - -- - end) - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - if self:userLoggedIn(cid) then -- If the user is logged in we do the tests - -- - else - return - end - end,"users") -end) -net.OnClientCreated:connect(function(c) - c.OnUserList=multi:newConnection() - c.OnDataRecieved(function(self,data) - -- - end,"users") - function c:searchUsers(nickname) -- sends a query to the server, returns list of userids and nicks close to the query - -- - end - function c:addFriend(USERID) - -- - end - function c:removeFriend(USERID) - -- - end - function c:getFriends(USERID) - -- - end -end) diff --git a/examples/love2d Threading Example/core/net/version.lua b/examples/love2d Threading Example/core/net/version.lua deleted file mode 100644 index 258bb4b..0000000 --- a/examples/love2d Threading Example/core/net/version.lua +++ /dev/null @@ -1,43 +0,0 @@ -require("net") -require("net.aft") -net:registerModule("version",{1,0,0}) -- allows communication of versions for modules -net.version.HOSTS={ - ["Lua"]=1, - ["LuaJIT"]=1, - ["Love2d"]=2, -- Yes love2d uses luaJIT, but the filesystem works a bit differently - ["Corona"]=3, -} -net.version.OS={ - ["Windows"]=1, - ["Unix"]=2, - ["RPI"]=3, -} ---net.version.EOL="\60\69\110\100\45\79\102\45\70\105\108\101\45\84\114\97\110\115\102\101\114\62" -net.OnServerCreated:connect(function(s) - s.OnDataRecieved(function(self,data,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - local cmd,arg1,arg2=data:match("!version! ") - end,"version") - s.OnClientConnected(function(self,CID_OR_HANDLE,IP_OR_HANDLE,PORT_OR_IP) - multi:newFunction(function(func) -- anom func, allows for fancy multitasking - multi:newFunction(function(self) - local range=self:newRange() - for i in range(1,#self.loadedModules) do - local mod=self.loadedModules[i] - self:send(IP_OR_HANDLE,"!version! CHECK "..mod.." NIL",PORT_OR_IP) -- sends command to client to return the version of the module - end - end)() - func=nil -- we dont want 1000s+ of these anom functions lying around - end)()-- lets call the function - self:send(IP_OR_HANDLE,"!version! HOST NIL NIL",PORT_OR_IP) - end) -end) -net.OnClientCreated:connect(function(c) - c.OnDataRecieved(function(self,data) - local cmd,module,arg1=data:match("!version! (%S+) (%S+) (%S+)") - if cmd=="CHECK" then - self:send("!version! VER "..self.loadedModules[module].." "..net.getModuleVersion(module)) - elseif cmd=="UPDATE" then - -- - end - end,"version") -end) diff --git a/examples/love2d Threading Example/core/parseManager/AICM.lua b/examples/love2d Threading Example/core/parseManager/AICM.lua deleted file mode 100644 index 23496fa..0000000 --- a/examples/love2d Threading Example/core/parseManager/AICM.lua +++ /dev/null @@ -1,37 +0,0 @@ -AICM={} -AICM.functions={ - getAICMVersion=function(self) - return "1.0.0" - end, -} -function AICM:InitSyntax(obj,name) - obj:debug("Now using the Artificial Intelligence Communication module!") - obj.OnExtendedBlock(self.blockModule) - obj.OnCustomSyntax(self.syntaxModule) - obj:define(self.functions) -end -AICM.syntaxModule=function(self,line) - pVars,mStr=line:match("p%((.-)%)(.+)") - if pVars then - local vRef,vars=pVars:match("(.-):(.+)") - if vars:find(",") then - vars={unpack(vars:split(","))} - else - vars={vars} - end - tab={self:varExists(vRef):match(mStr)} -- self:varExists allows for all internal structures to just work - for i=1,#tab do - if vars[i] then - self._variables[vars[i]]=tab[i] - end - end - self:p() -- requried to progress the script - return { - text=line, - Type="AICMModule" - } - end -end -AICM.blockModule=function(obj,name,t,chunk,filename) - -- -end diff --git a/examples/love2d Threading Example/core/parseManager/EBIM.lua b/examples/love2d Threading Example/core/parseManager/EBIM.lua deleted file mode 100644 index 08ac193..0000000 --- a/examples/love2d Threading Example/core/parseManager/EBIM.lua +++ /dev/null @@ -1,71 +0,0 @@ -EBIM={} -EBIM.functions={ - getEBIMVersion=function(self) - return "1.0.0" - end, -} -EBIM.registry={} -function EBIM:registerEBlock(name,func) - self.registry[name]=func -end -function EBIM:InitSyntax(obj,name) - obj:debug("Now using the Extended Block Interface module!") - obj.OnExtendedBlock(self.blockModule) - obj.OnCustomSyntax(self.syntaxModule) - obj:define(self.functions) -end -EBIM.syntaxModule=function(self,line) - local cmd,args=line:match("(.-) (.+):") - if cmd then - local goal=nil - local _tab={} - for i=self.pos+1,#self._cblock do - if self._cblock[i]=="end"..cmd then - goal=i - break - else - table.insert(_tab,self._cblock[i]) - end - end - if goal==nil then - self:pushError("'end"..cmd.."' Expected to close '"..cmd.."'") - end - if EBIM.registry[cmd] then - EBIM.registry[cmd](self,args,_tab) - self.pos=goal+1 - else - self:pushError("Unknown command: "..cmd) - end - return { - Type="EBIM-Data", - text=cmd.." Block" - } - else - return - end -end -EBIM.blockModule=function(obj,name,t,chunk,filename) - --print(">: ",obj,name,t,chunk,filename) -end -EBIM:registerEBlock("string",function(self,args,tab) - local str={} - for i=1,#tab do - table.insert(str,tab[i]) - end - self:setVariable(args,table.concat(str,"\n")) -end) -EBIM:registerEBlock("list",function(self,args,tab) - local str={} - for i=1,#tab do - table.insert(str,self:varExists(tab[i])) - end - self:setVariable(args,str) -end) -EBIM:registerEBlock("dict",function(self,args,tab) - local str={} - for i=1,#tab do - local a,b=tab[i]:match("(.-):%s*(.+)") - str[a]=self:varExists(b) - end - self:setVariable(args,str) -end) diff --git a/examples/love2d Threading Example/core/parseManager/bytecode.lua b/examples/love2d Threading Example/core/parseManager/bytecode.lua deleted file mode 100644 index 26fb46f..0000000 --- a/examples/love2d Threading Example/core/parseManager/bytecode.lua +++ /dev/null @@ -1,44 +0,0 @@ --- In an attempt to speed up my library I will use a virtual machine that runs bytecode -compiler={} -compiler.cmds={ -- list of all of the commands - EVAL="\01", -- evaluate - SPLT="\02", -- split - TRIM="\03", -- trim - VEXT="\04", -- variable exists - ILST="\05", -- is a list - LSTR="\06", -- load string - FCAL="\07", -- Function call - SVAR="\08", -- set variable - LOAD="\09", -- load file - LAOD="\10", -- _load file - DEFN="\11", -- define external functions - HCBK="\12", -- Has c Block - CMBT="\13", -- combine truths - SETB="\14", -- set block - STRT="\15", -- start - PERR="\16", -- push error - PROG="\17", -- progress - PHED="\18", -- parse header - SSLT="\19", -- split string - NEXT="\20", -- next - -- Needs refining... One step at a time right! -} -function compiler:compile(filename) -- compiles the code into bytecode - -- First we load the code but don't run it - local engine=parseManager:load(filename) - -- This captures all of the methods and important info. This also ensures that the compiler and interperter stay in sync! - local bytecodeheader=bin.new() -- header will contain the order of blocks and important flags - local bytecode=bin.newDataBuffer() -- lets leave it at unlimited size because we don't know how long it will need to be - local functions={} -- will be populated with the important methods that must be preloaded - local prebytecode={} -- this contains bytecode that has yet to be sterilized - for blockname,blockdata in pairs(engine._chunks) do - -- lets get some variables ready - local code,_type,nextblock,filename=blockdata[1],blockdata[2],blockdata.next,blockdata.file - -- note nextblock may be nil on 2 condidions. The first is when the leaking flag is disabled and the other is when the block in question was the last block defined - local lines=bin._lines(code) - print("\n["..blockname.."]\n") - for i=1,#lines do - print(lines[i]) - end - end -end diff --git a/examples/love2d Threading Example/core/parseManager/init.lua b/examples/love2d Threading Example/core/parseManager/init.lua deleted file mode 100644 index af90212..0000000 --- a/examples/love2d Threading Example/core/parseManager/init.lua +++ /dev/null @@ -1,1277 +0,0 @@ -function trim(s) - return s:match'^()%s*$' and '' or s:match'^%s*(.*%S)' -end -parseManager={} -parseManager._VERSION={1,0,0} -dialogueManager=parseManager -- for backwards purposes -parseManager.OnExtendedBlock=multi:newConnection(true) -- true protects the module from crashes -parseManager.OnCustomSyntax=multi:newConnection(true) -- true protects the module from crashes -function string:split( inSplitPattern, outResults ) - if not outResults then - outResults = {} - end - local theStart = 1 - local theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) - while theSplitStart do - table.insert( outResults, string.sub( self, theStart, theSplitStart-1 ) ) - theStart = theSplitEnd + 1 - theSplitStart, theSplitEnd = string.find( self, inSplitPattern, theStart ) - end - table.insert( outResults, string.sub( self, theStart ) ) - return outResults -end -function parseManager:debug(txt) - if self.stats.debugging then - self._methods:debug(txt) - end -end -function parseManager.split(s,pat) - local pat=pat or "," - local res = {} - local start = 1 - local state = 0 - local c = '.' - local elem = '' - for i = 1, #s do - c = s:sub(i, i) - if state == 0 or state == 3 then -- start state or space after comma - if state == 3 and c == ' ' then - state = 0 -- skipped the space after the comma - else - state = 0 - if c == '"' or c=="'" then - state = 1 - elem = elem .. '"' - elseif c=="[" then - state = 1 - elem = elem .. '[' - elseif c == pat then - res[#res + 1] = elem - elem = '' - state = 3 -- skip over the next space if present - else - elem = elem .. c - end - end - elseif state == 1 then -- inside quotes - if c == '"' or c=="'" then --quote detection could be done here - state = 0 - elem = elem .. '"' - elseif c=="]" then - state = 0 - elem = elem .. ']' - elseif c == '\\' then - state = 2 - else - elem = elem .. c - end - elseif state == 2 then -- after \ in string - elem = elem .. c - state = 1 - end - end - res[#res + 1] = elem - return res -end -parseManager._chunks={} -parseManager._cblock={} -parseManager._cblockname="" -parseManager._pos=1 -parseManager._labels={ - -- {chunkname,pos} -} -parseManager.stats={ - leaking=false, - debugging=false, - topdown=true, - forseelabels=true, -} -parseManager._types={} -parseManager.__index=parseManager -parseManager._variables={__TYPE="ENV"} -parseManager.defualtENV=parseManager._variables -function parseManager:varExists(var) - if var==nil or var=="nil" then return end - if type(var)=="userdata" then return var end - if tonumber(var) then - return tonumber(var) - end - local aa,bb=var:match("(.-)%[\"(.-)\"%]") - if aa and bb then - return self.defualtENV[aa][bb] - end - if var:find('"') then - return self:parseHeader(var:sub(2,-2),self.defualtENV) - end - if var:find("%[%]") then - return {} - end - if var:sub(1,1)=="[" and var:sub(-1,-1)=="]" then - local list=var:match("[(.+)]") - if not list then - self:pushError("Invalid List assignment!") - end - local t=list:split(",") - local nlist={} - local a=":)" - for i=1,#t do - a=self:varExists(t[i]) - if a then - table.insert(nlist,a) - end - end - return nlist - end - if var=="true" then - return true - elseif var=="false" then - return false - end - local a,b=var:match("(.-)%[(.-)%]") - if a and b then - if type(self.defualtENV[a])=="table" then - if b=="-1" then - return self.defualtENV[a][#self.defualtENV[a]] - elseif b=="#" then - return self.defualtENV[a][math.random(1,#self.defualtENV[a])] - else - return self.defualtENV[a][tonumber(b) or self:varExists(b)] - end - end - if type(self.defualtENV[var])=="table" then - return self.defualtENV[var] - end - end - return self.defualtENV[var] or var -- if all tests fail, just pass on the data for the function to manage -end -function parseManager:isList(var) - local a,b=var:match("(.-)%[(.-)%]") - if not a or b then return end - if type(self.defualtENV[a])=="table" then - if b=="-1" then - return self.defualtENV[a][#self.defualtENV[a]] - else - return self.defualtENV[a][tonumber(b)] - end - end - return -end -function parseManager:loadString(data) - self:_load(bin.new(data),self) -end -parseManager.loadeddata={} -parseManager.envs={} -parseManager._methods={ - getLength=function(self,list) - return #(self:varExists(list) or {}) - end, - emptyList=function(self) - return {} - end, - DEBUG=function(self,text) - print(text) - end, - DIS=function(self,var) - print(var) - end, - SEED=function(self,n) - math.randomseed(tonumber(self:varExists(n) or n) or os.time()) - end, - delElem=function(self,l,i) - table.remove(l,i) - end, - addElem=function(self,l,d,i) - table.insert(l,(i or -1),d) - return l - end, - RANDOM=function(self,v1,v2) - if v1 then - return math.random(1,v1) - elseif v1 or v2 then - return math.random(tonumber(v1),tonumber(v2)) - else - return math.random() - end - end, - CALC=function(self,eq) - return self:evaluate(eq) - end, - GOTOV=function(self,label) - print(self:varExists(label)) - self._methods.GOTO(self,self:varExists(label)) - end, - GOTO=function(self,label) - label=label:gsub("-","") - if label=="__LASTGOTO" then - self:setBlock(self._labels.__LASTGOTO[1]) - self.pos=self._labels[label][2] - return true - end - --search current block for a label - if self.pos==nil then - error("Attempt to load a non existing block from the host script!") - end - for i=self.pos,#self._cblock do - local line=self._cblock[i] - local labeltest=line:match("::(.-)::") - if labeltest==label then - self._labels["__LASTGOTO"]={self._cblockname,self.pos} - self.pos=i - return true - end - end - --search for saved labels - if self._labels[label] then - self._labels["__LASTGOTO"]={self._cblockname,self.pos} - self:setBlock(self._labels[label][1]) - self.pos=self._labels[label][2] - return true - end - --search other blocks if enabled for labels - if self.stats.forseelabels then - for i,v in pairs(self._chunks) do - local chunks=bin._lines(v[1]) - for p=1,#chunks do - local line=chunks[p] - local labeltest=line:match("::(.-)::") - if labeltest==label then - self._labels["__LASTGOTO"]={self._cblockname,self.pos} - self:setBlock(i) - self.pos=p-1 - return true - end - end - end - end - if self.stats.forseelabels then - if self._methods.GOTOV(self,label) then return end - end - self:pushError("Attempt to goto a non existing label! You can only access labels in the current scope! Or labels that the code has seen thus far! "..label.." does not exist as a label!") - end, - QUIT=function() - os.exit() - end, - EXIT=function(self) - self.pos=math.huge - end, - TYPE=function(self,val) - return type(val) - end, - SAVE=function(self,filename) - if trim(filename)=="" then filename="saveData.sav" end - local t=bin.new() - t:addBlock(self.defualtENV) - t:addBlock(self._cblockname) - t:addBlock(self.pos) - t:addBlock(self._labels) - t:tofile(filename) - end, - UNSAVE=function(self,filename) - if trim(filename)=="" then filename="saveData.sav" end - self.defualtENV={} - os.remove(filename) - end, - RESTORE=function(self) - if not(self.loadeddata.load) then self:pushError("A call to RESTORE without calling LOAD") end - self.defualtENV=self.loadeddata:getBlock("t") - self:setBlock(self.loadeddata:getBlock("s")) - self.pos=self.loadeddata:getBlock("n") - self._labels=self.loadeddata:getBlock("t") - end, - LOAD=function(self,filename) - print(filename) - if not filename then filename="saveData.sav" end - if io.fileExists(filename) then - self.loadeddata=bin.load(filename) - return 1 - end - return 0 - end, - JUMP=function(self,to) - self:setBlock(to) - end, - SKIP=function(self,n) - self.pos=self.pos+tonumber(n) - end, - PRINT=function(self,text) print(text) end, - TRIGGER=function(self,to) - self:setBlock(to) - end, - COMPARE=function(self,t,v1,v2,trueto,falseto) -- if a blockname is __STAY then it will continue on - if t=="=" or t=="==" then - if v1==v2 then - self:setBlock(trueto) - else - self:setBlock(falseto) - end - elseif t==">=" then - if v1>=v2 then - self:setBlock(trueto) - else - self:setBlock(falseto) - end - elseif t=="<=" then - if v1<=v2 then - self:setBlock(trueto) - else - self:setBlock(falseto) - end - elseif t==">" then - if v1>v2 then - self:setBlock(trueto) - else - self:setBlock(falseto) - end - elseif t=="<" then - if v1"..a - end) - local choicetest=line:find("<$") or line:find("^<") - local lasttest=line:match("^\"(.+)\"$") - local labeltest=line:match("::(.-)::") - local var,list=line:match("([%w_]-)=%[(.+)%]") - local assignA,assignB=line:match("(.-)=(.+)") - local cond,f1,f2=line:match("^if%s*(.-)%s*then%s*([%w-%(%)]-)%s*|%s*([%w-%(%)]*)") - if choicetest then - local c=self._chunks[self._cblockname][1] - local test=bin.new(c:match("\"<(.-)>")) - test:fullTrim(true) - local header=line:match("\"(.-)\"<") - local stuff=test:lines() - local cho,met={},{} - for i=1,#stuff do - local a1,a2=stuff[i]:match("\"(.-)\" (.+)") - a1=tostring(self:parseHeader(a1,env)) - table.insert(cho,a1) - table.insert(met,a2) - end - return { - Type="choice", - text=tostring(self:parseHeader(header,env)), - choices=cho, - methods=met, - blocktype=self._chunks[self._cblockname][2] - } - elseif cond and f1 and f2 then - conds={["andors"]={}} - mtc="" - for a,b in cond:gmatch("(.-)([and ]+[or ]+)") do - b=b:gsub(" ","") - mtc=mtc..".-"..b - v1,c,v2=a:match("(.-)%s*([<>!~=]+)%s*(.+)") - table.insert(conds,{v1,c,v2}) - table.insert(conds.andors,b) - end - a=cond:match(mtc.."%s*(.+)") - v1,c,v2=a:match("(.-)%s*([<>!~=]+)%s*(.+)") - table.insert(conds,{v1,c,v2}) - truths={} - for i=1,#conds do - conds[i][1]=conds[i][1]:gsub("\"","") - conds[i][3]=conds[i][3]:gsub("\"","") - if conds[i][2]=="==" then - table.insert(truths,tostring((self:varExists(conds[i][1]) or conds[i][1]))==tostring((self:varExists(conds[i][3]) or conds[i][3]))) - elseif conds[i][2]=="!=" or conds[i][2]=="~=" then - table.insert(truths,tostring((self:varExists(conds[i][1]) or conds[i][1]))~=tostring((self:varExists(conds[i][3]) or conds[i][3]))) - elseif conds[i][2]==">=" then - table.insert(truths,tonumber((self:varExists(conds[i][1]) or conds[i][1]))>=tonumber((self:varExists(conds[i][3]) or conds[i][3]))) - elseif conds[i][2]=="<=" then - table.insert(truths,tonumber((self:varExists(conds[i][1]) or conds[i][1]))<=tonumber((self:varExists(conds[i][3]) or conds[i][3]))) - elseif conds[i][2]==">" then - table.insert(truths,tonumber((self:varExists(conds[i][1]) or conds[i][1]))>tonumber((self:varExists(conds[i][3]) or conds[i][3]))) - elseif conds[i][2]=="<" then - table.insert(truths,tonumber((self:varExists(conds[i][1]) or conds[i][1]))])(.+)") - if d then - if d=="<-" then - self:setVariable(assignA,self.defualtENV[_env][vv]) - self:p() - return { - Type="assignment", - var=assignA, - value=assignB, - env=true, - text=assignA.."="..assignB - } - elseif d=="->" then - self.defualtENV[_env][assignA]=self:varExists(vv) - self:p() - return { - Type="assignment", - var=assignA, - value=assignB, - env=true, - text=assignA.."="..assignB - } - end - end - local a1,a2=parseManager.split(assignA),parseManager.split(assignB) - for i=1,#a1 do - local a=self._methods.CALC(self,a2[i]) - if a then - a2[i]=a - end - local t=tonumber(a2[i]) - if not t then - t=a2[i] - end - env[a1[i]]=t - end - self:p() - return { - Type="assignment", - var=assignA, - value=assignB, - text=assignA.."="..assignB - } - else - local rets=self.OnCustomSyntax:Fire(self,line) - for i=1,#rets do - if type(rets[i][1])=="table" then - return rets[i][1] - else - return { - Type="unknown", - text=line - } - end - end - self:p() - return { - Type="unknown", - text=line - } - end -end -function parseManager:RunCode(code,entry,sel,env) -- returns an env or selectVarName - local file = bin.new("ENTRY "..(entry or "START").."\n"..code) - local run=parseManager:load(file) - run._methods = self._methods - run.defualtENV=self.defualtENV - run.defualtENV=self.defualtENV - for i,v in pairs(env or {}) do - run.defualtENV[i]=v - end - local t=run:start() - while true do - if t.Type=="text" then - print(t.text) - t=run:next() - elseif t.Type=="condition" then - t=run:next() - elseif t.Type=="assignment" then - t=run:next() - elseif t.Type=="label" then - t=run:next() - elseif t.Type=="method" then - t=run:next() - elseif t.Type=="choice" then - t=run:next(nil,math.random(1,#t.choices),nil,t) - elseif t.Type=="end" then - if t.text=="leaking" then -- go directly to the block right under the current block if it exists - t=run:next() - else - return (run.defualtENV[sel] or run.defualtENV) - end - elseif t.Type=="error" then - error(t.text) - else - t=run:next() - end - end -end -parseManager.symbols={} -- {sym,code} -function parseManager:registerSymbol(sym,code) - self.symbols[#self.symbols+1]={sym,code} -end -function parseManager:populateSymbolList(o) - local str="" - for i=1,#self.symbols do - str=self.symbols[i][1]..str - end - return str -end -function parseManager:isRegisteredSymbol(o,r,v) - for i=1,#self.symbols do - if self.symbols[i][1]==o then - return parseManager:RunCode(self.symbols[i][2],"CODE","ret-urn",{["l"]=r,["r"]=v,["mainenv"]=self.defualtENV}) - end - end - return false --self:pushError("Invalid Symbol "..o.."!") -end -function parseManager:evaluate(cmd,v) - v=v or 0 - local loop - local count=0 - local function helper(o,v,r) - if type(v)=="string" then - if v:find("%D") then - v=self:varExists(v) - end - end - if type(r)=="string" then - if r:find("%D") then - r=self:varExists(r) - end - end - local r=tonumber(r) or 0 - local gg=self:isRegisteredSymbol(o,r,v) - if gg then - return gg - elseif o=="+" then - return r+v - elseif o=="-" then - return r-v - elseif o=="/" then - return r/v - elseif o=="*" then - return r*v - elseif o=="^" then - return r^v - end - end - for i,v in pairs(math) do - cmd=cmd:gsub(i.."(%b())",function(a) - a=a:sub(2,-2) - if a:sub(1,1)=="-" then - a="0"..a - end - return v(self:evaluate(a)) - end) - end - cmd=cmd:gsub("%b()",function(a) - return self:evaluate(a:sub(2,-2)) - end) - for l,o,r in cmd:gmatch("(.*)([%+%^%-%*/"..self:populateSymbolList().."])(.*)") do - loop=true - count=count+1 - if l:find("[%+%^%-%*/]") then - v=self:evaluate(l,v) - v=helper(o,r,v) - else - if count==1 then - v=helper(o,r,l) - end - end - end - if not loop then return self:varExists(cmd) end - return v -end -parseManager.constructType=function(self,name,t,data,filename) - if t~="construct" then return end - --print(name,t,"[CODE]{"..data.."}") - self:registerSymbol(name,"[CODE]{"..data.."}") -end --- Let's add function -Stack = {} -function Stack:Create() - local t = {} - t._et = {} - function t:push(...) - if ... then - local targs = {...} - for _,v in ipairs(targs) do - table.insert(self._et, v) - end - end - end - function t:pop(num) - local num = num or 1 - local entries = {} - for i = 1, num do - if #self._et ~= 0 then - table.insert(entries, self._et[#self._et]) - table.remove(self._et) - else - break - end - end - return unpack(entries) - end - function t:getn() - return #self._et - end - function t:list() - for i,v in pairs(self._et) do - print(i, v) - end - end - return t -end -parseManager.funcstack=Stack:Create() -parseManager:define{ - __TRACEBACK=function(self) -- internal function to handle function calls - local t=self.funcstack:pop() - self:setBlock(t[1]) - self.pos=t[2] - -- We finished the function great. Lets restore the old env - self._methods.setENV(self,t[3]) - end -} -parseManager.funcType=function(link,name,t,data,filename) - local test,args=t:match("(function)%(*([%w,]*)%)*") - if not test then return false end - local vars={} - if args~="" then - for k, v in ipairs(parseManager.split(args)) do - table.insert(vars,v) - end - -- Time to collect local vars to populate we will use these below - end - link._chunks[name][1]=link._chunks[name][1].."\n__TRACEBACK()" - local func=function(self,...) - -- Here we will use the vars. First lets capture the args from the other side - local args={...} - -- Here we will play a matching game assigning vars to values. This cannot be done yet... - -- Now we have to change the enviroment so function vars are local to the function. - -- Also we need functions to be able to access the globals too - -- Now we invoke the createnv method - local env=self._methods.createENV(self) - -- A little messy compared to how its done within the interpreted language - -- Now we need a copy of the previous Env - -- We then invoke getEnv method - local lastEnv=self._methods.getENV(self) - -- Great now we have a new enviroment to play with and the current one - -- Next we need to store the current one somewhere - self.funcstack:push({self._cblockname,self.pos,lastEnv}) - -- We use a stack to keep track of function calls. Before I tried something else and it was a horrible mess - -- Stacks make it real nice and easy to use. We store a bit of data into the stack to use later - if self.funcstack:getn()>1024 then self:pushError("Stack Overflow!") end - -- Throw an error if the stack reaches 1024 elements. We don't want it to go forever and odds are neither does the user - -- Lets set that new env and prepare for the jump. To do this we invoke setEnv - self._methods.setENV(self,env) - -- Now lets play match making - for i=1,#vars do - self:setVariable(vars[i],args[i]) -- this method defualts to the current env - end - -- We are ready to make the jump with our stored data - self._methods.JUMP(self,name) - -- we need to be able to catch returns... This is where things get tricky. - -- We need a way to run the other code while also waiting here so we can return data - -- What we can do is return a reference to the enviroment and from there you can take what you want from the function - -- This is a really strange way to do things, but whats wrong with different - return env - end - link._methods[name]=func -end -parseManager.OnExtendedBlock(parseManager.funcType) -parseManager.constructType=function(link,name,t,data,filename) - local test,args=t:match("(construct)%(*([%w,]*)%)*") - if not test then return false end - local vars={} - if args~="" then - for k, v in ipairs(parseManager.split(args)) do - table.insert(vars,v) - end - end - link._chunks[name][1]=link._chunks[name][1].."\n__TRACEBACK()" - local func=function(self,...) - local args={...} - local env=self._methods.createENV(self) - local lastEnv=self._methods.getENV(self) - self.funcstack:push({self._cblockname,self.pos,lastEnv}) - if self.funcstack:getn()>1024 then self:pushError("Stack Overflow!") end - self._methods.setENV(self,env) - for i=1,#vars do - self:setVariable(vars[i],args[i]) - end - self._methods.JUMP(self,name) - return env - end - link._methods[name]=func -end -parseManager.OnExtendedBlock(parseManager.constructType) diff --git a/examples/love2d Threading Example/core/parseManager/interpreter.lua b/examples/love2d Threading Example/core/parseManager/interpreter.lua deleted file mode 100644 index e4a5b84..0000000 --- a/examples/love2d Threading Example/core/parseManager/interpreter.lua +++ /dev/null @@ -1,10 +0,0 @@ -engine={} -function engine:init(bytecodeFile) - self.code=bin.load(bytecodeFile).data -end ---[[OP-CODES - -]] -function engine:run(assessors) - -- -end diff --git a/examples/love2d Threading Example/core/test.dat b/examples/love2d Threading Example/core/test.dat deleted file mode 100644 index 8b9302a5192ce8e4866ed10d789b2f9f517d10d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56 zcmZQzU{HyV5A}2M5A}0#b@2oe5%KZz3=9m+d5O8HAO=Tbda68=A#+e=Vjd%q4+5e9 DUPKDn diff --git a/examples/love2d Threading Example/core/test.lua b/examples/love2d Threading Example/core/test.lua deleted file mode 100644 index f551bde..0000000 --- a/examples/love2d Threading Example/core/test.lua +++ /dev/null @@ -1,18 +0,0 @@ -require("Library") -local clock = os.clock -function sleep(n) -- seconds - local t0 = clock() - while clock() - t0 <= n do end -end -function tester(test) - sleep(1) - return test*10 -end ---~ require("bin") ---~ test=bin.namedBlockManager() ---~ test["name"]="Ryan" ---~ test["age"]=21 ---~ test:tofile("test.dat") ---~ test2=bin.namedBlockManager("test.dat") ---~ print(test2["name"]) ---~ print(test2["age"]) diff --git a/examples/love2d Threading Example/main.lua b/examples/love2d Threading Example/main.lua deleted file mode 100644 index f6f0525..0000000 --- a/examples/love2d Threading Example/main.lua +++ /dev/null @@ -1,37 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init{threadNamespace="THREAD"} -- load the love2d version of the lanesManager and requires the entire multi library ---IMPORTANT --- Do not make the above local, this is the one difference that the lanesManager does not have --- If these are local the functions will have the up-values put into them that do not exist on the threaded side --- You will need to ensure that the function does not refer to any up-values in its code. It will print an error if it does though --- Also each thread has a .1 second delay! This is used to generate a random values for each thread! -require("core.GuiManager") -- allows the use of graphics in the program. -gui.ff.Color=Color.Black -multi:newSystemThread("Test_Thread_1",function() - require("multi") - test = sThread.waitFor("testthing"):init() - multi:newTLoop(function() - print("------") - for i,v in pairs(test.tab) do - print("T1",i,v) - end - end,1) - multi:mainloop() -end) -multi:newSystemThread("Test_Thread_1",function() - require("multi") - test = sThread.waitFor("testthing"):init() - multi:newTLoop(function() - print("------") - for i,v in pairs(test.tab) do - print("T2",i,v) - end - end,1) - multi:mainloop() -end) -test = multi:newSystemThreadedTable("testthing"):init() -multi:newTLoop(function() - local a,b = multi.randomString(8),multi.randomString(4) - print(">",a,b) - test[a]=b -end,1) \ No newline at end of file diff --git a/examples/love2d Threading Example/main2.lua b/examples/love2d Threading Example/main2.lua deleted file mode 100644 index f049404..0000000 --- a/examples/love2d Threading Example/main2.lua +++ /dev/null @@ -1,65 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library ---IMPORTANT --- Do not make the above local, this is the one difference that the lanesManager does not have --- If these are local the functions will have the upvalues put into them that do not exist on the threaded side --- You will need to ensure that the function does not refer to any upvalues in its code. It will print an error if it does though --- Also each thread has a .1 second delay! This is used to generate a random values for each thread! -require("core.GuiManager") -gui.ff.Color=Color.Black -function multi:newSystemThreadedQueue(name) -- in love2d this will spawn a channel on both ends - local c={} - c.name=name - if love then - if love.thread then - function c:init() - self.chan=love.thread.getChannel(self.name) - function self:push(v) - self.chan:push(v) - end - function self:pop() - return self.chan:pop() - end - GLOBAL[self.name]=self - return self - end - return c - else - error("Make sure you required the love.thread module!") - end - else - c.linda=lanes.linda() - function c:push(v) - self.linda:send("Q",v) - end - function c:pop() - return ({self.linda:receive(0,"Q")})[2] - end - function c:init() - return self - end - GLOBAL[name]=c - end - return c -end -queue=multi:newSystemThreadedQueue("QUEUE"):init() -queue:push("This is a test") -queue:push("This is a test2") -queue:push("This is a test3") -queue:push("This is a test4") -multi:newSystemThread("test2",function() - queue=sThread.waitFor("QUEUE"):init() - data=queue:pop() - while data do - print(data) - data=queue:pop() - end - queue:push("DONE!") -end) -multi:newThread("test!",function() - thread.hold(function() return queue:pop() end) - t.text="Done!" -end) -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/main3.lua b/examples/love2d Threading Example/main3.lua deleted file mode 100644 index c025a66..0000000 --- a/examples/love2d Threading Example/main3.lua +++ /dev/null @@ -1,37 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library ---IMPORTANT --- Do not make the above local, this is the one difference that the lanesManager does not have --- If these are local the functions will have the upvalues put into them that do not exist on the threaded side --- You will need to ensure that the function does not refer to any upvalues in its code. It will print an error if it does though --- Also each thread has a .1 second delay! This is used to generate a random values for each thread! -require("core.GuiManager") -gui.ff.Color=Color.Black -queue=multi:newSystemThreadedQueue("QUEUE"):init() -queue:push(1) -queue:push(2) -queue:push(3) -queue:push(4) -queue:push(5) -queue:push(6) -multi:newSystemThread("STHREAD_1",function() - queue=sThread.waitFor("QUEUE"):init() - GLOBAL["QUEUE"]=nil - data=queue:pop() - while data do - print(data) - data=queue:pop() - end -end) -multi:newThread("THREAD_1",function() - while true do - if GLOBAL["QUEUE"]==nil then - t.text="Deleted a Global!" - break - end - thread.skip() -- give cpu time to other processes - end -end) -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/main4.lua b/examples/love2d Threading Example/main4.lua deleted file mode 100644 index b12e7a5..0000000 --- a/examples/love2d Threading Example/main4.lua +++ /dev/null @@ -1,19 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library -require("core.GuiManager") -gui.ff.Color=Color.Black -test=multi:newSystemThreadedTable("YO"):init() -test["test1"]="lol" -multi:newSystemThread("test",function() - tab=sThread.waitFor("YO"):init() - print(tab["test1"]) - sThread.sleep(3) - tab["test2"]="Whats so funny?" -end) -multi:newThread("test2",function() - print(test:waitFor("test2")) - t.text="DONE!" -end) -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/main5.lua b/examples/love2d Threading Example/main5.lua deleted file mode 100644 index d491c6a..0000000 --- a/examples/love2d Threading Example/main5.lua +++ /dev/null @@ -1,32 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library -require("core.GuiManager") -gui.ff.Color=Color.Black -jQueue=multi:newSystemThreadedJobQueue() -- this internally creates System threads, We told it to use a maximum of 3 cores at any given time -jQueue:registerJob("TEST_JOB",function(a,s) - math.randomseed(s) - print("testing...") - -- We will push a random # - TEST_JOB2() -- You can call other registered functions as well! - return math.random(0,255) -- send the result to the main thread -end) -jQueue:registerJob("TEST_JOB2",function(a,s) - print("Test Works!") -end) -jQueue:start() -tableOfOrder={} -jQueue.OnJobCompleted(function(JOBID,n) - -- JOBID is the completed job, starts at 1 and counts up by 1. - -- Threads finish at different times so jobids may be returned out of order! Be sure to have a way to order them - tableOfOrder[JOBID]=n -- we order ours by putting them into a table - if #tableOfOrder==10 then - print("We got all of the pieces!") - end -end) -for i=1,10 do -- Job Name of registered function, ... varargs - jQueue:pushJob("TEST_JOB","This is a test!",math.random(1,1000000)) -end -print("I pushed all of the jobs :)") -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/main6.lua b/examples/love2d Threading Example/main6.lua deleted file mode 100644 index bd24ca9..0000000 --- a/examples/love2d Threading Example/main6.lua +++ /dev/null @@ -1,14 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library -require("core.GuiManager") -gui.ff.Color=Color.Black -cmd=multi:newSystemThreadedExecute("C:/SystemThreadedExecuteTest.lua") -cmd.OnCMDFinished(function(code) - print("Got Code: "..code) -end) -multi:newTLoop(function() - print("...") -end,1) -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/main7.lua b/examples/love2d Threading Example/main7.lua deleted file mode 100644 index 8ed71a6..0000000 --- a/examples/love2d Threading Example/main7.lua +++ /dev/null @@ -1,69 +0,0 @@ -require("core.Library") -GLOBAL,sThread=require("multi.integration.loveManager").init() -- load the love2d version of the lanesManager and requires the entire multi library ---IMPORTANT --- Do not make the above local, this is the one difference that the lanesManager does not have --- If these are local the functions will have the upvalues put into them that do not exist on the threaded side --- You will need to ensure that the function does not refer to any upvalues in its code. It will print an error if it does though --- Also each thread has a .1 second delay! This is used to generate a random values for each thread! -require("core.GuiManager") -- allows the use of graphics in the program. -gui.ff.Color=Color.Black -function comma_value(amount) - local formatted = amount - while true do - formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') - if (k==0) then - break - end - end - return formatted -end -multi:newSystemThread("test1",function() -- Another difference is that the multi library is already loaded in the threaded enviroment as well as a call to multi:mainloop() - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 1"):OnBench(function(self,c) GLOBAL["T1"]=c multi:Stop() end) -end) -multi:newSystemThread("test2",function() -- spawns a thread in another lua process - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 2"):OnBench(function(self,c) GLOBAL["T2"]=c multi:Stop() end) -end) -multi:newSystemThread("test3",function() -- spawns a thread in another lua process - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 3"):OnBench(function(self,c) GLOBAL["T3"]=c multi:Stop() end) -end) -multi:newSystemThread("test4",function() -- spawns a thread in another lua process - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 4"):OnBench(function(self,c) GLOBAL["T4"]=c multi:Stop() end) -end) -multi:newSystemThread("test5",function() -- spawns a thread in another lua process - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 5"):OnBench(function(self,c) GLOBAL["T5"]=c multi:Stop() end) -end) -multi:newSystemThread("test6",function() -- spawns a thread in another lua process - multi:benchMark(sThread.waitFor("Bench"),nil,"Thread 6"):OnBench(function(self,c) GLOBAL["T6"]=c multi:Stop() end) -end) -multi:newSystemThread("Combiner",function() -- spawns a thread in another lua process - function comma_value(amount) - local formatted = amount - while true do - formatted, k = string.gsub(formatted, "^(-?%d+)(%d%d%d)", '%1,%2') - if (k==0) then - break - end - end - return formatted - end - local b=comma_value(tostring(sThread.waitFor("T1")+sThread.waitFor("T2")+sThread.waitFor("T3")+sThread.waitFor("T4")+sThread.waitFor("T5")+sThread.waitFor("T6"))) - GLOBAL["DONE"]=b -end) -multi:newThread("test0",function() - -- sThread.waitFor("DONE") -- lets hold the main thread completely so we don't eat up cpu - -- os.exit() - -- when the main thread is holding there is a chance that error handling on the system threads may not work! - -- instead we can do this - while true do - thread.skip(1) -- allow error handling to take place... Otherwise lets keep the main thread running on the low - -- Before we held just because we could... But this is a game and we need to have logic continue - --sThreadM.sleep(.001) -- Sleeping for .001 is a greeat way to keep cpu usage down. Make sure if you aren't doing work to rest. Abuse the hell out of GLOBAL if you need to :P - if GLOBAL["DONE"] then - t.text="Bench: "..GLOBAL["DONE"] - end - end -end) -GLOBAL["Bench"]=3 -t=gui:newTextLabel("no done yet!",0,0,300,100) -t:centerX() -t:centerY() diff --git a/examples/love2d Threading Example/multi/all.lua b/examples/love2d Threading Example/multi/all.lua deleted file mode 100644 index d14aac6..0000000 --- a/examples/love2d Threading Example/multi/all.lua +++ /dev/null @@ -1 +0,0 @@ -require("multi") diff --git a/examples/love2d Threading Example/multi/compat/backwards[1,5,0].lua b/examples/love2d Threading Example/multi/compat/backwards[1,5,0].lua deleted file mode 100644 index a0f52a8..0000000 --- a/examples/love2d Threading Example/multi/compat/backwards[1,5,0].lua +++ /dev/null @@ -1,305 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] -multi.OnObjectCreated(function(obj) - if obj.Type=="loop" then - function obj:Act() - for i=1,#self.func do - self.func[i](self.Parent.clock()-self.Start,self) - end - end - elseif obj.Type=="step" then - function obj:Act() - if self~=nil then - if self.spos==0 then - if self.pos==self.start then - for fe=1,#self.funcS do - self.funcS[fe](self) - end - end - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - if self.pos-self.count==self.endAt then - self:Pause() - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - elseif obj.Type=="tstep" then - function c:Act() - if self.clock()-self.timer>=self.set then - self:Reset() - if self.pos==self.start then - for fe=1,#self.funcS do - self.funcS[fe](self) - end - end - for i=1,#self.func do - self.func[i](self.pos,self) - end - self.pos=self.pos+self.count - if self.pos-self.count==self.endAt then - self:Pause() - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start - end - end - end - end -end) -if thread then - function multi:newThreadedLoop(name,func) - local c=self:newTBase() - c.Type='loopThread' - c.Start=os.clock() - if func then - c.func={func} - end - function c:tofile(path) - local m=bin.new() - m:addBlock(self.Type) - m:addBlock(self.func) - m:addBlock(self.Active) - m:tofile(path) - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:OnLoop(func) - table.insert(self.func,func) - end - c.rest=false - c.updaterate=0 - c.restRate=.75 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) - else - for i=1,#c.func do - c.func[i](os.clock()-self.Start,c) - end - thread.sleep(c.updaterate) - end - end - end) - self:create(c) - return c - end - function multi:newThreadedStep(name,start,reset,count,skip) - local c=self:newTBase() - local think=1 - c.Type='stepThread' - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.funcS={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:tofile(path) - local m=bin.new() - m:addBlock(self.Type) - m:addBlock(self.func) - m:addBlock(self.funcE) - m:addBlock(self.funcS) - m:addBlock({pos=self.pos,endAt=self.endAt,skip=self.skip,spos=self.spos,count=self.count,start=self.start}) - m:addBlock(self.Active) - m:tofile(path) - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - c.Reset=c.Resume - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.rest=true - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c.updaterate=0 - c.restRate=.1 - multi:newThread(name,function(ref) - while true do - if c.rest then - ref:sleep(c.restRate) - else - if c~=nil then - if c.spos==0 then - if c.pos==c.start then - for fe=1,#c.funcS do - c.funcS[fe](c) - end - end - for i=1,#c.func do - c.func[i](c.pos,c) - end - c.pos=c.pos+c.count - if c.pos-c.count==c.endAt then - c:Pause() - for fe=1,#c.funcE do - c.funcE[fe](c) - end - c.pos=c.start - end - end - end - c.spos=c.spos+1 - if c.spos>=c.skip then - c.spos=0 - end - ref:sleep(c.updaterate) - end - end - end) - self:create(c) - return c - end - function multi:newThreadedTStep(name,start,reset,count,set) - local c=self:newTBase() - local think=1 - c.Type='tstepThread' - c.Priority=self.Priority_Low - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - c.funcS={} - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=self.start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:tofile(path) - local m=bin.new() - m:addBlock(self.Type) - m:addBlock(self.func) - m:addBlock(self.funcE) - m:addBlock(self.funcS) - m:addBlock({pos=self.pos,endAt=self.endAt,skip=self.skip,timer=self.timer,count=self.count,start=self.start,set=self.set}) - m:addBlock(self.Active) - m:tofile(path) - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.Active=nil - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - c.updaterate=0 - c.restRate=0 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) - else - if os.clock()-c.timer>=c.set then - c:Reset() - if c.pos==c.start then - for fe=1,#c.funcS do - c.funcS[fe](c) - end - end - for i=1,#c.func do - c.func[i](c.pos,c) - end - c.pos=c.pos+c.count - if c.pos-c.count==c.endAt then - c:Pause() - for fe=1,#c.funcE do - c.funcE[fe](c) - end - c.pos=c.start - end - end - thread.skip(c.updaterate) - end - end - end) - self:create(c) - return c - end -end diff --git a/examples/love2d Threading Example/multi/compat/love2d.lua b/examples/love2d Threading Example/multi/compat/love2d.lua deleted file mode 100644 index 569cb2b..0000000 --- a/examples/love2d Threading Example/multi/compat/love2d.lua +++ /dev/null @@ -1,36 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] -require("multi") -os.sleep=love.timer.sleep -multi.drawF={} -function multi.dManager() - for ii=1,#multi.drawF do - love.graphics.setColor(255,255,255,255) - multi.drawF[ii]() - end -end -function multi:onDraw(func,i) - i=i or 1 - table.insert(self.drawF,i,func) -end diff --git a/examples/love2d Threading Example/multi/init.lua b/examples/love2d Threading Example/multi/init.lua deleted file mode 100644 index b89a995..0000000 --- a/examples/love2d Threading Example/multi/init.lua +++ /dev/null @@ -1,2272 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] -require("bin") -if table.unpack then - unpack=table.unpack -end -function table.merge(t1, t2) - for k,v in pairs(t2) do - if type(v) == 'table' then - if type(t1[k] or false) == 'table' then - table.merge(t1[k] or {}, t2[k] or {}) - else - t1[k] = v - end - else - t1[k] = v - end - end - return t1 -end -_print=print -function print(...) - if not __SUPPRESSPRINTS then - _print(...) - end -end -_write=io.write -function io.write(...) - if not __SUPPRESSWRITES then - _write(...) - end -end -multi = {} -multi.Version="1.9.2" -multi._VERSION="1.9.2" -multi.stage='mostly-stable' -multi.__index = multi -multi.Mainloop={} -multi.Tasks={} -multi.Tasks2={} -multi.Garbage={} -multi.ender={} -multi.Children={} -multi.Paused={} -multi.Active=true -multi.fps=60 -multi.Id=-1 -multi.Type='mainprocess' -multi.Rest=0 -multi._type=type -multi.Jobs={} -multi.queue={} -multi.jobUS=2 -multi.clock=os.clock -multi.time=os.time -multi.LinkedPath=multi -multi.isRunning=false -multi.queuefinal=function(self) - self:Destroy() - if self.Parent.Mainloop[#self.Parent.Mainloop] then - if self.Parent.Mainloop[#self.Parent.Mainloop].Type=="alarm" then - self.Parent.Mainloop[#self.Parent.Mainloop]:Reset() - self.Parent.Mainloop[#self.Parent.Mainloop].Active=true - else - self.Parent.Mainloop[#self.Parent.Mainloop]:Resume() - end - else - for i=1,#self.Parent.funcE do - self.Parent.funcE[i](self) - end - self.Parent:Remove() - end -end ---Do not change these ever...Any other number will not work (Unless you are using enablePriority2()) -multi.Priority_Core=1 -multi.Priority_High=4 -multi.Priority_Above_Normal=16 -multi.Priority_Normal=64 -multi.Priority_Below_Normal=256 -multi.Priority_Low=1024 -multi.Priority_Idle=4096 -multi.PList={multi.Priority_Core,multi.Priority_High,multi.Priority_Above_Normal,multi.Priority_Normal,multi.Priority_Below_Normal,multi.Priority_Low,multi.Priority_Idle} -multi.PStep=1 ---^^^^ -multi.PriorityTick=1 -- Between 1,2 and 4 -multi.Priority=multi.Priority_Core -multi.threshold=256 -multi.threstimed=.001 -function multi:setThreshold(n) - self.threshold=n or 120 -end -function multi:setThrestimed(n) - self.threstimed=n or .001 -end -function multi:getLoad() - return multi:newFunction(function(self) - multi.scheduler:Pause() - local sample=#multi.Mainloop - local FFloadtest=0 - multi:benchMark(multi.threstimed):OnBench(function(_,l3) FFloadtest=l3*(1/multi.threstimed) end) - self:hold(function() return FFloadtest~=0 end) - local val=FFloadtest/sample - multi.scheduler:Resume() - if val>multi.threshold then - return 0 - else - return 100-((val/multi.threshold)*100) - end - end)() -end -function multi:setDomainName(name) - self[name]={} -end -function multi:linkDomain(name) - return self[name] -end -function multi:_Pause() - self.Active=false -end -function multi:setPriority(s) - if type(s)==number then - self.Priority=s - elseif type(s)=='string' then - if s:lower()=='core' or s:lower()=='c' then - self.Priority=self.Priority_Core - elseif s:lower()=='high' or s:lower()=='h' then - self.Priority=self.Priority_High - elseif s:lower()=='above' or s:lower()=='an' then - self.Priority=self.Priority_Above_Normal - elseif s:lower()=='normal' or s:lower()=='n' then - self.Priority=self.Priority_Normal - elseif s:lower()=='below' or s:lower()=='bn' then - self.Priority=self.Priority_Below_Normal - elseif s:lower()=='low' or s:lower()=='l' then - self.Priority=self.Priority_Low - elseif s:lower()=='idle' or s:lower()=='i' then - self.Priority=self.Priority_Idle - end - end -end --- System -function os.getOS() - if package.config:sub(1,1)=='\\' then - return 'windows' - else - return 'unix' - end -end -if os.getOS()=='windows' then - function os.sleep(n) - if n > 0 then os.execute('ping -n ' .. tonumber(n+1) .. ' localhost > NUL') end - end -else - function os.sleep(n) - os.execute('sleep ' .. tonumber(n)) - end -end -function multi:getParentProcess() - return self.Mainloop[self.CID] -end -multi.GetParentProcess=multi.getParentProcess -function multi:Stop() - self.Active=false -end -function multi:condition(cond) - if not self.CD then - self:Pause() - self.held=true - self.CD=cond.condition - elseif not(cond.condition()) then - self.held=false - self:Resume() - self.CD=nil - return false - end - self.Parent:Do_Order() - return true -end -multi.Condition=multi.condition -function multi:isHeld() - return self.held -end -multi.important={} -multi.IsHeld=multi.isHeld -function multi.executeFunction(name,...) - if type(_G[name])=='function' then - _G[name](...) - else - print('Error: Not a function') - end -end -function multi:waitFor(obj) - local value=false - self.__waiting=function() - value=true - end - obj:connectFinal(self.__waiting) - self:hold(function() return value end) -end -multi.WaitFor=multi.waitFor -function multi:reboot(r) - local before=collectgarbage('count') - multi.Mainloop={} - multi.Tasks={} - multi.Tasks2={} - multi.Garbage={} - multi.ender={} - multi.Children={} - multi.Paused={} - multi.Active=true - multi.fps=60 - multi.Id=-1 - multi.Type='mainprocess' - multi.Rest=0 - multi._type=type - multi.Jobs={} - multi.queue={} - multi.jobUS=2 - multi.clock=os.clock - multi.time=os.time - multi.LinkedPath=multi - multi.isRunning=false - multi.Priority_Core=1 - multi.Priority_High=4 - multi.Priority_Above_Normal=16 - multi.Priority_Normal=64 - multi.Priority_Below_Normal=256 - multi.Priority_Low=1024 - multi.Priority_Idle=4096 - multi.PList={multi.Priority_Core,multi.Priority_High,multi.Priority_Above_Normal,multi.Priority_Normal,multi.Priority_Below_Normal,multi.Priority_Low,multi.Priority_Idle} - multi.PStep=1 - multi.PriorityTick=1 - multi.Priority=multi.Priority_Core - multi.threshold=256 - multi.threstimed=.001 - if r then - for i,v in pairs(_G) do - if type(i)=='table' then - if i.Parent and i.Id and i.Act then - _G[i]={} - end - end - end - end - collectgarbage() - local after=collectgarbage('count') - print([[Before rebooting total Ram used was ]]..before..[[Kb -After rebooting total Ram used is ]]..after..[[ Kb -A total of ]]..(before-after)..[[Kb was cleaned up]]) -end -function multi:getChildren() - return self.Mainloop -end -function multi:getVersion() - return multi.Version -end -function multi:getPlatform() - if love then - if love.thread then - return "love2d" - end - else - return "lanes" - end -end -function multi:canSystemThread() - return false -end ---Processor -function multi:getError() - if self.error then - return self.error - end -end -function multi:Do_Order() - local Loop=self.Mainloop - _G.ID=0 - for _D=#Loop,1,-1 do - if Loop[_D] then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end -end -function multi:enablePriority() - function self:Do_Order() - local Loop=self.Mainloop - _G.ID=0 - local PS=self - for _D=#Loop,1,-1 do - for P=1,7 do - if Loop[_D] then - if (PS.PList[P])%Loop[_D].Priority==0 then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end - end - end - end -end -function multi:enablePriority2() - function self:Do_Order() - local Loop=self.Mainloop - _G.ID=0 - local PS=self - for _D=#Loop,1,-1 do - if Loop[_D] then - if (PS.PStep)%Loop[_D].Priority==0 then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end - end - PS.PStep=PS.PStep+1 - if PS.PStep>self.Priority_Idle then - PS.PStep=1 - end - end -end -multi.disablePriority=multi.unProtect -function multi:benchMark(sec,p,pt) - local temp=self:newLoop(function(self,t) - if self.clock()-self.init>self.sec then - if pt then - print(pt.." "..self.c.." Steps in "..sec.." second(s)!") - end - self.tt(self.sec,self.c) - self:Destroy() - else - self.c=self.c+1 - end - end) - temp.Priority=p or 1 - function temp:OnBench(func) - self.tt=func - end - self.tt=function() end - temp.sec=sec - temp.init=self.clock() - temp.c=0 - return temp -end -function multi.startFPSMonitior() - if not multi.runFPS then - multi.doFPS(s) - multi.runFPS=true - end -end -function multi.doFPS(s) - multi:benchMark(1):OnBench(doFPS) - if s then - multi.fps=s - end -end ---Helpers -function multi.timer(func,...) - local timer=multi:newTimer() - timer:Start() - args={func(...)} - return timer:Get(),unpack(args) -end -function multi:IsAnActor() - return ({watcher=true,tstep=true,step=true,updater=true,loop=true,alarm=true,event=true})[self.Type] -end -function multi:OnMainConnect(func) - table.insert(self.func,func) -end -function multi:protect() - function self:Do_Order() - local Loop=self.Mainloop - for _D=#Loop,1,-1 do - if Loop[_D]~=nil then - Loop[_D].Id=_D - self.CID=_D - local status, err=pcall(Loop[_D].Act,Loop[_D]) - if err and not(Loop[_D].error) then - Loop[_D].error=err - self.OnError:Fire(Loop[_D],err) - end - end - end - end -end -function multi:unProtect() - local Loop=self.Mainloop - _G.ID=0 - for _D=#Loop,1,-1 do - if Loop[_D] then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end -end -function multi:reallocate(o,n) - n=n or #o.Mainloop+1 - local int=self.Parent - self:Destroy() - self.Parent=o - table.insert(o.Mainloop,n,self) - self.Active=true -end -multi.Reallocate=multi.Reallocate -function multi:setJobSpeed(n) - self.jobUS=n -end -function multi:hasJobs() - return #self.Jobs>0,#self.Jobs -end -function multi:getJobs() - return #self.Jobs -end -function multi:removeJob(name) - for i=#self.Jobs,1,-1 do - if self.Jobs[i][2]==name then - table.remove(self.Jobs,i) - end - end -end -function multi:FreeMainEvent() - self.func={} -end -function multi:connectFinal(func) - if self.Type=='event' then - self:OnEvent(func) - elseif self.Type=='alarm' then - self:OnRing(func) - elseif self.Type=='step' or self.Type=='tstep' then - self:OnEnd(func) - else - print("Warning!!! "..self.Type.." doesn't contain a Final Connection State! Use "..self.Type..":Break(function) to trigger it's final event!") - self:OnBreak(func) - end -end -multi.ConnectFinal=multi.connectFinal -function multi:Break() - self:Pause() - self.Active=nil - for i=1,#self.ender do - if self.ender[i] then - self.ender[i](self) - end - end -end -function multi:OnBreak(func) - table.insert(self.ender,func) -end -function multi:isPaused() - return not(self.Active) -end -multi.IsPaused=multi.isPaused -function multi:isActive() - return self.Active -end -multi.IsActive=multi.isActive -function multi:getType() - return self.Type -end -multi.GetType=multi.getType -function multi:Sleep(n) - self:hold(n) -end -multi.sleep=multi.Sleep --- Advance Timer stuff -function multi:SetTime(n) - if not n then n=3 end - local c=multi:newBase() - c.Type='timemaster' - c.timer=multi:newTimer() - c.timer:Start() - c.set=n - c.link=self - self._timer=c.timer - function c:Act() - if self.timer:Get()>=self.set then - self.link:Pause() - for i=1,#self.link.funcTM do - self.link.funcTM[i](self.link) - end - self:Destroy() - end - end - return c -end -multi.ResetTime=multi.SetTime -function multi:ResolveTimer(...) - self._timer:Pause() - for i=1,#self.funcTMR do - self.funcTMR[i](self,...) - end - self:Pause() -end -function multi:OnTimedOut(func) - self.funcTM[#self.funcTM+1]=func -end -function multi:OnTimerResolved(func) - self.funcTMR[#self.funcTMR+1]=func -end --- Timer stuff done -function multi:Pause() - if self.Type=='mainprocess' then - print("You cannot pause the main process. Doing so will stop all methods and freeze your program! However if you still want to use multi:_Pause()") - else - self.Active=false - if self.Parent.Mainloop[self.Id]~=nil then - table.remove(self.Parent.Mainloop,self.Id) - table.insert(self.Parent.Paused,self) - self.PId=#self.Parent.Paused - end - end -end -function multi:Resume() - if self.Type=='process' or self.Type=='mainprocess' then - self.Active=true - local c=self:getChildren() - for i=1,#c do - c[i]:Resume() - end - else - if self:isPaused() then - table.remove(self.Parent.Paused,self.PId) - table.insert(self.Parent.Mainloop,self) - self.Id=#self.Parent.Mainloop - self.Active=true - end - end -end -function multi:resurrect() - table.insert(self.Parent.Mainloop,self) - self.Active=true -end -multi.Resurrect=multi.resurrect -function multi:Destroy() - if self.Type=='process' or self.Type=='mainprocess' then - local c=self:getChildren() - for i=1,#c do - self.OnObjectDestroyed:Fire(c[i]) - c[i]:Destroy() - end - else - for i=1,#self.Parent.Mainloop do - if self.Parent.Mainloop[i]==self then - self.Parent.OnObjectDestroyed:Fire(self) - table.remove(self.Parent.Mainloop,i) - break - end - end - self.Active=false - end -end - -function multi:hold(task) - self:Pause() - self.held=true - if type(task)=='number' then - local timer=multi:newTimer() - timer:Start() - while timer:Get()0 then ---~ for i=1,#self.Parent.FC do ---~ self.Parent.FC[i]:Fire(...) ---~ end ---~ end - if self.Parent.protect then - local t=pcall(self.func,...) - if t then - return t - end - else - return self.func(...) - end - end, - Remove=function(self) - for i=1,#self.Link do - if self.Link[i][2]~=nil then - if self.Link[i][2]==self.ID then - table.remove(self.Link,i) - self.remove=function() end - self.Link=nil - self.ID=nil - return true - end - end - end - end, - } - temp.Destroy=temp.Remove - if name then - self.connections[name]=temp - end - return temp - end - c.Connect=c.connect - function c:tofile(path) - local m=bin.new() - m:addBlock(self.Type) - m:addBlock(self.func) - m:tofile(path) - end - return c -end -multi.OnObjectCreated=multi:newConnection() -multi.OnObjectDestroyed=multi:newConnection() -function multi:newJob(func,name) - if not(self.Type=='mainprocess' or self.Type=='process') then error('Can only create an object on multi or an interface obj') return false end - local c = {} - if self.Type=='process' then - setmetatable(c, self.Parent) - else - setmetatable(c, self) - end - c.Active=true - c.func={} - c.Id=0 - c.PId=0 - c.Parent=self - c.Type='job' - c.trigfunc=func or function() end - function c:Act() - self:trigfunc(self) - end - table.insert(self.Jobs,{c,name}) - if self.JobRunner==nil then - self.JobRunner=self:newAlarm(self.jobUS) - self.JobRunner:OnRing(function(self) - if #self.Parent.Jobs>0 then - if self.Parent.Jobs[1] then - self.Parent.Jobs[1][1]:Act() - table.remove(self.Parent.Jobs,1) - end - end - self:Reset(self.Parent.jobUS) - end) - end -end -function multi:newRange() - local selflink=self - local temp={ - getN = function(self) selflink:Do_Order() self.n=self.n+self.c if self.n>self.b then self.Link.held=false self.Link:Resume() return nil end return self.n end, - } - setmetatable(temp,{ - __call=function(self,a,b,c) - self.c=c or 1 - self.n=a-self.c - self.a=a - self.b=b - self.Link=selflink--.Parent.Mainloop[selflink.CID] or - self.Link:Pause() - self.Link.held=true - return function() return self:getN() end - end - }) - self:create(temp) - return temp -end -multi.NewRange=multi.newRange -function multi:newCondition(func) - local c={['condition']=func,Type="condition"} - self:create(c) - return c -end -multi.NewCondition=multi.newCondition -function multi:mainloop() - if not multi.isRunning then - multi.isRunning=true - for i=1,#self.Tasks do - self.Tasks[i](self) - end - rawset(self,'Start',self.clock()) - while self.Active do - self:Do_Order() - end - else - return "Already Running!" - end -end -function multi:protectedMainloop() - multi:protect() - if not multi.isRunning then - multi.isRunning=true - for i=1,#self.Tasks do - self.Tasks[i](self) - end - rawset(self,'Start',self.clock()) - while self.Active do - self:Do_Order() - end - else - return "Already Running!" - end -end -function multi:unprotectedMainloop() - multi:unProtect() - if not multi.isRunning then - multi.isRunning=true - for i=1,#self.Tasks do - self.Tasks[i](self) - end - rawset(self,'Start',self.clock()) - while self.Active do - local Loop=self.Mainloop - _G.ID=0 - for _D=#Loop,1,-1 do - if Loop[_D] then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end - end - else - return "Already Running!" - end -end -function multi:prioritizedMainloop1() - multi:enablePriority() - if not multi.isRunning then - multi.isRunning=true - for i=1,#self.Tasks do - self.Tasks[i](self) - end - rawset(self,'Start',self.clock()) - while self.Active do - local Loop=self.Mainloop - _G.ID=0 - local PS=self - for _D=#Loop,1,-1 do - if Loop[_D] then - if (PS.PList[PS.PStep])%Loop[_D].Priority==0 then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end - end - PS.PStep=PS.PStep+1 - if PS.PStep>7 then - PS.PStep=1 - end - end - else - return "Already Running!" - end -end -function multi:prioritizedMainloop2() - multi:enablePriority2() - if not multi.isRunning then - multi.isRunning=true - for i=1,#self.Tasks do - self.Tasks[i](self) - end - rawset(self,'Start',self.clock()) - while self.Active do - local Loop=self.Mainloop - _G.ID=0 - local PS=self - for _D=#Loop,1,-1 do - if Loop[_D] then - if (PS.PStep)%Loop[_D].Priority==0 then - if Loop[_D].Active then - Loop[_D].Id=_D - self.CID=_D - Loop[_D]:Act() - end - end - end - end - PS.PStep=PS.PStep+1 - if PS.PStep>self.Priority_Idle then - PS.PStep=1 - end - end - else - return "Already Running!" - end -end -function multi._tFunc(self,dt) - for i=1,#self.Tasks do - self.Tasks[i](self) - end - if dt then - self.pump=true - end - self.pumpvar=dt - rawset(self,'Start',self.clock()) -end -function multi:uManager(dt) - if self.Active then - self:oneTime(self._tFunc,self,dt) - function self:uManager(dt) - self:Do_Order() - end - self:Do_Order() - end -end ---Core Actors -function multi:newCustomObject(objRef,t) - local c={} - if t=='process' then - c=self:newBase() - if type(objRef)=='table' then - table.merge(c,objRef) - end - if not c.Act then - function c:Act() - -- Empty function - end - end - else - c=objRef or {} - end - if not c.Type then - c.Type='coustomObject' - end - self:create(c) - return c -end -function multi:newEvent(task) - local c=self:newBase() - c.Type='event' - c.Task=task or function() end - function c:Act() - if self.Task(self) then - self:Pause() - for _E=1,#self.func do - self.func[_E](self) - end - end - end - function c:SetTask(func) - self.Task=func - end - function c:OnEvent(func) - table.insert(self.func,func) - end - self:create(c) - return c -end -function multi:newUpdater(skip) - local c=self:newBase() - c.Type='updater' - c.pos=1 - c.skip=skip or 1 - function c:Act() - if self.pos>=self.skip then - self.pos=0 - for i=1,#self.func do - self.func[i](self) - end - end - self.pos=self.pos+1 - end - function c:SetSkip(n) - self.skip=n - end - c.OnUpdate=self.OnMainConnect - self:create(c) - return c -end -function multi:newAlarm(set) - local c=self:newBase() - c.Type='alarm' - c.Priority=self.Priority_Low - c.timer=self:newTimer() - c.set=set or 0 - function c:Act() - if self.timer:Get()>=self.set then - self:Pause() - self.Active=false - for i=1,#self.func do - self.func[i](self) - end - end - end - function c:Resume() - self.Parent.Resume(self) - self.timer:Resume() - end - function c:Reset(n) - if n then self.set=n end - self:Resume() - self.timer:Reset() - end - function c:OnRing(func) - table.insert(self.func,func) - end - function c:Pause() - self.timer:Pause() - self.Parent.Pause(self) - end - self:create(c) - return c -end -function multi:newLoop(func) - local c=self:newBase() - c.Type='loop' - c.Start=self.clock() - if func then - c.func={func} - end - function c:Act() - for i=1,#self.func do - self.func[i](self,self.Parent.clock()-self.Start) - end - end - function c:OnLoop(func) - table.insert(self.func,func) - end - self:create(c) - return c -end -function multi:newFunction(func) - local c={} - c.func=func - mt={ - __index=multi, - __call=function(self,...) if self.Active then return self:func(...) end local t={...} return "PAUSED" end - } - c.Parent=self - function c:Pause() - self.Active=false - end - function c:Resume() - self.Active=true - end - setmetatable(c,mt) - self:create(c) - return c -end -function multi:newStep(start,reset,count,skip) - local c=self:newBase() - think=1 - c.Type='step' - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.funcS={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Act() - if self~=nil then - if self.spos==0 then - if self.pos==self.start then - for fe=1,#self.funcS do - self.funcS[fe](self) - end - end - for i=1,#self.func do - self.func[i](self,self.pos) - end - self.pos=self.pos+self.count - if self.pos-self.count==self.endAt then - self:Pause() - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start - end - end - end - self.spos=self.spos+1 - if self.spos>=self.skip then - self.spos=0 - end - end - c.Reset=c.Resume - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.Active=nil - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - self:create(c) - return c -end -function multi:newTask(func) - table.insert(self.Tasks,func) -end -function multi:newTLoop(func,set) - local c=self:newBase() - c.Type='tloop' - c.set=set or 0 - c.timer=self:newTimer() - c.life=0 - if func then - c.func={func} - end - function c:Act() - if self.timer:Get()>=self.set then - self.life=self.life+1 - for i=1,#self.func do - self.func[i](self,self.life) - end - self.timer:Reset() - end - end - function c:Resume() - self.Parent.Resume(self) - self.timer:Resume() - end - function c:Pause() - self.timer:Pause() - self.Parent.Pause(self) - end - function c:OnLoop(func) - table.insert(self.func,func) - end - self:create(c) - return c -end -function multi:newTrigger(func) - local c={} - c.Type='trigger' - c.trigfunc=func or function() end - function c:Fire(...) - self:trigfunc(...) - end - self:create(c) - return c -end -function multi:newTStep(start,reset,count,set) - local c=self:newBase() - think=1 - c.Type='tstep' - c.Priority=self.Priority_Low - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=self.clock() - c.set=set or 1 - c.funcS={} - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=self.start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=self.clock() - self:Resume() - end - function c:Act() - if self.clock()-self.timer>=self.set then - self:Reset() - if self.pos==self.start then - for fe=1,#self.funcS do - self.funcS[fe](self) - end - end - for i=1,#self.func do - self.func[i](self,self.pos) - end - self.pos=self.pos+self.count - if self.pos-self.count==self.endAt then - self:Pause() - for fe=1,#self.funcE do - self.funcE[fe](self) - end - self.pos=self.start - end - end - end - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.Active=nil - end - function c:Reset(n) - if n then self.set=n end - self.timer=self.clock() - self:Resume() - end - self:create(c) - return c -end -function multi:newWatcher(namespace,name) - local function WatcherObj(ns,n) - if self.Type=='queue' then - print("Cannot create a watcher on a queue! Creating on 'multi' instead!") - self=multi - end - local c=self:newBase() - c.Type='watcher' - c.ns=ns - c.n=n - c.cv=ns[n] - function c:OnValueChanged(func) - table.insert(self.func,func) - end - function c:Act() - if self.cv~=self.ns[self.n] then - for i=1,#self.func do - self.func[i](self,self.cv,self.ns[self.n]) - end - self.cv=self.ns[self.n] - end - end - self:create(c) - return c - end - if type(namespace)~='table' and type(namespace)=='string' then - return WatcherObj(_G,namespace) - elseif type(namespace)=='table' and (type(name)=='string' or 'number') then - return WatcherObj(namespace,name) - else - print('Warning, invalid arguments! Nothing returned!') - end -end --- Threading stuff -thread={} -multi.GlobalVariables={} -if os.getOS()=="windows" then - thread.__CORES=tonumber(os.getenv("NUMBER_OF_PROCESSORS")) -else - thread.__CORES=tonumber(io.popen("nproc --all"):read("*n")) -end -function thread.sleep(n) - coroutine.yield({"_sleep_",n or 0}) -end -function thread.hold(n) - if n then if n() then return false end end - coroutine.yield({"_hold_",n or function() return true end}) - return true -end -function thread.skip(n) - coroutine.yield({"_skip_",n or 0}) -end -function thread.kill() - coroutine.yield({"_kill_",":)"}) -end -function thread.yeild() - coroutine.yield({"_sleep_",0}) -end -function thread.getCores() - return thread.__CORES -end -function thread.set(name,val) - multi.GlobalVariables[name]=val - return true -end -function thread.get(name) - return multi.GlobalVariables[name] -end -function thread.waitFor(name) - thread.hold(function() return thread.get(name)~=nil end) - return thread.get(name) -end -function thread.testFor(name,val,sym) - thread.hold(function() return thread.get(name)~=nil end) - return thread.get(name) -end -function multi:newTBase(name) - local c = {} - c.name=name - c.Active=true - c.func={} - c.ender={} - c.Id=0 - c.PId=0 - c.Parent=self - c.important={} - c.held=false - c.ToString=multi.ToString - c.ToFile=multi.ToFile - return c -end -function multi:newThread(name,func) - local c={} - c.ref={} - c.Name=name - c.thread=coroutine.create(func) - c.sleep=1 - c.Type="thread" - c.firstRunDone=false - c.timer=multi.scheduler:newTimer() - c.ref.Globals=self:linkDomain("Globals") - function c.ref:send(name,val) - ret=coroutine.yield({Name=name,Value=val}) - self:syncGlobals(ret) - end - function c.ref:get(name) - return self.Globals[name] - end - function c.ref:kill() - err=coroutine.yield({"_kill_"}) - if err then - error("Failed to kill a thread! Exiting...") - end - end - function c.ref:sleep(n) - if type(n)=="function" then - ret=coroutine.yield({"_hold_",n}) - self:syncGlobals(ret) - elseif type(n)=="number" then - n = tonumber(n) or 0 - ret=coroutine.yield({"_sleep_",n}) - self:syncGlobals(ret) - else - error("Invalid Type for sleep!") - end - end - function c.ref:syncGlobals(v) - self.Globals=v - end - table.insert(self:linkDomain("Threads"),c) - if not multi.scheduler:isActive() then - multi.scheduler:Resume() - end -end -multi:setDomainName("Threads") -multi:setDomainName("Globals") -multi.scheduler=multi:newLoop() -multi.scheduler.Type="scheduler" -function multi.scheduler:setStep(n) - self.skip=tonumber(n) or 24 -end -multi.scheduler.skip=0 -multi.scheduler.counter=0 -multi.scheduler.Threads=multi:linkDomain("Threads") -multi.scheduler.Globals=multi:linkDomain("Globals") -multi.scheduler:OnLoop(function(self) - self.counter=self.counter+1 - for i=#self.Threads,1,-1 do - ret={} - if coroutine.status(self.Threads[i].thread)=="dead" then - table.remove(self.Threads,i) - else - if self.Threads[i].timer:Get()>=self.Threads[i].sleep then - if self.Threads[i].firstRunDone==false then - self.Threads[i].firstRunDone=true - self.Threads[i].timer:Start() - _,ret=coroutine.resume(self.Threads[i].thread,self.Threads[i].ref) - else - _,ret=coroutine.resume(self.Threads[i].thread,self.Globals) - end - if _==false then - self.Parent.OnError:Fire(self.Threads[i],ret) - print("Error in thread: <"..self.Threads[i].Name.."> "..ret) - end - if ret==true or ret==false then - print("Thread Ended!!!") - ret={} - end - end - if ret then - if ret[1]=="_kill_" then - table.remove(self.Threads,i) - elseif ret[1]=="_sleep_" then - self.Threads[i].timer:Reset() - self.Threads[i].sleep=ret[2] - elseif ret[1]=="_skip_" then - self.Threads[i].timer:Reset() - self.Threads[i].sleep=math.huge - local event=multi:newEvent(function(evnt) return multi.scheduler.counter>=evnt.counter end) - event.link=self.Threads[i] - event.counter=self.counter+ret[2] - event:OnEvent(function(evnt) - evnt.link.sleep=0 - end) - elseif ret[1]=="_hold_" then - self.Threads[i].timer:Reset() - self.Threads[i].sleep=math.huge - local event=multi:newEvent(ret[2]) - event.link=self.Threads[i] - event:OnEvent(function(evnt) - evnt.link.sleep=0 - end) - elseif ret.Name then - self.Globals[ret.Name]=ret.Value - end - end - end - end -end) -multi.scheduler:Pause() -multi.OnError=multi:newConnection() -function multi:newThreadedAlarm(name,set) - local c=self:newTBase(name) - c.Type='alarmThread' - c.timer=self:newTimer() - c.set=set or 0 - function c:Resume() - self.rest=false - self.timer:Resume() - end - function c:Reset(n) - if n then self.set=n end - self.rest=false - self.timer:Reset(n) - end - function c:OnRing(func) - table.insert(self.func,func) - end - function c:Pause() - self.timer:Pause() - self.rest=true - end - c.rest=false - c.updaterate=multi.Priority_Low -- skips - c.restRate=0 -- secs - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) -- rest a bit more when a thread is paused - else - if c.timer:Get()>=c.set then - c:Pause() - for i=1,#c.func do - c.func[i](c) - end - end - thread.skip(c.updaterate) -- lets rest a bit - end - end - end) - self:create(c) - return c -end -function multi:newThreadedUpdater(name,skip) - local c=self:newTBase(name) - c.Type='updaterThread' - c.pos=1 - c.skip=skip or 1 - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - c.OnUpdate=self.OnMainConnect - c.rest=false - c.updaterate=0 - c.restRate=.75 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) -- rest a bit more when a thread is paused - else - for i=1,#c.func do - c.func[i](c) - end - c.pos=c.pos+1 - thread.skip(c.skip) - end - end - end) - self:create(c) - return c -end -function multi:newThreadedTStep(name,start,reset,count,set) - local c=self:newTBase(name) - local think=1 - c.Type='tstepThread' - c.start=start or 1 - local reset = reset or math.huge - c.endAt=reset - c.pos=start or 1 - c.skip=skip or 0 - c.count=count or 1*think - c.funcE={} - c.timer=os.clock() - c.set=set or 1 - c.funcS={} - function c:Update(start,reset,count,set) - self.start=start or self.start - self.pos=self.start - self.endAt=reset or self.endAt - self.set=set or self.set - self.count=count or self.count or 1 - self.timer=os.clock() - self:Resume() - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.Active=nil - end - function c:Reset(n) - if n then self.set=n end - self.timer=os.clock() - self:Resume() - end - c.updaterate=0--multi.Priority_Low -- skips - c.restRate=0 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) -- rest a bit more when a thread is paused - else - if os.clock()-c.timer>=c.set then - c:Reset() - if c.pos==c.start then - for fe=1,#c.funcS do - c.funcS[fe](c) - end - end - for i=1,#c.func do - c.func[i](c,c.pos) - end - c.pos=c.pos+c.count - if c.pos-c.count==c.endAt then - c:Pause() - for fe=1,#c.funcE do - c.funcE[fe](c) - end - c.pos=c.start - end - end - thread.skip(c.updaterate) -- lets rest a bit - end - end - end) - self:create(c) - return c -end -function multi:newThreadedTLoop(name,func,n) - local c=self:newTBase(name) - c.Type='tloopThread' - c.restN=n or 1 - if func then - c.func={func} - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:OnLoop(func) - table.insert(self.func,func) - end - c.rest=false - c.updaterate=0 - c.restRate=.75 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) -- rest a bit more when a thread is paused - else - for i=1,#c.func do - c.func[i](c) - end - thread.sleep(c.restN) -- lets rest a bit - end - end - end) - self:create(c) - return c -end -function multi:newThreadedStep(name,start,reset,count,skip) - local c=self:newTBase(name) - local think=1 - c.Type='stepThread' - c.pos=start or 1 - c.endAt=reset or math.huge - c.skip=skip or 0 - c.spos=0 - c.count=count or 1*think - c.funcE={} - c.funcS={} - c.start=start or 1 - if start~=nil and reset~=nil then - if start>reset then - think=-1 - end - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - c.Reset=c.Resume - function c:OnStart(func) - table.insert(self.funcS,func) - end - function c:OnStep(func) - table.insert(self.func,1,func) - end - function c:OnEnd(func) - table.insert(self.funcE,func) - end - function c:Break() - self.rest=true - end - function c:Update(start,reset,count,skip) - self.start=start or self.start - self.endAt=reset or self.endAt - self.skip=skip or self.skip - self.count=count or self.count - self:Resume() - end - c.updaterate=0 - c.restRate=.1 - multi:newThread(name,function(ref) - while true do - if c.rest then - ref:sleep(c.restRate) -- rest a bit more when a thread is paused - else - if c~=nil then - if c.spos==0 then - if c.pos==c.start then - for fe=1,#c.funcS do - c.funcS[fe](c) - end - end - for i=1,#c.func do - c.func[i](c,c.pos) - end - c.pos=c.pos+c.count - if c.pos-c.count==c.endAt then - c:Pause() - for fe=1,#c.funcE do - c.funcE[fe](c) - end - c.pos=c.start - end - end - end - c.spos=c.spos+1 - if c.spos>=c.skip then - c.spos=0 - end - ref:sleep(c.updaterate) -- lets rest a bit - end - end - end) - self:create(c) - return c -end -function multi:newThreadedProcess(name) - local c = {} - setmetatable(c, multi) - function c:newBase(ins) - local ct = {} - setmetatable(ct, self.Parent) - ct.Active=true - ct.func={} - ct.ender={} - ct.Id=0 - ct.PId=0 - ct.Act=function() end - ct.Parent=self - ct.held=false - ct.ref=self.ref - table.insert(self.Mainloop,ct) - return ct - end - c.Parent=self - c.Active=true - c.func={} - c.Id=0 - c.Type='process' - c.Mainloop={} - c.Tasks={} - c.Tasks2={} - c.Garbage={} - c.Children={} - c.Paused={} - c.Active=true - c.Id=-1 - c.Rest=0 - c.updaterate=.01 - c.restRate=.1 - c.Jobs={} - c.queue={} - c.jobUS=2 - c.rest=false - function c:getController() - return nil - end - function c:Start() - self.rest=false - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:Remove() - self.ref:kill() - end - function c:kill() - err=coroutine.yield({"_kill_"}) - if err then - error("Failed to kill a thread! Exiting...") - end - end - function c:sleep(n) - if type(n)=="function" then - ret=coroutine.yield({"_hold_",n}) - elseif type(n)=="number" then - n = tonumber(n) or 0 - ret=coroutine.yield({"_sleep_",n}) - else - error("Invalid Type for sleep!") - end - end - c.hold=c.sleep - multi:newThread(name,function(ref) - while true do - if c.rest then - ref:Sleep(c.restRate) -- rest a bit more when a thread is paused - else - c:uManager() - ref:sleep(c.updaterate) -- lets rest a bit - end - end - end) - return c -end -function multi:newThreadedLoop(name,func) - local c=self:newTBase(name) - c.Type='loopThread' - c.Start=os.clock() - if func then - c.func={func} - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - function c:OnLoop(func) - table.insert(self.func,func) - end - c.rest=false - c.updaterate=0 - c.restRate=.75 - multi:newThread(name,function(ref) - while true do - if c.rest then - thread.sleep(c.restRate) -- rest a bit more when a thread is paused - else - for i=1,#c.func do - c.func[i](c,os.clock()-self.Start) - end - thread.sleep(c.updaterate) -- lets rest a bit - end - end - end) - self:create(c) - return c -end -function multi:newThreadedEvent(name,task) - local c=self:newTBase(name) - c.Type='eventThread' - c.Task=task or function() end - function c:OnEvent(func) - table.insert(self.func,func) - end - function c:Resume() - self.rest=false - end - function c:Pause() - self.rest=true - end - c.rest=false - c.updaterate=0 - c.restRate=1 - multi:newThread(name,function(ref) - while true do - if c.rest then - ref:sleep(c.restRate) -- rest a bit more when a thread is paused - else - if c.Task(self) then - for _E=1,#c.func do - c.func[_E](c) - end - c:Pause() - end - ref:sleep(c.updaterate) -- lets rest a bit - end - end - end) - self:create(c) - return c -end --- State Saving Stuff -function multi:IngoreObject() - self.Ingore=true -end -multi.scheduler:IngoreObject() -function multi:ToString() - if self.Ingore then return end - local t=self.Type - local data; - print(t) - if t:sub(-6)=="Thread" then - data={ - Type=t, - rest=self.rest, - updaterate=self.updaterest, - restrate=self.restrate, - name=self.name, - func=self.func, - important=self.important, - Active=self.Active, - ender=self.ender, - -- IDK if these need to be present... - -- Id=self.Id, - -- PId=self.PId, - held=self.held, - } - else - data={ - Type=t, - func=self.func, - funcTM=self.funcTM, - funcTMR=self.funcTMR, - important=self.important, - ender=self.ender, - -- IDK if these need to be present... - -- Id=self.Id, - -- PId=self.PId, - held=self.held, - } - end - if t=="eventThread" or t=="event" then - table.merge(data,{ - Task=self.Task, - }) - elseif t=="loopThread" or t=="loop" then - table.merge(data,{ - Start=self.Start, - }) - elseif t=="stepThread" or t=="step" then - table.merge(data,{ - funcE=self.funcE, - funcS=self.funcS, - pos=self.pos, - endAt=self.endAt, - start=self.start, - spos=self.spos, - skip=self.skip, - count=self.count, - }) - elseif t=="tloopThread" then - table.merge(data,{ - restN=self.restN, - }) - elseif t=="tloop" then - table.merge(data,{ - set=self.set, - life=self.life, - }) - elseif t=="tstepThread" or t=="tstep" then - table.merge(data,{ - funcE=self.funcE, - funcS=self.funcS, - pos=self.pos, - endAt=self.endAt, - start=self.start, - spos=self.spos, - skip=self.skip, - count=self.count, - timer=self.timer, - set=self.set, - reset=self.reset, - }) - elseif t=="updaterThread" or t=="updater" then - table.merge(data,{ - pos=self.pos, - skip=self.skip, - }) - elseif t=="alarmThread" or t=="alarm" then - table.merge(data,{ - set=self.set, - }) - elseif t=="watcher" then - print("Currently cannot sterilize a watcher object!") - -- needs testing - -- table.merge(data,{ - -- ns=self.ns, - -- n=self.n, - -- cv=self.cv, - -- }) - elseif t=="timemaster" then - -- Weird stuff is going on here! - -- Need to do some testing - table.merge(data,{ - timer=self.timer, - _timer=self._timer, - set=self.set, - link=self.link, - }) - elseif t=="process" or t=="mainprocess" then - local loop=self.Mainloop - local dat={} - for i=1,#loop do - local ins=loop[i]:ToString() - if ins~=nil then - table.insert(dat,ins) - end - end - local str=bin.new() - str:addBlock({Type=t}) - str:addBlock(#dat,4,"n") - for i=1,#dat do - str:addBlock(#dat[i],4,"n") - str:addBlock(dat[i]) - end - return str.data - end - for i,v in pairs(self.important) do - data[v]=self[v] - end - local str=bin.new() - str:addBlock(data) - return str.data -end -function multi:newFromString(str) - if type(str)=="table" then - if str.Type=="bin" then - str=str.data - end - end - local handle=bin.new(str) - local data=handle:getBlock("t") - local t=data.Type - if t=="mainprocess" then - local objs=handle:getBlock("n",4) - for i=1,objs do - self:newFromString(handle:getBlock("s",(handle:getBlock("n",4)))) - end - return self - elseif t=="process" then - local temp=multi:newProcess() - local objs=handle:getBlock("n",4) - for i=1,objs do - temp:newFromString(handle:getBlock("s",(handle:getBlock("n",4)))) - end - return temp - elseif t=="step" then -- GOOD - local item=self:newStep() - table.merge(item,data) - return item - elseif t=="tstep" then -- GOOD - local item=self:newTStep() - table.merge(item,data) - return item - elseif t=="tloop" then -- GOOD - local item=self:newTLoop() - table.merge(item,data) - return item - elseif t=="event" then -- GOOD - local item=self:newEvent(data.task) - table.merge(item,data) - return item - elseif t=="alarm" then -- GOOD - local item=self:newAlarm() - table.merge(item,data) - return item - elseif t=="watcher" then -- NEEDS TESTING - local item=self:newWatcher() - table.merge(item,data) - return item - elseif t=="updater" then -- GOOD - local item=self:newUpdater() - table.merge(item,data) - return item - elseif t=="loop" then -- GOOD - local item=self:newLoop() - table.merge(item,data) - return item - elseif t=="eventThread" then -- GOOD - local item=self:newThreadedEvent(data.name) - table.merge(item,data) - return item - elseif t=="loopThread" then -- GOOD - local item=self:newThreadedLoop(data.name) - table.merge(item,data) - return item - elseif t=="stepThread" then -- GOOD - local item=self:newThreadedStep(data.name) - table.merge(item,data) - return item - elseif t=="tloopThread" then -- GOOD - local item=self:newThreadedTLoop(data.name,nil,data.restN) - table.merge(item,data) - return item - elseif t=="tstepThread" then -- GOOD - local item=self:newThreadedTStep(data.name) - table.merge(item,data) - return item - elseif t=="updaterThread" then -- GOOD - local item=self:newThreadedUpdater(data.name) - table.merge(item,data) - return item - elseif t=="alarmThread" then -- GOOD - local item=self:newThreadedAlarm(data.name) - table.merge(item,data) - return item - end -end -function multi:Important(varname) - table.insert(important,varname) -end -function multi:ToFile(path) - bin.new(self:ToString()):tofile(path) -end -function multi:fromFile(path) - self:newFromString(bin.load(path)) -end -function multi:SetStateFlag(opt) - -- -end -function multi:quickStateSave(b) - -- -end -function multi:saveState(path,opt) - -- -end -function multi:loadState(path) - -- -end -function multi:setDefualtStateFlag(opt) - -- -end diff --git a/examples/love2d Threading Example/multi/integration/lanesManager.lua b/examples/love2d Threading Example/multi/integration/lanesManager.lua deleted file mode 100644 index 023dd81..0000000 --- a/examples/love2d Threading Example/multi/integration/lanesManager.lua +++ /dev/null @@ -1,146 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] -package.path="?/init.lua;?.lua;"..package.path -function os.getOS() - if package.config:sub(1,1)=='\\' then - return 'windows' - else - return 'unix' - end -end --- Step 1 get lanes -lanes=require("lanes").configure() ---~ package.path="lua/?/init.lua;lua/?.lua;"..package.path -require("multi") -- get it all and have it on all lanes -isMainThread=true -function multi:canSystemThread() - return true -end -function multi:getPlatform() - return "lanes" -end -local multi=multi --- Step 2 set up the linda objects -local __GlobalLinda = lanes.linda() -- handles global stuff -local __SleepingLinda = lanes.linda() -- handles sleeping stuff --- For convience a GLOBAL table will be constructed to handle requests -local GLOBAL={} -setmetatable(GLOBAL,{ - __index=function(t,k) - return __GlobalLinda:get(k) - end, - __newindex=function(t,k,v) - __GlobalLinda:set(k,v) - end, -}) --- Step 3 rewrite the thread methods to use lindas -local THREAD={} -function THREAD.set(name,val) - __GlobalLinda:set(name,val) -end -function THREAD.get(name) - __GlobalLinda:get(name) -end -local function randomString(n) - local str = '' - local strings = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} - for i=1,n do - str = str..''..strings[math.random(1,#strings)] - end - return str -end -function THREAD.waitFor(name) - local function wait() - math.randomseed(os.time()) - __SleepingLinda:receive(.001,randomString(12)) - end - repeat wait() until __GlobalLinda:get(name) - return __GlobalLinda:get(name) -end -function THREAD.testFor(name,val,sym) - -- -end -function THREAD.getCores() - return THREAD.__CORES -end -if os.getOS()=="windows" then - THREAD.__CORES=tonumber(os.getenv("NUMBER_OF_PROCESSORS")) -else - THREAD.__CORES=tonumber(io.popen("nproc --all"):read("*n")) -end -function THREAD.kill() -- trigger the lane destruction - error("Thread was killed!") -end -function THREAD.getName() - return THREAD_NAME -end ---[[ Step 4 We need to get sleeping working to handle timing... We want idle wait, not busy wait -Idle wait keeps the CPU running better where busy wait wastes CPU cycles... Lanes does not have a sleep method -however, a linda recieve will in fact be a idle wait! So we use that and wrap it in a nice package]] -function THREAD.sleep(n) - math.randomseed(os.time()) - __SleepingLinda:receive(n,randomString(12)) -end -function THREAD.hold(n) - local function wait() - math.randomseed(os.time()) - __SleepingLinda:receive(.001,randomString(12)) - end - repeat wait() until n() -end --- Step 5 Basic Threads! -function multi:newSystemThread(name,func,...) - local c={} - local __self=c - c.name=name - c.Type="sthread" - local THREAD_NAME=name - local function func2(...) - _G["THREAD_NAME"]=THREAD_NAME - func() - end - c.thread=lanes.gen("*", func2)(...) - function c:kill() - --self.status:Destroy() - self.thread:cancel() - print("Thread: '"..self.name.."' has been stopped!") - end - c.status=multi:newUpdater(multi.Priority_IDLE) - c.status.link=c - c.status:OnUpdate(function(self) - local v,err,t=self.link.thread:join(.001) - if err then - multi.OnError:Fire(self.link,err) - print("Error in systemThread: '"..self.link.name.."' <"..err..">") - self:Destroy() - end - end) - return c -end -print("Integrated Lanes!") -multi.integration={} -- for module creators -multi.integration.GLOBAL=GLOBAL -multi.integration.THREAD=THREAD -require("multi.integration.shared") -return {init=function() return GLOBAL,THREAD end} diff --git a/examples/love2d Threading Example/multi/integration/loveManager.lua b/examples/love2d Threading Example/multi/integration/loveManager.lua deleted file mode 100644 index 172f8e9..0000000 --- a/examples/love2d Threading Example/multi/integration/loveManager.lua +++ /dev/null @@ -1,361 +0,0 @@ -require("multi.compat.love2d") -function multi:canSystemThread() - return true -end -function multi:getPlatform() - return "love2d" -end -multi.integration={} -multi.integration.love2d={} -multi.integration.love2d.ThreadBase=[[ -tab={...} -__THREADID__=table.remove(tab,1) -__THREADNAME__=table.remove(tab,1) -require("love.filesystem") -require("love.system") -require("love.timer") -require("love.image") -require("multi") -GLOBAL={} -isMainThread=false -setmetatable(GLOBAL,{ - __index=function(t,k) - __sync__() - return __proxy__[k] - end, - __newindex=function(t,k,v) - __sync__() - __proxy__[k]=v - if type(v)=="userdata" then - __MainChan__:push(v) - else - __MainChan__:push("SYNC "..type(v).." "..k.." "..resolveData(v)) - end - end, -}) -function __sync__() - local data=__mythread__:pop() - while data do - love.timer.sleep(.01) - if type(data)=="string" then - local cmd,tp,name,d=data:match("(%S-) (%S-) (%S-) (.+)") - if name=="__DIEPLZ"..__THREADID__.."__" then - error("Thread: "..__THREADID__.." has been stopped!") - end - if cmd=="SYNC" then - __proxy__[name]=resolveType(tp,d) - end - else - __proxy__[name]=data - end - data=__mythread__:pop() - end -end -function ToStr(val, name, skipnewlines, depth) - skipnewlines = skipnewlines or false - depth = depth or 0 - local tmp = string.rep(" ", depth) - if name then - if type(name) == "string" then - tmp = tmp .. "[\""..name.."\"] = " - else - tmp = tmp .. "["..(name or "").."] = " - end - end - if type(val) == "table" then - tmp = tmp .. "{" .. (not skipnewlines and " " or "") - for k, v in pairs(val) do - tmp = tmp .. ToStr(v, k, skipnewlines, depth + 1) .. "," .. (not skipnewlines and " " or "") - end - tmp = tmp .. string.rep(" ", depth) .. "}" - elseif type(val) == "number" then - tmp = tmp .. tostring(val) - elseif type(val) == "string" then - tmp = tmp .. string.format("%q", val) - elseif type(val) == "boolean" then - tmp = tmp .. (val and "true" or "false") - elseif type(val) == "function" then - tmp = tmp .. "loadDump([===["..dump(val).."]===])" - else - tmp = tmp .. "\"[inserializeable datatype:" .. type(val) .. "]\"" - end - return tmp -end -function resolveType(tp,d) - if tp=="number" then - return tonumber(d) - elseif tp=="bool" then - return (d=="true") - elseif tp=="function" then - return loadDump("[==["..d.."]==]") - elseif tp=="table" then - return loadstring("return "..d)() - elseif tp=="nil" then - return nil - else - return d - end -end -function resolveData(v) - local data="" - if type(v)=="table" then - return ToStr(v) - elseif type(v)=="function" then - return dump(v) - elseif type(v)=="string" or type(v)=="number" or type(v)=="bool" or type(v)=="nil" then - return tostring(v) - end - return data -end -sThread={} -local function randomString(n) - local c=os.clock() - local a=0 - while os.clock()" - c.thread=love.thread.newThread(multi.integration.love2d.ThreadBase:gsub("INSERT_USER_CODE",dump(func))) - c.thread:start(c.ID,c.name,...) - function c:kill() - multi.integration.GLOBAL["__DIEPLZ"..self.ID.."__"]="__DIEPLZ"..self.ID.."__" - end - return c -end -function love.threaderror( thread, errorstr ) - multi.OnError:Fire(thread,errorstr) - print("Error in systemThread: "..tostring(thread)..": "..errorstr) -end -local THREAD={} -function THREAD.set(name,val) - GLOBAL[name]=val -end -function THREAD.get(name) - return GLOBAL[name] -end -function THREAD.waitFor(name) - repeat multi:uManager() until GLOBAL[name] - return GLOBAL[name] -end -function THREAD.getCores() - return love.system.getProcessorCount() -end -function THREAD.sleep(n) - love.timer.sleep(n) -end -function THREAD.hold(n) - repeat multi:uManager() until n() -end -__channels__={} -multi.integration.GLOBAL=GLOBAL -multi.integration.THREAD=THREAD -updater=multi:newUpdater() -updater:OnUpdate(function(self) - local data=multi.integration.love2d.mainChannel:pop() - while data do - if type(data)=="string" then - local cmd,tp,name,d=data:match("(%S-) (%S-) (%S-) (.+)") - if cmd=="SYNC" then - __proxy__[name]=resolveType(tp,d) - for i=1,#__channels__ do - -- send data to other threads - if type(v)=="userdata" then - __channels__[i]:push(v) - else - __channels__[i]:push("SYNC "..tp.." "..name.." "..d) - end - end - elseif cmd=="NEWTHREAD" then - __channels__[#__channels__+1]=love.thread.getChannel(tp) - for k,v in pairs(__proxy__) do -- sync the global with each new thread - if type(v)=="userdata" then - __channels__[#__channels__]:push(v) - else - __channels__[#__channels__]:push("SYNC "..type(v).." "..k.." "..resolveData(v)) - end - end - end - else - __proxy__[name]=data - end - data=multi.integration.love2d.mainChannel:pop() - end -end) -require("multi.integration.shared") -print("Integrated Love2d!") -return { - init=function(t) - if t then - if t.threadNamespace then - multi.integration.THREADNAME=t.threadNamespace - multi.integration.love2d.ThreadBase:gsub("sThread",t.threadNamespace) - end - if t.globalNamespace then - multi.integration.GLOBALNAME=t.globalNamespace - multi.integration.love2d.ThreadBase:gsub("GLOBAL",t.globalNamespace) - end - end - return GLOBAL,THREAD - end -} diff --git a/examples/love2d Threading Example/multi/integration/luvitManager.lua b/examples/love2d Threading Example/multi/integration/luvitManager.lua deleted file mode 100644 index ba1e653..0000000 --- a/examples/love2d Threading Example/multi/integration/luvitManager.lua +++ /dev/null @@ -1,127 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] - --- I DEMAND USAGE FOR LUVIT --- Cannot use discordia without my multitasking library (Which I love more that the luvit platform... then again i'm partial :P) -package.path="?/init.lua;?.lua;"..package.path -local function _INIT(luvitThread,timer) - -- lots of this stuff should be able to stay the same - function os.getOS() - if package.config:sub(1,1)=='\\' then - return 'windows' - else - return 'unix' - end - end - -- Step 1 get setup threads on luvit... Sigh how do i even... - require("multi") - isMainThread=true - function multi:canSystemThread() - return true - end - function multi:getPlatform() - return "luvit" - end - local multi=multi - -- Step 2 set up the Global table... is this possible? - local GLOBAL={} - setmetatable(GLOBAL,{ - __index=function(t,k) - --print("No Global table when using luvit integration!") - return nil - end, - __newindex=function(t,k,v) - --print("No Global table when using luvit integration!") - end, - }) - local THREAD={} - function THREAD.set(name,val) - --print("No Global table when using luvit integration!") - end - function THREAD.get(name) - --print("No Global table when using luvit integration!") - end - local function randomString(n) - local str = '' - local strings = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'} - for i=1,n do - str = str..''..strings[math.random(1,#strings)] - end - return str - end - function THREAD.waitFor(name) - --print("No Global table when using luvit integration!") - end - function THREAD.testFor(name,val,sym) - --print("No Global table when using luvit integration!") - end - function THREAD.getCores() - return THREAD.__CORES - end - if os.getOS()=="windows" then - THREAD.__CORES=tonumber(os.getenv("NUMBER_OF_PROCESSORS")) - else - THREAD.__CORES=tonumber(io.popen("nproc --all"):read("*n")) - end - function THREAD.kill() -- trigger the thread destruction - error("Thread was Killed!") - end - -- hmmm if im cleaver I can get this to work... but since data passing isn't going to be a thing its probably not important - function THREAD.sleep(n) - --print("No Global table when using luvit integration!") - end - function THREAD.hold(n) - --print("No Global table when using luvit integration!") - end - -- Step 5 Basic Threads! - local function entry(path,name,func,...) - local timer = require'timer' - local luvitThread = require'thread' - package.path=path - loadstring(func)(...) - end - function multi:newSystemThread(name,func,...) - local c={} - local __self=c - c.name=name - c.Type="sthread" - c.thread={} - c.func=string.dump(func) - function c:kill() - -- print("No Global table when using luvit integration!") - end - luvitThread.start(entry,package.path,name,c.func,...) - return c - end - print("Integrated Luvit!") - multi.integration={} -- for module creators - multi.integration.GLOBAL=GLOBAL - multi.integration.THREAD=THREAD - require("multi.integration.shared") - -- Start the main mainloop... This allows you to process your multi objects, but the engine on the main thread will be limited to .001 or 1 millisecond sigh... - local interval = timer.setInterval(1, function () - multi:uManager() - end) -end -return {init=function(threadHandle,timerHandle) _INIT(threadHandle,timerHandle) return GLOBAL,THREAD end} diff --git a/examples/love2d Threading Example/multi/integration/shared.lua b/examples/love2d Threading Example/multi/integration/shared.lua deleted file mode 100644 index 87d850d..0000000 --- a/examples/love2d Threading Example/multi/integration/shared.lua +++ /dev/null @@ -1,519 +0,0 @@ ---[[ -MIT License - -Copyright (c) 2017 Ryan Ward - -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. -]] -function multi:newSystemThreadedQueue(name) -- in love2d this will spawn a channel on both ends - local c={} -- where we will store our object - c.name=name -- set the name this is important for the love2d side - if love then -- check love - if love.thread then -- make sure we can use the threading module - function c:init() -- create an init function so we can mimic on both love2d and lanes - self.chan=love.thread.getChannel(self.name) -- create channel by the name self.name - function self:push(v) -- push to the channel - local tab - if type(v)=="table" then - tab = {} - for i,c in pairs(v) do - if type(c)=="function" then - tab[i]="\1"..string.dump(c) - else - tab[i]=c - end - end - self.chan:push(tab) - else - self.chan:push(c) - end - end - function self:pop() -- pop from the channel - local v=self.chan:pop() - if not v then return end - if type(v)=="table" then - tab = {} - for i,c in pairs(v) do - if type(c)=="string" then - if c:sub(1,1)=="\1" then - tab[i]=loadstring(c:sub(2,-1)) - else - tab[i]=c - end - else - tab[i]=c - end - end - return tab - else - return self.chan:pop() - end - end - function self:peek() - local v=self.chan:peek() - if not v then return end - if type(v)=="table" then - tab = {} - for i,c in pairs(v) do - if type(c)=="string" then - if c:sub(1,1)=="\1" then - tab[i]=loadstring(c:sub(2,-1)) - else - tab[i]=c - end - else - tab[i]=c - end - end - return tab - else - return self.chan:pop() - end - end - GLOBAL[self.name]=self -- send the object to the thread through the global interface - return self -- return the object - end - return c - else - error("Make sure you required the love.thread module!") -- tell the user if he/she didn't require said module - end - else - c.linda=lanes.linda() -- lanes is a bit easier, create the linda on the main thread - function c:push(v) -- push to the queue - self.linda:send("Q",v) - end - function c:pop() -- pop the queue - return ({self.linda:receive(0,"Q")})[2] - end - function c:peek() - return self.linda:get("Q") - end - function c:init() -- mimic the feature that love2d requires, so code can be consistent - return self - end - multi.integration.GLOBAL[name]=c -- send the object to the thread through the global interface - end - return c -end -function multi:newSystemThreadedConnection(name,protect) - local c={} - c.name = name - c.protect=protect - local sThread=multi.integration.THREAD - local GLOBAL=multi.integration.GLOBAL - function c:init() - require("multi") - if multi:getPlatform()=="love2d" then - GLOBAL=_G.GLOBAL - sThread=_G.sThread - end - local conn = {} - conn.name = self.name - conn.count = 0 - if isMainThread then - if GLOBAL[self.name.."THREADED_CONNQ"] then -- if this thing exists then lets grab it, we are doing something different here. instead of cleaning things up, we will gave a dedicated queue to manage things - conn.queueCall = sThread.waitFor(self.name.."THREADED_CALLQ"):init() - else - conn.queueCall = multi:newSystemThreadedQueue(self.name.."THREADED_CALLQ"):init() - end - else - require("multi") -- so things don't break, but also allows bi-directional connections to work - conn.queueCall = sThread.waitFor(self.name.."THREADED_CALLQ"):init() - end - setmetatable(conn,{__call=function(self,...) return self:connect(...) end}) - conn.obj=multi:newConnection(self.protect) - function conn:connect(func) - return self.obj(func) - end - function conn:fConnect(func) - return self.obj:fConnect(func) - end - function conn:holdUT(n) - self.obj:holdUT(n) - end - function conn:Bind(t) - self.obj:Bind(t) - end - function conn:Remove() - self.obj:Remove() - end - function conn:getConnection(name,ingore) - return self.obj:getConnection(name,ingore) - end - function conn:Fire(...) - local args = {...} - table.insert(args,1,multi.randomString(8)) - table.insert(args,1,self.name) - table.insert(args,1,"F") - self.queueCall:push(args) - if self.trigger_self then - self.obj:Fire(...) - end - end - self.cleanup = .01 - function conn:SetCleanUpRate(n) - self.cleanup=n or .01 - end - conn.lastid="" - conn.looper = multi:newLoop(function(self) - local con = self.link - local data = con.queueCall:peek() - if not data then return end - local id = data[3] - if data[1]=="F" and data[2]==con.name and con.lastid~=id then - con.lastid=id - table.remove(data,1)-- Remove the first 3 elements - table.remove(data,1)-- Remove the first 3 elements - table.remove(data,1)-- Remove the first 3 elements - con.obj:Fire(unpack(data)) - multi:newThread("Clean_UP",function() - thread.sleep(con.cleanup) - local dat = con.queueCall:peek() - if not dat then return end - table.remove(data,1)-- Remove the first 3 elements - table.remove(data,1)-- Remove the first 3 elements - table.remove(data,1)-- Remove the first 3 elements - if dat[3]==id then - con.queueCall:pop() - end - end) - end - end) - conn.HoldUT=conn.holdUT - conn.looper.link=conn - conn.Connect=conn.connect - conn.FConnect=conn.fConnect - conn.GetConnection=conn.getConnection - return conn - end - GLOBAL[name]=c - return c -end -function multi:systemThreadedBenchmark(n,p) - n=n or 1 - local cores=multi.integration.THREAD.getCores() - local queue=multi:newSystemThreadedQueue("QUEUE") - multi.integration.GLOBAL["__SYSTEMBENCHMARK__"]=n - local sThread=multi.integration.THREAD - local GLOBAL=multi.integration.GLOBAL - for i=1,cores do - multi:newSystemThread("STHREAD_BENCH",function() - require("multi") - if multi:getPlatform()=="love2d" then - GLOBAL=_G.GLOBAL - sThread=_G.sThread - end -- we cannot have upvalues... in love2d globals not locals must be used - queue=sThread.waitFor("QUEUE"):init() -- always wait for when looking for a variable at the start of the thread! - multi:benchMark(sThread.waitFor("__SYSTEMBENCHMARK__")):OnBench(function(self,count) - queue:push(count) - multi:Stop() - end) - multi:mainloop() - end) - end - local c={} - c.tt=function() end - c.p=p - function c:OnBench(func) - self.tt=func - end - multi:newThread("THREAD_BENCH",function() - thread.sleep(n+.1) - GLOBAL["QUEUE"]=nil -- time to clean up - local num=0 - data=queue:pop() - while data do - num=num+data - data=queue:pop() - end - if p then - print(tostring(p)..num) - end - c.tt(c,num) - end) - return c -end -function multi:newSystemThreadedConsole(name) - local c={} - c.name = name - local sThread=multi.integration.THREAD - local GLOBAL=multi.integration.GLOBAL - function c:init() - require("multi") - if multi:getPlatform()=="love2d" then - GLOBAL=_G.GLOBAL - sThread=_G.sThread - end - local cc={} - if isMainThread then - if GLOBAL["__SYSTEM_CONSLOE__"] then - cc.stream = sThread.waitFor("__SYSTEM_CONSLOE__"):init() - else - cc.stream = multi:newSystemThreadedQueue("__SYSTEM_CONSLOE__"):init() - multi:newThread("Threaded_Console",function() - while true do - thread.sleep(.001) - local data = cc.stream:pop() - if data then - local dat = table.remove(data,1) - if dat=="w" then - io.write(unpack(data)) - elseif dat=="p" then - print(unpack(data)) - end - end - end - end) - end - else - cc.stream = sThread.waitFor("__SYSTEM_CONSLOE__"):init() - end - function cc:write(msg) - self.stream:push({"w",tostring(msg)}) - end - function cc:print(...) - local tab = {...} - for i=1,#tab do - tab[i]=tostring(tab[i]) - end - self.stream:push({"p",unpack(tab)}) - end - return cc - end - GLOBAL[c.name]=c - return c -end -function multi:newSystemThreadedTable(name) - local c={} - c.name=name -- set the name this is important for identifying what is what - local sThread=multi.integration.THREAD - local GLOBAL=multi.integration.GLOBAL - function c:init() -- create an init function so we can mimic on both love2d and lanes - if multi:getPlatform()=="love2d" then - GLOBAL=_G.GLOBAL - sThread=_G.sThread - end - local cc={} - cc.tab={} - if isMainThread then - cc.conn = multi:newSystemThreadedConnection(self.name.."_Tabled_Connection"):init() - else - cc.conn = sThread.waitFor(self.name.."_Tabled_Connection"):init() - end - function cc:waitFor(name) - repeat multi:uManager() until tab[name]~=nil - return tab[name] - end - local link = cc - cc.conn(function(k,v) - link.tab[k]=v - end) - setmetatable(cc,{ - __index=function(t,k) - return t.tab[k] - end, - __newindex=function(t,k,v) - t.tab[k]=v - t.conn:Fire(k,v) - end, - }) - return cc - end - GLOBAL[c.name]=c - return c -end -function multi:newSystemThreadedJobQueue(numOfCores) - local c={} - c.jobnum=1 - c.cores=numOfCores or multi.integration.THREAD.getCores() - c.queueIN=multi:newSystemThreadedQueue("THREADED_JQ"):init() - c.queueOUT=multi:newSystemThreadedQueue("THREADED_JQO"):init() - c.queueALL=multi:newSystemThreadedQueue("THREADED_QALL"):init() - c.REG=multi:newSystemThreadedQueue("THREADED_JQ_F_REG"):init() - c.OnReady=multi:newConnection() - function c:registerJob(name,func) - for i=1,self.cores do - self.REG:push({name,func}) - end - end - function c:pushJob(name,...) - self.queueOUT:push({self.jobnum,name,...}) - self.jobnum=self.jobnum+1 - return self.jobnum-1 - end - local GLOBAL=multi.integration.GLOBAL -- set up locals in case we are using lanes - local sThread=multi.integration.THREAD -- set up locals in case we are using lanes - function c:doToAll(func) - local TaskName=multi.randomString(16) - for i=1,self.cores do - self.queueALL:push({TaskName,func}) - end - end - function c:start() - multi:newEvent(function() - return self.ThreadsLoaded==true - end):OnEvent(function(evnt) - GLOBAL["THREADED_JQ"]=nil -- remove it - GLOBAL["THREADED_JQO"]=nil -- remove it - GLOBAL["THREADED_JQ_F_REG"]=nil -- remove it - self:doToAll(function() - _G["__started__"]=true - SFunc() - end) - evnt:Destroy() - end) - end - GLOBAL["__JQ_COUNT__"]=c.cores - for i=1,c.cores do - multi:newSystemThread("System Threaded Job Queue Worker Thread #"..i,function(name,ind) - require("multi") - ThreadName=name - __sleep__=.001 - if love then -- lets make sure we don't reference up-values if using love2d - GLOBAL=_G.GLOBAL - sThread=_G.sThread - __sleep__=.1 - end - JQI=sThread.waitFor("THREADED_JQO"):init() -- Grab it - JQO=sThread.waitFor("THREADED_JQ"):init() -- Grab it - REG=sThread.waitFor("THREADED_JQ_F_REG"):init() -- Grab it - QALL=sThread.waitFor("THREADED_QALL"):init() -- Grab it - QALLT={} - FUNCS={} - SFunc=multi:newFunction(function(self) - MainLoop:Pause() - self:hold(.1) - MainLoop:Resume() - self:Pause() - end) - multi:newLoop(function() - local rd=REG:peek() - if rd then - if not FUNCS[rd[1]] then - FUNCS[rd[1]]=rd[2] - rd=nil -- lets clean up - REG:pop() - end - end - local d=QALL:peek() - if d then - if not QALLT[d[1]] then - QALLT[d[1]]=true - d[2]() - d=nil -- lets clean up - QALL:pop() - end - end - end) - setmetatable(_G,{ - __index=function(t,k) - return FUNCS[k] - end - }) - lastjob=os.clock() - MainLoop=multi:newLoop(function(self) - if __started__ then - local job=JQI:pop() - if job then - lastjob=os.clock() - local d=QALL:peek() - if d then - if not QALLT[d[1]] then - QALLT[d[1]]=true - d[2]() - d=nil -- lets clean up - QALL:pop() - end - end - local ID=table.remove(job,1) -- return and remove - local name=table.remove(job,1) -- return and remove - if FUNCS[name] then - JQO:push({ID,FUNCS[name](unpack(job))}) - else - self:hold(function() return FUNCS[name] end) - JQO:push({ID,FUNCS[name](unpack(job))}) - end - end - end - end) - multi:newThread("Idler",function() - while true do - if os.clock()-lastjob>1 then - sThread.sleep(.1) - end - thread.sleep(.001) - end - end) - JQO:push({"_THREADINIT_"}) - if not love then - multi:mainloop() - end - end,"Thread<"..i..">",i) - end - c.OnJobCompleted=multi:newConnection() - c.threadsResponded = 0 - c.updater=multi:newLoop(function(self) - local data=self.link.queueIN:pop() - while data do - if data then - local a=unpack(data) - if a=="_THREADINIT_" then - self.link.threadsResponded=self.link.threadsResponded+1 - if self.link.threadsResponded==self.link.cores then - self.link.ThreadsLoaded=true - self.link.OnReady:Fire() - end - else - self.link.OnJobCompleted:Fire(unpack(data)) - end - end - data=self.link.queueIN:pop() - end - end) - c.updater.link=c - return c -end -function multi:newSystemThreadedExecute(cmd) - local c={} - local GLOBAL=multi.integration.GLOBAL -- set up locals incase we are using lanes - local sThread=multi.integration.THREAD -- set up locals incase we are using lanes - local name="Execute_Thread"..multi.randomString(16) - c.name=name - GLOBAL[name.."CMD"]=cmd - multi:newSystemThread(name,function() - if love then -- lets make sure we don't reference upvalues if using love2d - GLOBAL=_G.GLOBAL - sThread=_G.sThread - name=__THREADNAME__ -- global data same as the name we used in this functions creation - end -- Lanes should take the local upvalues ^^^ - cmd=sThread.waitFor(name.."CMD") - local ret=os.execute(cmd) - GLOBAL[name.."R"]=ret - end) - c.OnCMDFinished=multi:newConnection() - c.looper=multi:newLoop(function(self) - local ret=GLOBAL[self.link.name.."R"] - if ret then - self.link.OnCMDFinished:Fire(ret) - self:Destroy() - end - end) - c.looper.link=c - return c -end diff --git a/examples/network-Master1.lua b/examples/network-Master1.lua deleted file mode 100644 index f27e4b2..0000000 --- a/examples/network-Master1.lua +++ /dev/null @@ -1,54 +0,0 @@ --- set up the package -package.path="?/init.lua;?.lua;"..package.path --- Import the libraries -multi = require("multi") -local GLOBAL, THREAD = require("multi.integration.lanesManager").init() -nGLOBAL = require("multi.integration.networkManager").init() --- Act as a master node -master = multi:newMaster{ - name = "Main", -- the name of the master - --noBroadCast = true, -- if using the node manager, set this to true to save on some cpu cycles - --managerDetails = {"localhost",12345}, -- the details to connect to the node manager (ip,port) -} --- Send to all the nodes that are connected to the master -master.OnError(function(name,err) - print(name.." has encountered an error: "..err) -end) -master.OnNodeConnected(function(name) - print("Lets Go!") - master:newNetworkThread("Thread",function(node) -- spawn a network thread on a node that can execute code and return date - local print = node:getConsole().print -- it is important to define things as local... another thing i could do is fenv to make sure all masters work in a protectd isolated enviroment - multi:newTLoop(function() - print("Yo whats up man!") - error("doing a test") - end,1) - end) - master:execute("RemoteTest",name,1,2,3) -- calls a predefined or registered global method on a node - multi:newThread("waiter",function() - print("Hello!",name) - while true do - thread.sleep(2) - master:pushTo(name,"This is a test 2") - if master.connections["NODE_"..name]==nil then - thread.kill() - end - end - end) -end) -multi:newThread("some-test",function() - local dat = master:pop() - while true do - thread.skip(10) - if dat then - print(dat) - end - dat = master:pop() - end -end,"NODE_TESTNODE") --- Starting the multitasker -settings = { - priority = 0, -- 0, 1 or 2 - protect = true, -} -multi:threadloop(settings) ---multi:mainloop(settings) diff --git a/examples/network-node1.lua b/examples/network-node1.lua deleted file mode 100644 index 8d3b0ca..0000000 --- a/examples/network-node1.lua +++ /dev/null @@ -1,20 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -multi = require("multi") -local GLOBAL, THREAD = require("multi.integration.lanesManager").init() -nGLOBAL = require("multi.integration.networkManager").init() -node = multi:newNode{ - crossTalk = false, -- default value, allows nodes to talk to eachother. WIP NOT READY YET! - allowRemoteRegistering = true, -- allows you to register functions from the master on the node, default is false - name = "MASTERPC", -- default value is nil, if nil a random name is generated. Naming nodes are important if you assign each node on a network with a different task - --noBroadCast = true, -- if using the node manager, set this to true to save on some cpu cycles - --managerDetails = {"localhost",12345}, -- connects to the node manager if one exists -} -function RemoteTest(a,b,c) -- a function that we will be executing remotely - print("Yes I work!",a,b,c) -end -settings = { - priority = 0, -- 1 or 2 - stopOnError = true, - protect = true, -- if something goes wrong we will crash hard, but the speed gain is good -} -multi:mainloop(settings) diff --git a/examples/network-nodeManager.lua b/examples/network-nodeManager.lua deleted file mode 100644 index 7d57596..0000000 --- a/examples/network-nodeManager.lua +++ /dev/null @@ -1,12 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -multi = require("multi") -local GLOBAL, THREAD = require("multi.integration.lanesManager").init() -nGLOBAL = require("multi.integration.networkManager").init() -multi:nodeManager(12345) -- Host a node manager on port: 12345 -print("Node Manager Running...") -settings = { - priority = 0, -- 1 or 2 - protect = false, -} -multi:mainloop(settings) --- Thats all you need to run the node manager, everything else is done automatically diff --git a/multi/init.lua b/multi/init.lua index 471004a..ba3c7b8 100644 --- a/multi/init.lua +++ b/multi/init.lua @@ -1099,7 +1099,7 @@ function thread:newFunction(func,holdme) if err then return multi.NIL, err elseif rets then - return unpack(rets) + return (rets[1] or multi.NIL),rets[2],rets[3],rets[4],rets[5],rets[6],rets[7] end end) else @@ -1109,11 +1109,11 @@ function thread:newFunction(func,holdme) if err then return nil,err end - return unpack(rets) + return rets[1],rets[2],rets[3],rets[4],rets[5],rets[6],rets[7] end end local t = multi:newThread("TempThread",func,...) - t.OnDeath(function(self,status,...) rets = {...} end) + t.OnDeath(function(self,status,a1,a2,a3,a4,a5,a6,a7) rets = {a1,a2,a3,a4,a5,a6,a7} end) t.OnError(function(self,e) err = e end) if holdme then return wait() @@ -1235,20 +1235,21 @@ function multi.initThreads(justThreads) local r1,r2,r3,r4,r5,r6 local ret,_ local function CheckRets(i) - if ret~=nil and not(threads[i].isError) then - if not threads[i] then return end + if threads[i] and not(threads[i].isError) then if not _ then threads[i].isError = true threads[i].TempRets[1] = ret return end - threads[i].TempRets[1] = ret - threads[i].TempRets[2] = r1 - threads[i].TempRets[3] = r2 - threads[i].TempRets[4] = r3 - threads[i].TempRets[5] = r4 - threads[i].TempRets[6] = r5 - threads[i].TempRets[7] = r6 + if ret or r1 or r2 or r3 or r4 or r5 or r6 then + threads[i].TempRets[1] = ret + threads[i].TempRets[2] = r1 + threads[i].TempRets[3] = r2 + threads[i].TempRets[4] = r3 + threads[i].TempRets[5] = r4 + threads[i].TempRets[6] = r5 + threads[i].TempRets[7] = r6 + end end end local function helper(i) @@ -1300,8 +1301,8 @@ function multi.initThreads(justThreads) threads[i].__ready = false ret = nil end - CheckRets(i) end + CheckRets(i) end multi.scheduler:OnLoop(function(self) for i=#threads,1,-1 do @@ -1322,7 +1323,8 @@ function multi.initThreads(justThreads) threads[i].isError = true end if threads[i] and coroutine.status(threads[i].thread)=="dead" then - threads[i].OnDeath:Fire(threads[i],"ended",unpack(threads[i].TempRets or {})) + local t = threads[i].TempRets or {} + threads[i].OnDeath:Fire(threads[i],"ended",t[1],t[2],t[3],t[4],t[5],t[6],t[7]) multi.setType(threads[i],multi.DestroyedObj) table.remove(threads,i) elseif threads[i] and threads[i].task == "skip" then @@ -1331,7 +1333,7 @@ function multi.initThreads(justThreads) threads[i].task = "" threads[i].__ready = true end - elseif threads[i] and threads[i].task == "hold" then --GOHERE + elseif threads[i] and threads[i].task == "hold" then t0,t1,t2,t3,t4,t5,t6 = threads[i].func() if t0 then if t0==multi.NIL then diff --git a/multitut.lua b/multitut.lua deleted file mode 100644 index 81bdd4e..0000000 --- a/multitut.lua +++ /dev/null @@ -1,15 +0,0 @@ -package.path="?/init.lua;?.lua;"..package.path -local multi = require("multi") ---~ local GLOBAL, THREAD = require("multi.integration.lanesManager").init() ---~ nGLOBAL = require("multi.integration.networkManager").init() - - -local a = 0 -local clock = os.clock -b = clock() -while clock()-b <1 do - a = a +1 -end -print("a: "..a) ---~ multi:benchMark(1,nil,"Bench:") ---~ multi:mainloop() diff --git a/rockspecs/multi-14.2-0.rockspec b/rockspecs/multi-14.2-0.rockspec index a003691..0d5c810 100644 --- a/rockspecs/multi-14.2-0.rockspec +++ b/rockspecs/multi-14.2-0.rockspec @@ -20,7 +20,6 @@ build = { type = "builtin", modules = { ["multi"] = "multi/init.lua", - ["multi.utils"] = "multi/utils.lua", ["multi.compat.love2d"] = "multi/compat/love2d.lua", ["multi.integration.lanesManager"] = "multi/integration/lanesManager/init.lua", ["multi.integration.lanesManager.extensions"] = "multi/integration/lanesManager/extensions.lua", diff --git a/test.lua b/test.lua index af63d80..37f7401 100644 --- a/test.lua +++ b/test.lua @@ -2,9 +2,13 @@ package.path="?.lua;?/init.lua;?.lua;?/?/init.lua;"..package.path multi, thread = require("multi"):init() a=0 func = thread:newFunction(function() - return thread.holdFor(3,function() + print(thread.holdFor(3,function() return a==5 - end) + end)) + print(thread.hold(function() + return multi.NIL,"test" + end)) end,true) -- Tell the code to wait and then return -print(func()) +a,b = func() +print(a,b) multi:lightloop() \ No newline at end of file