diff --git a/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingCode.txt b/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingCode.txt
new file mode 100644
index 000000000..a93547065
--- /dev/null
+++ b/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingCode.txt
@@ -0,0 +1,75 @@
+For Apple Java executables:
+
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/Mesquite
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Java/Mesquite.jar
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+======
+
+For Oracle Java Executables 1.7: (used as of January 2018)
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/JavaAppLauncher
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/mesquite.jar
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Mesquite.icns
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/PkgInfo
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+======
+
+For Oracle Java Executables 1.8:
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/Mesquite
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/libpackager.dylib
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/Mesquite.jar
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/Mesquite.cfg
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Mesquite.icns
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+=====
+Mesquite (1GB).app
+Mesquite (2GB).app
+Mesquite (500MB).app
+
+FROM http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html
+
+Sign your app using the codesign(1) tool, as shown in the following example:
+
+% codesign -s "Developer ID Application: CommonNameFromCertificate" ExampleApp.app
+To verify that the app is signed, the following command provides information about the signing status of the app:
+
+% codesign -d --verbose=4 ExampleApp.app
+To check whether an application can be launched when Gatekeeper is enabled, use the spctl command:
+
+% spctl --assess --verbose=4 --type execute ExampleApp.app
+
+=======
+Then codesign
+
+codesign --force --sign "Developer ID Application: Wayne Maddison"
+
+
+If you leave off the --verbose tag, and it does not print any output, indicates 'success'.
+
+====
+If certificate is expired
+Open the Keychain Access app which can be found in Applications → Utilities.
+Select Keychain Access → Certificate Assistant → Create a Certificate from the menubar.
+For Name, enter mac-dev-env.
+For Identity Type, leave Self-Signed Root.
+For Certificate Type, select Code Signing.
+Leave Let me override defaults unchecked.
+Create the certificate and follow through until the window is closed.
+Next, select the certificate in the login keychain and press ⌘-I.
+Expand the Trust section.
+Select Always Trust for Code Signing, close and save.
+
+then on commandline
+sudo xcodebuild -license
+
+then try to sign again
diff --git a/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingNotarizingCode.txt b/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingNotarizingCode.txt
new file mode 100644
index 000000000..af4faba7b
--- /dev/null
+++ b/Executables/MacOS via Automator and Script/INSTRUCTIONS-signingNotarizingCode.txt
@@ -0,0 +1,172 @@
+For Apple Java executables:
+
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/Mesquite
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Java/Mesquite.jar
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+======
+
+For Oracle Java Executables 1.7: (used as of January 2018)
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/JavaAppLauncher
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/mesquite.jar
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Mesquite.icns
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/PkgInfo
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+======
+
+For Oracle Java Executables 1.8:
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/Mesquite
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/libpackager.dylib
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/Mesquite.jar
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Java/Mesquite.cfg
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Resources/Mesquite.icns
+codesign --force -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+=====
+
+For Oracle Java Executables JDK14:
+EITHER
+codesign --options=runtime -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+
+codesign --force --options=runtime -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/app/mesquite.jar
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/app/Mesquite.cfg
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/Info.plist
+codesign --options=runtime -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/Mesquite
+codesign -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/MacOS/libapplauncher.dylib
+codesign --verbose=4 --deep --force -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/runtime/Contents/MacOS/libjli.dylib
+codesign --force --deep --options=runtime -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+
+OR:
+
+for f in $(find Mesquite.app/Contents);
+do
+ codesign -s "Developer ID Application: Wayne Maddison" $f;
+done
+codesign --verbose=4 --deep --force -s "Developer ID Application: Wayne Maddison" Mesquite.app/Contents/runtime/Contents/MacOS/libjli.dylib
+codesign --force --deep --options=runtime -s "Developer ID Application: Wayne Maddison" Mesquite.app
+codesign -d --verbose=4 Mesquite.app
+spctl --assess --verbose=4 --type execute Mesquite.app
+
+(all of this is done by signBundle.sh)
+=====
+Mesquite (1GB).app
+Mesquite (2GB).app
+Mesquite (500MB).app
+
+FROM http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html
+
+Sign your app using the codesign(1) tool, as shown in the following example:
+
+% codesign -s "Developer ID Application: CommonNameFromCertificate" ExampleApp.app
+To verify that the app is signed, the following command provides information about the signing status of the app:
+
+% codesign -d --verbose=4 ExampleApp.app
+To check whether an application can be launched when Gatekeeper is enabled, use the spctl command:
+
+% spctl --assess --verbose=4 --type execute ExampleApp.app
+
+====
+If certificate is expired
+NEW:
+Use XCode, Preferences, accounts:
+https://help.apple.com/xcode/mac/current/#/dev154b28f09
+
+====================================================
+NOTARIZING
+Sign app, as above
+Zip using
+ /usr/bin/ditto -c -k --keepParent Mesquite.app Mesquite.zip
+Submit for notarization using
+ xcrun altool --eval-app --primary-bundle-id org.mesquiteproject -u wmaddisn@zoology.ubc.ca -f Mesquite.zip
+
+Give not Apple-id password, but rather app-specific PASSWORD. (https://support.apple.com/en-us/HT204397)
+
+For regular Mesquite.app: hjbt-fpiw-yhus-tukk
+
+Will respond with a RequestUUID. To check status, enter (replace strange request uu id)
+
+ xcrun altool --eval-info -u wmaddisn@zoology.ubc.ca
+ xcrun altool --eval-info 62e0a34a-d94e-451a-8f1a-b2cf23a5e8aa -u wmaddisn@zoology.ubc.ca
+
+To get more details use the URL given
+
+Somethow this might help also???
+xcrun altool --notarization-info -u wmaddisn@zoology.ubc.ca
+
+
+Once it's approved, run
+ xcrun stapler staple Mesquite.app
+
+
+========
+xcrun altool --eval-info 5a7b3743-39e3-4362-8204-404f9bdac65a -u wmaddisn@zoology.ubc.ca
+
+xcrun altool --notarization-info 6000f74f-fe6f-463a-bf41-4595dfd8d1a3 -u wmaddisn@zoology.ubc.ca
+
+====================================================
+Then codesign and notarize the APP
+
+codesign --force --sign "Developer ID Application: Wayne Maddison" MesquiteDMG.dmg
+
+If you leave off the --verbose tag, and it does not print any output, indicates 'success'.
+
+Then sign and notarize the dmg
+xattr -cr MesquiteDMG.dmg
+codesign --force --sign "Developer ID Application: Wayne Maddison" MesquiteDMG.dmg
+xcrun altool --eval-app --primary-bundle-id org.mesquiteproject -u wmaddisn@zoology.ubc.ca -f MesquiteDMG.dmg
+(wait and it will give you the request UUID)
+
+App specific password for MesquiteDMG: ondx-llog-pdue-mxoo
+
+To check status:
+xcrun altool --eval-info 25beae4a-dbc9-4fca-b922-a35bd3e47974 -u wmaddisn@zoology.ubc.ca
+(where the weird thing is replaced by the request UUID)
+
+xcrun stapler staple MesquiteDMG.dmg
+
+
+https://stackoverflow.com/questions/52911791/hardened-runtime-for-java-and-mojave
+https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution/customizing_the_notarization_workflow
+https://github.com/AdoptOpenJDK/openjdk-support/issues/97
+https://stackoverflow.com/questions/56890749/macos-notarize-in-script
+
+
+
+
+-----------------
+OLD
+Open the Keychain Access app which can be found in Applications → Utilities.
+Select Keychain Access → Certificate Assistant → Create a Certificate from the menubar.
+For Name, enter mac-dev-env.
+For Identity Type, leave Self-Signed Root.
+For Certificate Type, select Code Signing.
+Leave Let me override defaults unchecked.
+Create the certificate and follow through until the window is closed.
+Next, select the certificate in the login keychain and press ⌘-I.
+Expand the Trust section.
+Select Always Trust for Code Signing, close and save.
+
+then on commandline
+sudo xcodebuild -license
+
+then try to sign again
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/CodeResources b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/CodeResources
new file mode 100644
index 000000000..3014ddc34
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/CodeResources differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Info.plist b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Info.plist
new file mode 100644
index 000000000..696b8c3c8
--- /dev/null
+++ b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Info.plist
@@ -0,0 +1,109 @@
+
+
+
+
+ AMIsApplet
+
+ AMStayOpen
+
+ BuildMachineOSBuild
+ 17A405001
+ CFBundleAllowMixedLocalizations
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleDocumentTypes
+
+
+ CFBundleTypeExtensions
+
+ *
+
+ CFBundleTypeName
+ Automator workflow file
+ CFBundleTypeOSTypes
+
+ ****
+
+ CFBundleTypeRole
+ Viewer
+
+
+ CFBundleExecutable
+ Application Stub
+ CFBundleIconFile
+ Mesquite.icns
+ CFBundleIdentifier
+ com.apple.automator.Mesquite_Starter_Flex-01AutomatorOrig-2021superFlex
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ Mesquite_Starter_Flex-01AutomatorOrig-2021superFlex
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.3
+ CFBundleSignature
+ ????
+ CFBundleSupportedPlatforms
+
+ MacOSX
+
+ CFBundleURLTypes
+
+ CFBundleVersion
+ 444.42
+ DTCompiler
+ com.apple.compilers.llvm.clang.1_0
+ DTPlatformBuild
+ 10P70r
+ DTPlatformName
+ macosx
+ DTPlatformVersion
+ 10.14
+ DTSDKBuild
+ 18F82
+ DTSDKName
+ macosx10.14internal
+ DTXcode
+ 1020
+ DTXcodeBuild
+ 10P70r
+ LSMinimumSystemVersion
+ 10.6
+ LSUIElement
+
+ NSAppleEventsUsageDescription
+ This workflow needs to control other applications to run.
+ NSAppleMusicUsageDescription
+ This workflow needs access to your music to run.
+ NSAppleScriptEnabled
+ YES
+ NSCalendarsUsageDescription
+ This workflow needs access to your calendars to run.
+ NSCameraUsageDescription
+ This workflow needs access to your camera to run.
+ NSContactsUsageDescription
+ This workflow needs access to your contacts to run.
+ NSHomeKitUsageDescription
+ This workflow needs access to your HomeKit Home to run.
+ NSMicrophoneUsageDescription
+ This workflow needs access to your microphone to run.
+ NSPhotoLibraryUsageDescription
+ This workflow needs access to your photos to run.
+ NSPrincipalClass
+ NSApplication
+ NSRemindersUsageDescription
+ This workflow needs access to your reminders to run.
+ NSServices
+
+ NSSiriUsageDescription
+ This workflow needs access to Siri to run.
+ NSSystemAdministrationUsageDescription
+ This workflow needs access to administer this system in order to run.
+ UTExportedTypeDeclarations
+
+ UTImportedTypeDeclarations
+
+
+
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/MacOS/Application Stub b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/MacOS/Application Stub
new file mode 100755
index 000000000..01ccd6d98
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/MacOS/Application Stub differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/AutomatorApplet.icns b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/AutomatorApplet.icns
new file mode 100644
index 000000000..1e1593e8a
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/AutomatorApplet.icns differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/Mesquite.icns b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/Mesquite.icns
new file mode 100644
index 000000000..280d8334a
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/Mesquite.icns differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ar.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ar.lproj/InfoPlist.strings
new file mode 100644
index 000000000..29ccabb6f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ar.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ca.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ca.lproj/InfoPlist.strings
new file mode 100644
index 000000000..c0a6ad741
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ca.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/cs.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/cs.lproj/InfoPlist.strings
new file mode 100644
index 000000000..99fb87ef5
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/cs.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/da.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/da.lproj/InfoPlist.strings
new file mode 100644
index 000000000..7c79f432a
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/da.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/de.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/de.lproj/InfoPlist.strings
new file mode 100644
index 000000000..e5b0ee989
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/de.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/el.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/el.lproj/InfoPlist.strings
new file mode 100644
index 000000000..426f98c99
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/el.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en.lproj/InfoPlist.strings
new file mode 100644
index 000000000..5cd22716f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_AU.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_AU.lproj/InfoPlist.strings
new file mode 100644
index 000000000..5cd22716f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_AU.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_GB.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_GB.lproj/InfoPlist.strings
new file mode 100644
index 000000000..5cd22716f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/en_GB.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es.lproj/InfoPlist.strings
new file mode 100644
index 000000000..d3f3e8cb7
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es_419.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es_419.lproj/InfoPlist.strings
new file mode 100644
index 000000000..caabfa4f9
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/es_419.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fi.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fi.lproj/InfoPlist.strings
new file mode 100644
index 000000000..de8cd969e
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fi.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr.lproj/InfoPlist.strings
new file mode 100644
index 000000000..9e505c078
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr_CA.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr_CA.lproj/InfoPlist.strings
new file mode 100644
index 000000000..67c036c60
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/fr_CA.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/he.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/he.lproj/InfoPlist.strings
new file mode 100644
index 000000000..a501d8722
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/he.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hi.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hi.lproj/InfoPlist.strings
new file mode 100644
index 000000000..af2bf6ae8
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hi.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hr.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hr.lproj/InfoPlist.strings
new file mode 100644
index 000000000..02ad1cf10
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hr.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hu.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hu.lproj/InfoPlist.strings
new file mode 100644
index 000000000..4433c6c8b
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/hu.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/id.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/id.lproj/InfoPlist.strings
new file mode 100644
index 000000000..03bfb4457
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/id.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/it.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/it.lproj/InfoPlist.strings
new file mode 100644
index 000000000..e92bc171d
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/it.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ja.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ja.lproj/InfoPlist.strings
new file mode 100644
index 000000000..1471dd9ac
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ja.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ko.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ko.lproj/InfoPlist.strings
new file mode 100644
index 000000000..48fd5013d
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ko.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ms.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ms.lproj/InfoPlist.strings
new file mode 100644
index 000000000..445f9dbd9
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ms.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/nl.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/nl.lproj/InfoPlist.strings
new file mode 100644
index 000000000..9236f993f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/nl.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/no.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/no.lproj/InfoPlist.strings
new file mode 100644
index 000000000..5c7648711
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/no.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pl.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pl.lproj/InfoPlist.strings
new file mode 100644
index 000000000..c07d0403a
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pl.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt.lproj/InfoPlist.strings
new file mode 100644
index 000000000..d5f6f3e8f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt_PT.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt_PT.lproj/InfoPlist.strings
new file mode 100644
index 000000000..dc78336df
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/pt_PT.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ro.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ro.lproj/InfoPlist.strings
new file mode 100644
index 000000000..9f61eee1a
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ro.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ru.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ru.lproj/InfoPlist.strings
new file mode 100644
index 000000000..af639b991
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/ru.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sk.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sk.lproj/InfoPlist.strings
new file mode 100644
index 000000000..0bc28954e
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sk.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sv.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sv.lproj/InfoPlist.strings
new file mode 100644
index 000000000..30d5503ba
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/sv.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/th.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/th.lproj/InfoPlist.strings
new file mode 100644
index 000000000..eb56aa89d
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/th.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/tr.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/tr.lproj/InfoPlist.strings
new file mode 100644
index 000000000..70682302e
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/tr.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/uk.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/uk.lproj/InfoPlist.strings
new file mode 100644
index 000000000..e10476e87
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/uk.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/vi.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/vi.lproj/InfoPlist.strings
new file mode 100644
index 000000000..c2429b995
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/vi.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings
new file mode 100644
index 000000000..25c067721
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_CN.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings
new file mode 100644
index 000000000..087d7bca2
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_HK.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings
new file mode 100644
index 000000000..048fdb10f
Binary files /dev/null and b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/Resources/zh_TW.lproj/InfoPlist.strings differ
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/_CodeSignature/CodeResources b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/_CodeSignature/CodeResources
new file mode 100755
index 000000000..f44c35cdf
--- /dev/null
+++ b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/_CodeSignature/CodeResources
@@ -0,0 +1,1014 @@
+
+
+
+
+ files
+
+ Resources/AutomatorApplet.icns
+
+ Bf3MfmC8pA7tbY/7qNv1733LS9M=
+
+ Resources/Mesquite.icns
+
+ mqnGaSRzbpi8l2W1di+4pqXeH9s=
+
+ Resources/ar.lproj/InfoPlist.strings
+
+ hash
+
+ u9+EEibpu0BrIFYR2invkDVL5Qw=
+
+ optional
+
+
+ Resources/ca.lproj/InfoPlist.strings
+
+ hash
+
+ UN/lCgd4Jb3Po/OAFkPE77PGKYc=
+
+ optional
+
+
+ Resources/cs.lproj/InfoPlist.strings
+
+ hash
+
+ nFzts31xjMimebMAl/xMUCfSWlI=
+
+ optional
+
+
+ Resources/da.lproj/InfoPlist.strings
+
+ hash
+
+ kC89jIYYEtCpqn7Oghqw+DJidtA=
+
+ optional
+
+
+ Resources/de.lproj/InfoPlist.strings
+
+ hash
+
+ zS3TSEWqlRmN631+LnqFqrfMec4=
+
+ optional
+
+
+ Resources/el.lproj/InfoPlist.strings
+
+ hash
+
+ 4LMDCNN+h+uW9RVdmCBmEBtFSrA=
+
+ optional
+
+
+ Resources/en.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ optional
+
+
+ Resources/en_AU.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ optional
+
+
+ Resources/en_GB.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ optional
+
+
+ Resources/es.lproj/InfoPlist.strings
+
+ hash
+
+ /O6iOXTUC3XLeaMH6vMyolZTy4Q=
+
+ optional
+
+
+ Resources/es_419.lproj/InfoPlist.strings
+
+ hash
+
+ VuZXrr3xJzFqOKFVyjkpZTsB/TQ=
+
+ optional
+
+
+ Resources/fi.lproj/InfoPlist.strings
+
+ hash
+
+ GB95RPvIrzmANg/R07v8mRYKBmE=
+
+ optional
+
+
+ Resources/fr.lproj/InfoPlist.strings
+
+ hash
+
+ 1MZOZBFmHHx8cfoiOTzeB3YGaow=
+
+ optional
+
+
+ Resources/fr_CA.lproj/InfoPlist.strings
+
+ hash
+
+ ajLB3I2PPBK7tO9QXsgyXqAf/9M=
+
+ optional
+
+
+ Resources/he.lproj/InfoPlist.strings
+
+ hash
+
+ uTZrY/J9p3EN6EJ8a3S17R1r0CM=
+
+ optional
+
+
+ Resources/hi.lproj/InfoPlist.strings
+
+ hash
+
+ sNYXxR2VmtqiBHAUpoAN+9rIWf4=
+
+ optional
+
+
+ Resources/hr.lproj/InfoPlist.strings
+
+ hash
+
+ yAywN2fEB6aQ+c6qiZT9Qs3kijQ=
+
+ optional
+
+
+ Resources/hu.lproj/InfoPlist.strings
+
+ hash
+
+ ZvlxFpjHYeMF4UoIEi0XiV+Cu2k=
+
+ optional
+
+
+ Resources/id.lproj/InfoPlist.strings
+
+ hash
+
+ QBulAupJ7ftckk0U37Ac9sWMS5M=
+
+ optional
+
+
+ Resources/it.lproj/InfoPlist.strings
+
+ hash
+
+ mgQ0UML3kWca0h3kEPj8EktYUtc=
+
+ optional
+
+
+ Resources/ja.lproj/InfoPlist.strings
+
+ hash
+
+ TF/qrX5qN9RbA4w9+eIGJ3tZpMY=
+
+ optional
+
+
+ Resources/ko.lproj/InfoPlist.strings
+
+ hash
+
+ h3smpMq48j3PfDI5NP1MBlhRGCs=
+
+ optional
+
+
+ Resources/ms.lproj/InfoPlist.strings
+
+ hash
+
+ ntabgb8xKYBu9Wlwq+KBRWOj4cc=
+
+ optional
+
+
+ Resources/nl.lproj/InfoPlist.strings
+
+ hash
+
+ 2hYNY8l8KIruwpSGc8EamEoEKcg=
+
+ optional
+
+
+ Resources/no.lproj/InfoPlist.strings
+
+ hash
+
+ sWq0bWEW/L78MON56Ox3NkhumFA=
+
+ optional
+
+
+ Resources/pl.lproj/InfoPlist.strings
+
+ hash
+
+ Lu1vNwIyPPAUeTFv1BmLsjEYfUg=
+
+ optional
+
+
+ Resources/pt.lproj/InfoPlist.strings
+
+ hash
+
+ f594YB7NaxbAZEaTTeyWcBLeufw=
+
+ optional
+
+
+ Resources/pt_PT.lproj/InfoPlist.strings
+
+ hash
+
+ e8DE5RLCITxNquNMMZMMwBXNS50=
+
+ optional
+
+
+ Resources/ro.lproj/InfoPlist.strings
+
+ hash
+
+ dHII27C+Yqo2aMpDdvKWrJr/A4o=
+
+ optional
+
+
+ Resources/ru.lproj/InfoPlist.strings
+
+ hash
+
+ mkEcXq7nvi+4PlDkkO7mSIYquBc=
+
+ optional
+
+
+ Resources/sk.lproj/InfoPlist.strings
+
+ hash
+
+ XhaqfsZtXa19Lxt/2KihVyZQOzk=
+
+ optional
+
+
+ Resources/sv.lproj/InfoPlist.strings
+
+ hash
+
+ BYdlnFufmWzlpJrheClmCN7Chh8=
+
+ optional
+
+
+ Resources/th.lproj/InfoPlist.strings
+
+ hash
+
+ WIGfPimaJmK19pVXalyb5HWi1z4=
+
+ optional
+
+
+ Resources/tr.lproj/InfoPlist.strings
+
+ hash
+
+ 8awq/XTYFfDJOcYOx3DRl7satYs=
+
+ optional
+
+
+ Resources/uk.lproj/InfoPlist.strings
+
+ hash
+
+ ZB/a+LXCJydku2nxRhXdFc2jyIU=
+
+ optional
+
+
+ Resources/vi.lproj/InfoPlist.strings
+
+ hash
+
+ fBGaXOAYxdQjDvwTk+IeRKLDudQ=
+
+ optional
+
+
+ Resources/zh_CN.lproj/InfoPlist.strings
+
+ hash
+
+ GuwX6bfgJVWZ2iL/nf7G2D7m91I=
+
+ optional
+
+
+ Resources/zh_HK.lproj/InfoPlist.strings
+
+ hash
+
+ ztyIfPb4/CLzceG3nbbonph9qRA=
+
+ optional
+
+
+ Resources/zh_TW.lproj/InfoPlist.strings
+
+ hash
+
+ t259jw346xKzUgPwGqw0PCLXjGc=
+
+ optional
+
+
+
+ files2
+
+ Resources/AutomatorApplet.icns
+
+ hash
+
+ Bf3MfmC8pA7tbY/7qNv1733LS9M=
+
+ hash2
+
+ 9KuKTSCyJH4fZHTpLe+S9JklfIuBlI0KZ728hivx8RE=
+
+
+ Resources/Mesquite.icns
+
+ hash
+
+ mqnGaSRzbpi8l2W1di+4pqXeH9s=
+
+ hash2
+
+ i5EC+dPX7zdVv0gkr98Ez5XSpVYjE3Zym2KoGfXHfAk=
+
+
+ Resources/ar.lproj/InfoPlist.strings
+
+ hash
+
+ u9+EEibpu0BrIFYR2invkDVL5Qw=
+
+ hash2
+
+ +tI+tYErnJQFGuCaaVBqzMTzTSaUG8n9n8CBpv4m0z8=
+
+ optional
+
+
+ Resources/ca.lproj/InfoPlist.strings
+
+ hash
+
+ UN/lCgd4Jb3Po/OAFkPE77PGKYc=
+
+ hash2
+
+ veR595pze+/T7s2rHZub1XoyOsM6SyoixC0yJE/WMUw=
+
+ optional
+
+
+ Resources/cs.lproj/InfoPlist.strings
+
+ hash
+
+ nFzts31xjMimebMAl/xMUCfSWlI=
+
+ hash2
+
+ E3ybF6xwZRLT1tqRFDT7gRQDo0nPGSDOFQ121aiBXXo=
+
+ optional
+
+
+ Resources/da.lproj/InfoPlist.strings
+
+ hash
+
+ kC89jIYYEtCpqn7Oghqw+DJidtA=
+
+ hash2
+
+ c/q6KvcFDZk5ZA7KkZdfPfDci7HCFBFNciRLHLhegiI=
+
+ optional
+
+
+ Resources/de.lproj/InfoPlist.strings
+
+ hash
+
+ zS3TSEWqlRmN631+LnqFqrfMec4=
+
+ hash2
+
+ aw6NGRf3dsquEVTvmFjFvf1R5jTmzclRlnTCcY4xJCE=
+
+ optional
+
+
+ Resources/el.lproj/InfoPlist.strings
+
+ hash
+
+ 4LMDCNN+h+uW9RVdmCBmEBtFSrA=
+
+ hash2
+
+ ExoHd5+gNhryyKtpjZceSTr5OtY6O3ZqbErSrbH4laQ=
+
+ optional
+
+
+ Resources/en.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ hash2
+
+ qvV1gfidvmYmxHBuN5E1f2FqfndHiE8lmk0rRUN3+ZU=
+
+ optional
+
+
+ Resources/en_AU.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ hash2
+
+ qvV1gfidvmYmxHBuN5E1f2FqfndHiE8lmk0rRUN3+ZU=
+
+ optional
+
+
+ Resources/en_GB.lproj/InfoPlist.strings
+
+ hash
+
+ 9lu2Zf97rfoBBL0iqFvwwsS5nqE=
+
+ hash2
+
+ qvV1gfidvmYmxHBuN5E1f2FqfndHiE8lmk0rRUN3+ZU=
+
+ optional
+
+
+ Resources/es.lproj/InfoPlist.strings
+
+ hash
+
+ /O6iOXTUC3XLeaMH6vMyolZTy4Q=
+
+ hash2
+
+ L75F9A65jaKeL9TOGRL/FuUE9pGX4jQOz6U8WMfY/R4=
+
+ optional
+
+
+ Resources/es_419.lproj/InfoPlist.strings
+
+ hash
+
+ VuZXrr3xJzFqOKFVyjkpZTsB/TQ=
+
+ hash2
+
+ +Ou08o/WkBG7DLbifUPqxpKzYHHnvtkGNSghOiLtRs0=
+
+ optional
+
+
+ Resources/fi.lproj/InfoPlist.strings
+
+ hash
+
+ GB95RPvIrzmANg/R07v8mRYKBmE=
+
+ hash2
+
+ wDMWeaZx0SCZLn+4uypY+ymJP6z3z2+scf1TBuBNjSE=
+
+ optional
+
+
+ Resources/fr.lproj/InfoPlist.strings
+
+ hash
+
+ 1MZOZBFmHHx8cfoiOTzeB3YGaow=
+
+ hash2
+
+ ZwlKi2JA1Feh2MCGP2NG9x4RObPAlf3rzIx8DE+68dk=
+
+ optional
+
+
+ Resources/fr_CA.lproj/InfoPlist.strings
+
+ hash
+
+ ajLB3I2PPBK7tO9QXsgyXqAf/9M=
+
+ hash2
+
+ Dil8fGVtECGmAhs8Fkb91YHOh0QKwC/1BpYRLj4wVRQ=
+
+ optional
+
+
+ Resources/he.lproj/InfoPlist.strings
+
+ hash
+
+ uTZrY/J9p3EN6EJ8a3S17R1r0CM=
+
+ hash2
+
+ unpjYEYOdNuTgfG1thg/49idnRK8INJm3N7DB17H/MY=
+
+ optional
+
+
+ Resources/hi.lproj/InfoPlist.strings
+
+ hash
+
+ sNYXxR2VmtqiBHAUpoAN+9rIWf4=
+
+ hash2
+
+ Nc99LpVV9Rfq+07LT9OhNTkj1tMyC0UwHTwDOJaGnGc=
+
+ optional
+
+
+ Resources/hr.lproj/InfoPlist.strings
+
+ hash
+
+ yAywN2fEB6aQ+c6qiZT9Qs3kijQ=
+
+ hash2
+
+ 5LRJGUk8z6Y2cMVXg/m/e5ggUHRBxtC0tnuvhBucWhM=
+
+ optional
+
+
+ Resources/hu.lproj/InfoPlist.strings
+
+ hash
+
+ ZvlxFpjHYeMF4UoIEi0XiV+Cu2k=
+
+ hash2
+
+ 870ULoLi3vtI/g9KWFPPR18/QR3uaVPIHvNAPVft/jQ=
+
+ optional
+
+
+ Resources/id.lproj/InfoPlist.strings
+
+ hash
+
+ QBulAupJ7ftckk0U37Ac9sWMS5M=
+
+ hash2
+
+ GMea+kUIEH7biYvR67oKqMEnuFy3j8Lb74BpcXrSYD8=
+
+ optional
+
+
+ Resources/it.lproj/InfoPlist.strings
+
+ hash
+
+ mgQ0UML3kWca0h3kEPj8EktYUtc=
+
+ hash2
+
+ QhD/kYsPPkZkAEjPmaqkLYhHNP50lYs2Q6RunJ9HbyA=
+
+ optional
+
+
+ Resources/ja.lproj/InfoPlist.strings
+
+ hash
+
+ TF/qrX5qN9RbA4w9+eIGJ3tZpMY=
+
+ hash2
+
+ 7G0LXrq5M8ki1QKwtoIsWXAqRXqaFdkMnDEn+TDi+Og=
+
+ optional
+
+
+ Resources/ko.lproj/InfoPlist.strings
+
+ hash
+
+ h3smpMq48j3PfDI5NP1MBlhRGCs=
+
+ hash2
+
+ JanQ/AXxepGqrhtWd34VtED+2Ikh6AR47OTSGKkOORg=
+
+ optional
+
+
+ Resources/ms.lproj/InfoPlist.strings
+
+ hash
+
+ ntabgb8xKYBu9Wlwq+KBRWOj4cc=
+
+ hash2
+
+ BbFAHik61RbsHA6viuMQ1C48oudMZ7kjpUjfqJ3Ai/M=
+
+ optional
+
+
+ Resources/nl.lproj/InfoPlist.strings
+
+ hash
+
+ 2hYNY8l8KIruwpSGc8EamEoEKcg=
+
+ hash2
+
+ IpW+ymYJd45P8RxueJCinY5kGYdpEigiwPOMsP7+kFs=
+
+ optional
+
+
+ Resources/no.lproj/InfoPlist.strings
+
+ hash
+
+ sWq0bWEW/L78MON56Ox3NkhumFA=
+
+ hash2
+
+ q69yUDZL7gQDZm2Uv8iIE/BwqseJ4h+1Ytlze80Gyzo=
+
+ optional
+
+
+ Resources/pl.lproj/InfoPlist.strings
+
+ hash
+
+ Lu1vNwIyPPAUeTFv1BmLsjEYfUg=
+
+ hash2
+
+ TMyg7YWH2Q/Q21k6gIn8c5+P1D/eQ56EJEyLlNxrZog=
+
+ optional
+
+
+ Resources/pt.lproj/InfoPlist.strings
+
+ hash
+
+ f594YB7NaxbAZEaTTeyWcBLeufw=
+
+ hash2
+
+ T9ui1WaJ3ZJYcMbpDqHmSCqpbCyAT3G17x6TiAgSWhw=
+
+ optional
+
+
+ Resources/pt_PT.lproj/InfoPlist.strings
+
+ hash
+
+ e8DE5RLCITxNquNMMZMMwBXNS50=
+
+ hash2
+
+ 3L7jJy8V6bntI/yPfZZ7m/KbUUJiJC3PeGliBvhaYmc=
+
+ optional
+
+
+ Resources/ro.lproj/InfoPlist.strings
+
+ hash
+
+ dHII27C+Yqo2aMpDdvKWrJr/A4o=
+
+ hash2
+
+ yLDNGiF16vVl9Fsb1Rbtttp29nAdDvHJa/uICWU6xWw=
+
+ optional
+
+
+ Resources/ru.lproj/InfoPlist.strings
+
+ hash
+
+ mkEcXq7nvi+4PlDkkO7mSIYquBc=
+
+ hash2
+
+ 0n7LviusI+ZgRMt7E6DT4SuLVbEvb478SN/Phh6nGrM=
+
+ optional
+
+
+ Resources/sk.lproj/InfoPlist.strings
+
+ hash
+
+ XhaqfsZtXa19Lxt/2KihVyZQOzk=
+
+ hash2
+
+ dqkOqhirv9LBWpRS3Ln9Ls/ErbADeyYmW0UwFzpdrb4=
+
+ optional
+
+
+ Resources/sv.lproj/InfoPlist.strings
+
+ hash
+
+ BYdlnFufmWzlpJrheClmCN7Chh8=
+
+ hash2
+
+ lGH0nxdIuHpjAn5hcBey2jNrEndUjZ35l0dFJCRxeZw=
+
+ optional
+
+
+ Resources/th.lproj/InfoPlist.strings
+
+ hash
+
+ WIGfPimaJmK19pVXalyb5HWi1z4=
+
+ hash2
+
+ 4UuVy5dxfjjz7kWQ6hh4pUP1UVT5/3yqCHTuRRZNvVg=
+
+ optional
+
+
+ Resources/tr.lproj/InfoPlist.strings
+
+ hash
+
+ 8awq/XTYFfDJOcYOx3DRl7satYs=
+
+ hash2
+
+ ZHHJWbfyNzyM3cFSQVravPaezQUP2y/ETgwAwy9YXE4=
+
+ optional
+
+
+ Resources/uk.lproj/InfoPlist.strings
+
+ hash
+
+ ZB/a+LXCJydku2nxRhXdFc2jyIU=
+
+ hash2
+
+ ZZUVLWrSJ9hOa0N8n+/WK7KD9pLekOedwqP2S22wr1k=
+
+ optional
+
+
+ Resources/vi.lproj/InfoPlist.strings
+
+ hash
+
+ fBGaXOAYxdQjDvwTk+IeRKLDudQ=
+
+ hash2
+
+ db2kptf+W9FaSJWqpCb6AYqxPtIkQQJnWO7MPSvb4UQ=
+
+ optional
+
+
+ Resources/zh_CN.lproj/InfoPlist.strings
+
+ hash
+
+ GuwX6bfgJVWZ2iL/nf7G2D7m91I=
+
+ hash2
+
+ Y1Nn88Cu12QEmWMRHQte9A3VlvDUu1kcJBDdS/gy0dI=
+
+ optional
+
+
+ Resources/zh_HK.lproj/InfoPlist.strings
+
+ hash
+
+ ztyIfPb4/CLzceG3nbbonph9qRA=
+
+ hash2
+
+ 6YOzSEI4f/EYeBn6PbSyjKgmrykbnSNRPeBUPsz3IEg=
+
+ optional
+
+
+ Resources/zh_TW.lproj/InfoPlist.strings
+
+ hash
+
+ t259jw346xKzUgPwGqw0PCLXjGc=
+
+ hash2
+
+ YbaT7Ysm60XBG26Mvp8AU2SI9oT85wbUYdGbxQOHxDg=
+
+ optional
+
+
+ document.wflow
+
+ cdhash
+
+ SpVgndlS1DB6I2zxWGn+U077PQI=
+
+ requirement
+ identifier document and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "8LT29UFQPL"
+
+
+ rules
+
+ ^Resources/
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^version.plist$
+
+
+ rules2
+
+ .*\.dSYM($|/)
+
+ weight
+ 11
+
+ ^(.*/)?\.DS_Store$
+
+ omit
+
+ weight
+ 2000
+
+ ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/
+
+ nested
+
+ weight
+ 10
+
+ ^.*
+
+ ^Info\.plist$
+
+ omit
+
+ weight
+ 20
+
+ ^PkgInfo$
+
+ omit
+
+ weight
+ 20
+
+ ^Resources/
+
+ weight
+ 20
+
+ ^Resources/.*\.lproj/
+
+ optional
+
+ weight
+ 1000
+
+ ^Resources/.*\.lproj/locversion.plist$
+
+ omit
+
+ weight
+ 1100
+
+ ^Resources/Base\.lproj/
+
+ weight
+ 1010
+
+ ^[^/]+$
+
+ nested
+
+ weight
+ 10
+
+ ^embedded\.provisionprofile$
+
+ weight
+ 20
+
+ ^version\.plist$
+
+ weight
+ 20
+
+
+
+
diff --git a/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/document.wflow b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/document.wflow
new file mode 100644
index 000000000..eac06a7de
--- /dev/null
+++ b/Executables/MacOS via Automator and Script/Mesquite_Starter_Flex.app/Contents/document.wflow
@@ -0,0 +1,706 @@
+
+
+
+
+ AMApplicationBuild
+ 444.42
+ AMApplicationVersion
+ 2.9
+ AMDocumentVersion
+ 2
+ actions
+
+
+ action
+
+ AMAccepts
+
+ Container
+ List
+ Optional
+
+ Types
+
+ *
+
+
+ AMActionVersion
+ v.1.0.2
+ AMApplication
+
+ Automator
+
+ AMParameterProperties
+
+ variableUUID
+
+ isPathPopUp
+
+ selectedVariableUUID
+ B5724CA0-32E6-41E6-A92D-05F05ECF423A
+
+
+ AMProvides
+
+ Container
+ List
+ Types
+
+ *
+
+
+ AMRequiredResources
+
+ ActionBundlePath
+ /System/Library/Automator/Set Value of Variable.action
+ ActionName
+ Set Value of Variable
+ ActionParameters
+
+ variableUUID
+ B5724CA0-32E6-41E6-A92D-05F05ECF423A
+
+ BundleIdentifier
+ com.apple.Automator.SetValueofVariable
+ CFBundleVersion
+ 1.0.2
+ CanShowSelectedItemsWhenRun
+
+ CanShowWhenRun
+
+ Category
+
+ AMCategoryUtilities
+
+ Class Name
+ Set_Value_of_Variable
+ InputUUID
+ 43FB1F79-4EA6-4AA7-A306-B9BCE6E21896
+ Keywords
+
+ variable
+ binding
+ input
+ output
+ storage
+
+ OutputUUID
+ E791B933-EFA9-43EE-B7B4-F8F6C5EE0E4A
+ UUID
+ 4B07F06B-F2E4-49D5-8009-9C558FB1CD61
+ UnlocalizedApplications
+
+ Automator
+
+ arguments
+
+ 0
+
+ default value
+
+ name
+ variableUUID
+ required
+ 0
+ type
+ 0
+ uuid
+ 0
+
+
+ isViewVisible
+
+ location
+ 619.500000:111.000000
+ nibPath
+ /System/Library/Automator/Set Value of Variable.action/Contents/Resources/Base.lproj/main.nib
+
+ isViewVisible
+
+
+
+ action
+
+ AMAccepts
+
+ Container
+ List
+ Optional
+
+ Types
+
+ com.apple.cocoa.path
+
+
+ AMActionVersion
+ 1.2.2
+ AMApplication
+
+ Finder
+
+ AMParameterProperties
+
+ newName
+
+ tokenizedValue
+
+ Mesquite_Support_Files
+
+
+ targetLocation
+
+ isPathPopUp
+
+ variableUUIDsInMenu
+
+
+
+ AMProvides
+
+ Container
+ List
+ Types
+
+ public.folder
+
+
+ ActionBundlePath
+ /System/Library/Automator/New Folder.action
+ ActionName
+ New Folder
+ ActionParameters
+
+ newName
+ Mesquite_Support_Files
+ targetLocation
+ ~
+
+ BundleIdentifier
+ com.apple.Automator.MakeNewFolder
+ CFBundleVersion
+ 1.2.2
+ CanShowSelectedItemsWhenRun
+
+ CanShowWhenRun
+
+ Category
+
+ AMCategoryFilesAndFolders
+
+ Class Name
+ NewFolderAction
+ IgnoresInput
+
+ InputUUID
+ 7F253106-A965-4ABC-97FD-1FD2D52366A4
+ Keywords
+
+ Folder
+ Create
+ Make
+ New
+
+ OutputUUID
+ 8EA1A9AF-B3C7-46F2-B605-CDBB38797DA9
+ UUID
+ 2528247D-5A8D-4ADD-9481-A0BC58FA668F
+ UnlocalizedApplications
+
+ Finder
+
+ arguments
+
+ 0
+
+ default value
+
+ name
+ newName
+ required
+ 0
+ type
+ 0
+ uuid
+ 0
+
+ 1
+
+ default value
+ ~/Desktop
+ name
+ targetLocation
+ required
+ 0
+ type
+ 0
+ uuid
+ 1
+
+
+ isViewVisible
+
+ location
+ 619.500000:152.000000
+ nibPath
+ /System/Library/Automator/New Folder.action/Contents/Resources/Base.lproj/main.nib
+
+ isViewVisible
+
+
+
+ action
+
+ AMAccepts
+
+ Container
+ List
+ Optional
+
+ Types
+
+ *
+
+
+ AMActionVersion
+ v.1.0.2
+ AMApplication
+
+ Automator
+
+ AMParameterProperties
+
+ variableUUID
+
+ isPathPopUp
+
+ selectedVariableUUID
+ B5724CA0-32E6-41E6-A92D-05F05ECF423A
+
+
+ AMProvides
+
+ Container
+ List
+ Types
+
+ *
+
+
+ AMRequiredResources
+
+ ActionBundlePath
+ /System/Library/Automator/Get Value of Variable.action
+ ActionName
+ Get Value of Variable
+ ActionParameters
+
+ variableUUID
+ B5724CA0-32E6-41E6-A92D-05F05ECF423A
+
+ BundleIdentifier
+ com.apple.Automator.GetValueofVariable
+ CFBundleVersion
+ 1.0.2
+ CanShowSelectedItemsWhenRun
+
+ CanShowWhenRun
+
+ Category
+
+ AMCategoryUtilities
+
+ Class Name
+ Get_Value_of_Variable
+ IgnoresInput
+
+ InputUUID
+ B3699B55-670C-4E04-8062-7A25776314F6
+ Keywords
+
+ variable
+ binding
+ input
+ output
+ storage
+
+ OutputUUID
+ 342F6FBC-A8B4-4AB8-8488-094942236BD7
+ UUID
+ 4F14C189-CB3E-41E7-989A-E209FB44368B
+ UnlocalizedApplications
+
+ Automator
+
+ arguments
+
+ 0
+
+ default value
+
+ name
+ variableUUID
+ required
+ 0
+ type
+ 0
+ uuid
+ 0
+
+
+ isViewVisible
+
+ location
+ 619.500000:193.000000
+ nibPath
+ /System/Library/Automator/Get Value of Variable.action/Contents/Resources/Base.lproj/main.nib
+
+ isViewVisible
+
+
+
+ action
+
+ AMAccepts
+
+ Container
+ List
+ Optional
+
+ Types
+
+ com.apple.applescript.object
+
+
+ AMActionVersion
+ 1.0.2
+ AMApplication
+
+ Automator
+
+ AMParameterProperties
+
+ source
+
+
+ AMProvides
+
+ Container
+ List
+ Types
+
+ com.apple.applescript.object
+
+
+ ActionBundlePath
+ /System/Library/Automator/Run AppleScript.action
+ ActionName
+ Run AppleScript
+ ActionParameters
+
+ source
+ on getPath(this_text, stripLast)
set AppleScript's text item delimiters to the ":"
set the item_list to every text item of this_text
set num to the number of items in item_list
if stripLast then
set lasti to num - 2
else
set lasti to num
end if
set the item_list to items 2 through lasti of item_list
set AppleScript's text item delimiters to the "/"
set this_text to the item_list as string
set AppleScript's text item delimiters to ""
set this_text to "/" & this_text
return this_text
end getPath
on run {input, parameters}
set whereAmI to getPath((path to me as text), true)
set javaLocFile to whereAmI & "/RunningOptionsForFlex/Mesquite-JavaToUse.txt"
set javaLoc to "java"
try
set lns to paragraphs of (read POSIX file javaLocFile)
set javaLoc to first item in lns
end try
set memoryFile to whereAmI & "/RunningOptionsForFlex/Mesquite-MemoryToUse.txt"
set memory to 1
try
set lns to paragraphs of (read POSIX file memoryFile)
set memory to first item in lns
end try
set flagsFile to whereAmI & "/RunningOptionsForFlex/Mesquite-FlagsToUse.txt"
set flags to ""
try
set lns to paragraphs of (read POSIX file flagsFile)
set flags to first item in lns
end try
#display dialog memory as text
set results to whereAmI
try
if input is not equal to {} then
set droppedFiles to getPath(input as text, false)
set results to results & ":" & droppedFiles
end if
end try
set results to javaLoc & ":" & flags & ":" &memory & ":" & results
return results
end run
+
+ BundleIdentifier
+ com.apple.Automator.RunScript
+ CFBundleVersion
+ 1.0.2
+ CanShowSelectedItemsWhenRun
+
+ CanShowWhenRun
+
+ Category
+
+ AMCategoryUtilities
+
+ Class Name
+ RunScriptAction
+ InputUUID
+ 11F3EFA2-BE3D-4DD3-A24A-AFC7373B06F3
+ Keywords
+
+ Run
+
+ OutputUUID
+ F42FD833-E0EE-4550-88BA-39A54F93799B
+ UUID
+ 35565B5A-57E2-4F76-B8E4-02CE4A8CD9B2
+ UnlocalizedApplications
+
+ Automator
+
+ arguments
+
+ 0
+
+ default value
+ on run {input, parameters}
+
+ (* Your script goes here *)
+
+ return input
+end run
+ name
+ source
+ required
+ 0
+ type
+ 0
+ uuid
+ 0
+
+
+ isViewVisible
+
+ location
+ 619.500000:438.000000
+ nibPath
+ /System/Library/Automator/Run AppleScript.action/Contents/Resources/Base.lproj/main.nib
+
+ isViewVisible
+
+
+
+ action
+
+ AMAccepts
+
+ Container
+ List
+ Optional
+
+ Types
+
+ com.apple.cocoa.string
+
+
+ AMActionVersion
+ 2.0.3
+ AMApplication
+
+ Automator
+
+ AMParameterProperties
+
+ COMMAND_STRING
+
+ CheckedForUserDefaultShell
+
+ inputMethod
+
+ shell
+
+ source
+
+
+ AMProvides
+
+ Container
+ List
+ Types
+
+ com.apple.cocoa.string
+
+
+ ActionBundlePath
+ /System/Library/Automator/Run Shell Script.action
+ ActionName
+ Run Shell Script
+ ActionParameters
+
+ COMMAND_STRING
+ read whereAndWhat #where is Mesquite Folder, and what are dropped files
+echo $whereAndWhat > Mesquite_Support_Files/Mesquite_Flex_INSTRUCTIONS.txt
+IFS=':' read -r -a arr <<< "$whereAndWhat"
+JAVALOC=${arr[0]}
+FLAGS=${arr[1]}
+MEMORY=${arr[2]}
+whereAmI=${arr[3]}
+if [[ ${#myvar} <1 ]]; #no flags passed in
+then
+ if [[ ${#arr[@]} > 4 ]];
+ then
+ droppedFiles=${arr[4]} #this gets just first file
+ "${JAVALOC}" --add-exports java.desktop/com.apple.eawt=ALL-UNNAMED -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" "$droppedFiles" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt || "${JAVALOC}" -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" "$droppedFiles" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt
+ else
+ "${JAVALOC}" --add-exports java.desktop/com.apple.eawt=ALL-UNNAMED -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt || "${JAVALOC}" -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt
+ fi
+else #flags passed in; use those
+ if [[ ${#arr[@]} > 4 ]];
+ then
+ droppedFiles=${arr[4]} #this gets just first file
+ "${JAVALOC}" ${FLAGS} -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" "$droppedFiles" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt
+ else
+ "${JAVALOC}" ${FLAGS} -Xmx${MEMORY}000M -Xss8m -Djava.library.path=lib -Djri.ignore.ule="yes" -jar "$whereAmI/Mesquite.jar" -mqflex > Mesquite_Support_Files/Mesquite_Flex_stdout.txt
+ fi
+fi
+ CheckedForUserDefaultShell
+
+ inputMethod
+ 0
+ shell
+ /bin/bash
+ source
+
+
+ BundleIdentifier
+ com.apple.RunShellScript
+ CFBundleVersion
+ 2.0.3
+ CanShowSelectedItemsWhenRun
+
+ CanShowWhenRun
+
+ Category
+
+ AMCategoryUtilities
+
+ Class Name
+ RunShellScriptAction
+ InputUUID
+ 7EFF0B18-2D72-45C5-9ED5-1550681238D5
+ Keywords
+
+ Shell
+ Script
+ Command
+ Run
+ Unix
+
+ OutputUUID
+ B0EFEE58-F461-4027-8168-126B947DC10A
+ UUID
+ 59BCA6EA-60BF-47F5-8C7B-221B6D2C77B9
+ UnlocalizedApplications
+
+ Automator
+
+ arguments
+
+ 0
+
+ default value
+ 0
+ name
+ inputMethod
+ required
+ 0
+ type
+ 0
+ uuid
+ 0
+
+ 1
+
+ default value
+
+ name
+ source
+ required
+ 0
+ type
+ 0
+ uuid
+ 1
+
+ 2
+
+ default value
+
+ name
+ CheckedForUserDefaultShell
+ required
+ 0
+ type
+ 0
+ uuid
+ 2
+
+ 3
+
+ default value
+
+ name
+ COMMAND_STRING
+ required
+ 0
+ type
+ 0
+ uuid
+ 3
+
+ 4
+
+ default value
+ /bin/sh
+ name
+ shell
+ required
+ 0
+ type
+ 0
+ uuid
+ 4
+
+
+ isViewVisible
+
+ location
+ 619.500000:1122.000000
+ nibPath
+ /System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib
+
+ isViewVisible
+
+
+
+ connectors
+
+ 399C77FB-0C53-4532-9B28-DBA63F886CE7
+
+ from
+ 35565B5A-57E2-4F76-B8E4-02CE4A8CD9B2 - 35565B5A-57E2-4F76-B8E4-02CE4A8CD9B2
+ to
+ 59BCA6EA-60BF-47F5-8C7B-221B6D2C77B9 - 59BCA6EA-60BF-47F5-8C7B-221B6D2C77B9
+
+ 8135E9E8-5924-4DFA-A6FD-BDBC382D5D95
+
+ from
+ 2528247D-5A8D-4ADD-9481-A0BC58FA668F - 2528247D-5A8D-4ADD-9481-A0BC58FA668F
+ to
+ 4F14C189-CB3E-41E7-989A-E209FB44368B - 4F14C189-CB3E-41E7-989A-E209FB44368B
+
+ E3C6E533-95E6-4726-B169-396BD2EE9AF2
+
+ from
+ 4F14C189-CB3E-41E7-989A-E209FB44368B - 4F14C189-CB3E-41E7-989A-E209FB44368B
+ to
+ 35565B5A-57E2-4F76-B8E4-02CE4A8CD9B2 - 35565B5A-57E2-4F76-B8E4-02CE4A8CD9B2
+
+ F8046E3E-C18C-4186-8DD4-A5B45DD64886
+
+ from
+ 4B07F06B-F2E4-49D5-8009-9C558FB1CD61 - 4B07F06B-F2E4-49D5-8009-9C558FB1CD61
+ to
+ 2528247D-5A8D-4ADD-9481-A0BC58FA668F - 2528247D-5A8D-4ADD-9481-A0BC58FA668F
+
+
+ variables
+
+
+ UUID
+ B5724CA0-32E6-41E6-A92D-05F05ECF423A
+ identifier
+ com.apple.Automator.Variable.Text
+ name
+ DroppedFiles
+ value
+
+
+
+ workflowMetaData
+
+ workflowTypeIdentifier
+ com.apple.Automator.application
+
+
+
diff --git a/Source/mesquite/Mesquite.java b/Source/mesquite/Mesquite.java
index ee3816663..d2a43983f 100644
--- a/Source/mesquite/Mesquite.java
+++ b/Source/mesquite/Mesquite.java
@@ -37,20 +37,20 @@ public class Mesquite extends MesquiteTrunk
{
/*.................................................................................................................*/
public String getCitation() {
- return "Maddison, W.P. & D.R. Maddison. 2023. Mesquite: A modular system for evolutionary analysis. Version 3.80. http://www.mesquiteproject.org";
+ return "Maddison, W.P. & D.R. Maddison. 2023. Mesquite: A modular system for evolutionary analysis. Version " + getVersion() + ". https://www.mesquiteproject.org";
}
/*.................................................................................................................*/
public String getVersion() {
- return "3.80";
+ return "3.81";
}
/*.................................................................................................................*/
public int getVersionInt() {
- return 380;
+ return 381;
}
/*.................................................................................................................*/
public double getMesquiteVersionNumber(){
- return 3.80;
+ return 3.81;
}
/*.................................................................................................................*/
public String getDateReleased() {
diff --git a/Source/mesquite/bayesian/lib/ExportForBEASTLib.java b/Source/mesquite/bayesian/lib/ExportForBEASTLib.java
index 224c79392..7ce644fc6 100644
--- a/Source/mesquite/bayesian/lib/ExportForBEASTLib.java
+++ b/Source/mesquite/bayesian/lib/ExportForBEASTLib.java
@@ -119,29 +119,9 @@ String nexusStringForSpecsSet(TaxaSelectionSet taxaSet, Taxa taxa, MesquiteFile
int lastWritten = -1;
for (int ic=0; ic0) {
- if (lastWritten != ic-1) {
- sT += " " + getTaxonName(taxa,ic-1);
- lastWritten = ic-1;
- }
- else
- lastWritten = -1;
- continuing = 0;
- }
-
}
- if (continuing>1)
- sT += " " + getTaxonName(taxa, taxa.getNumTaxa()-1);
if (!StringUtil.blank(sT)) {
s+= "\tTAXSET " ;
String set1 = s;
@@ -156,7 +136,7 @@ else if (continuing>0) {
return s;
}
/*.................................................................................................................*/
- public String getNexusCommands(MesquiteFile file, String blockName){
+ String getLocalNexusCommands(MesquiteFile file, String blockName){
String s= "";
String specSet ="";
for (int ids = 0; ids=0)
+ return getStateSymbol(ic, state);
+ return "";
+ }
+ /*.......................................... CategoricalData ..................................................*/
/** appends to buffer string describing the state(s) specified in the long array s. The first element in s is presumed (for the sake of state symbols
* and state names) to correspond to character ic. */
public void statesIntoStringBufferCore(int ic, long[] s, StringBuffer sb, boolean forDisplay, boolean includeInapplicable, boolean includeUnassigned){
diff --git a/Source/mesquite/dmanager/FlipTaxonLocus/FlipTaxonLocus.java b/Source/mesquite/dmanager/FlipTaxonLocus/FlipTaxonLocus.java
index 145f89fe7..71452ed9f 100644
--- a/Source/mesquite/dmanager/FlipTaxonLocus/FlipTaxonLocus.java
+++ b/Source/mesquite/dmanager/FlipTaxonLocus/FlipTaxonLocus.java
@@ -16,6 +16,7 @@
import java.io.File;
+import mesquite.externalCommunication.lib.PythonUtil;
import mesquite.lib.*;
import mesquite.lib.duties.GeneralFileMaker;
@@ -31,35 +32,35 @@ public boolean startJob(String arguments, Object condition, boolean hiredByName)
/*.................................................................................................................*/
public void processDirectory(String directoryPath) {
+ if (!PythonUtil.pythonAvailable())
+ PythonUtil.pythonSettings(this);
+ if (!PythonUtil.pythonAvailable())
+ return;
boolean success = false;
- MesquiteTimer timer = new MesquiteTimer();
- timer.start();
-
ProgressIndicator progressIndicator = new ProgressIndicator(getProject(), "Python script in progress");
progressIndicator.start();
- String pythonCodeFilePath = StringUtil.protectFilePathForCommandLine(getPath()+"flipTaxonLocustoLocusTaxon.py");
-// String pythonCodeFilePath = getPath()+"flipTaxonLocustoLocusTaxon.py";
-
- String pythonProgram = "python";
+ String pythonCommand = PythonUtil.python3Path;
+ String pythonOptions = StringUtil.protectFilePathForCommandLine(getPath()+"flipTaxonLocustoLocusTaxon.py");
- externalRunner = new ExternalProcessManager(this, directoryPath, pythonProgram, pythonCodeFilePath, getName(), null, null, null, true);
+ if (!PythonUtil.python3Available()) {
+ pythonCommand = PythonUtil.python2Path;
+ pythonOptions = StringUtil.protectFilePathForCommandLine(getPath()+"flipTaxonLocustoLocusTaxon2.py");
+ }
+
+ externalRunner = new ExternalProcessManager(this, directoryPath, pythonCommand, pythonOptions, getName(), null, null, null, true, true);
externalRunner.setStdOutFileName(ShellScriptRunner.stOutFileName);
- externalRunner.setRemoveQuotes(true);
success = externalRunner.executeInShell();
if (success)
success = externalRunner.monitorAndCleanUpShell(progressIndicator);
-
- if (progressIndicator.isAborted()){
+ if (progressIndicator.isAborted())
logln("Aborted by user\n");
- }
progressIndicator.goAway();
}
/*.................................................................................................................*/
public MesquiteProject establishProject(String arguments) {
- boolean success= false;
String directoryPath = MesquiteFile.chooseDirectory("Choose directory containing data files:", null);
if (StringUtil.blank(directoryPath))
return null;
@@ -76,13 +77,25 @@ public MesquiteProject establishProject(String arguments) {
/*.................................................................................................................*/
public boolean loadModule() {
- return false;
+ return true;
}
/*.................................................................................................................*/
public boolean isPrerelease() {
+ return false;
+ }
+ /*.................................................................................................................*/
+ public boolean isSubstantive() {
return true;
}
/*.................................................................................................................*/
+ /** returns the version number at which this module was first released. If 0, then no version number is claimed. If a POSITIVE integer
+ * then the number refers to the Mesquite version. This should be used only by modules part of the core release of Mesquite.
+ * If a NEGATIVE integer, then the number refers to the local version of the package, e.g. a third party package*/
+ public int getVersionOfFirstRelease(){
+ return 381;
+ }
+
+/*.................................................................................................................*/
public String getName() {
return "Flip Taxon x Locus to Locus x Taxon";
}
diff --git a/Source/mesquite/externalCommunication/lib/PythonUtil.java b/Source/mesquite/externalCommunication/lib/PythonUtil.java
new file mode 100644
index 000000000..0b135783e
--- /dev/null
+++ b/Source/mesquite/externalCommunication/lib/PythonUtil.java
@@ -0,0 +1,82 @@
+package mesquite.externalCommunication.lib;
+
+import mesquite.lib.*;
+
+public class PythonUtil {
+ public static String python2Path = "";
+ public static String python3Path = "";
+ public static int pythonPreference = 3;
+ public static int NOPYTHONPREFERENCE = 0;
+
+ public static boolean pythonSettings(MesquiteModule ownerModule) {
+ MesquiteInteger buttonPressed = new MesquiteInteger(ExtensibleDialog.defaultCANCEL);
+ ExtensibleDialog dialog = new ExtensibleDialog(ownerModule.containerOfModule(), "Python Settings",buttonPressed); //MesquiteTrunk.mesquiteTrunk.containerOfModule()
+ String s = "To find the path to Python 2, go in to the Terminal or Command Line, and type \"python2 -h\" and hit return. "
+ + "The response should include a line that begins with \"usage: \", then shows the full path to Python 2, then "
+ + "has \"[options]\"; the path is the text between \"usage\" and \"[options]\". Copy that text and paste it into the "
+ + "Python 2 path field. Then do the same for Python 3, this time using the command \"python3 -h\". ";
+ dialog.appendToHelpString(s);
+
+ dialog.addHorizontalLine(1);
+
+ SingleLineTextField python2PathField = dialog.addTextField("Python 2 path", python2Path, 50);
+ SingleLineTextField python3PathField = dialog.addTextField("Python 3 path", python3Path, 50);
+
+
+ dialog.completeAndShowDialog(true);
+ boolean success=(buttonPressed.getValue()== dialog.defaultOK);
+ if (success) {
+ python2Path = StringUtil.stripBoundingWhitespace(python2PathField.getText());
+ python3Path = StringUtil.stripBoundingWhitespace(python3PathField.getText());
+ MesquiteTrunk.mesquiteTrunk.storePreferences();
+ }
+ dialog.dispose();
+ return success;
+
+ }
+
+ public static String pythonVersion(MesquiteModule ownerModule, int version) {
+ if (version==2 || (version==0 && pythonPreference==2))
+ return ExternalProcessManager.executeAndGetStandardErr(ownerModule, getPythonPath(2), "-V");
+ else
+ return ExternalProcessManager.executeAndGetStandardOut(ownerModule, getPythonPath(3), "-V");
+ // String pythonVersionStOut= ExternalProcessManager.executeAndGetStandardErr(this, "python", "-V");
+ /* String raxmlng= ExternalProcessManager.executeAndGetStandardOut(this, "/usr/local/bin/raxml-ng", "-v");
+ logln("\nraxml-ng version: " + raxmlng);
+ String iqTreeV= ExternalProcessManager.executeAndGetStandardOut(this, "/usr/local/bin/iqtree2", "-V");
+ logln("\niq-tree version: " + iqTreeV);
+ */
+
+
+
+ /* scriptRunner = new ShellScriptRunner(scriptPath, runningFilePath, null, true, getName(), outputFilePaths, this, this, true); //scriptPath, runningFilePath, null, true, name, outputFilePaths, outputFileProcessor, watcher, true
+ success = scriptRunner.executeInShell();
+ if (success)
+ success = scriptRunner.monitorAndCleanUpShell(progressIndicator);
+ */
+
+ }
+
+ public static boolean python2Available() {
+ return StringUtil.notEmpty(python2Path);
+ }
+
+
+ public static boolean python3Available() {
+ return StringUtil.notEmpty(python3Path);
+ }
+
+ public static boolean pythonAvailable() {
+ return python2Available() || python3Available();
+ }
+
+ public static String getPythonPath(int version) {
+ if (version==3 || (version==0 && pythonPreference==3))
+ return python3Path;
+ else if (version==2 || (version==0 && pythonPreference==2))
+ return python2Path;
+ else
+ return python3Path;
+ }
+
+}
diff --git a/Source/mesquite/genomic/ExportTiledBaits/ExportTiledBaits.java b/Source/mesquite/genomic/ExportTiledBaits/ExportTiledBaits.java
new file mode 100644
index 000000000..7b59b80e9
--- /dev/null
+++ b/Source/mesquite/genomic/ExportTiledBaits/ExportTiledBaits.java
@@ -0,0 +1,318 @@
+package mesquite.genomic.ExportTiledBaits;
+
+import java.awt.Checkbox;
+
+import mesquite.categ.lib.*;
+import mesquite.lib.*;
+import mesquite.lib.characters.CharacterData;
+import mesquite.lib.duties.FileInterpreterI;
+import mesquite.molec.lib.MolecUtil;
+
+public class ExportTiledBaits extends FileInterpreterI {
+
+
+ public void getEmployeeNeeds(){ //This gets called on startup to harvest information; override this and inside, call registerEmployeeNeed
+ // EmployeeNeed e = registerEmployeeNeed(VoucherInfoCoord.class, "Voucher information is needed for FASTA export for Genbank submissions.",
+ // "This is activated automatically when you choose this exporter.");
+ }
+ /*.................................................................................................................*/
+ public boolean startJob(String arguments, Object condition, boolean hiredByName) {
+ loadPreferences();
+ return true;
+ }
+ public void readFile(MesquiteProject mf, MesquiteFile mNF, String arguments) {
+
+ }
+
+ /*.................................................................................................................*/
+ public boolean canImport() {
+ return false;
+ }
+ public boolean canImport(String arguments){
+ return false;
+ }
+ /** returns whether module is able ever to export.*/
+ public boolean canExportEver(){
+ return true;
+ }
+ /** returns whether module has something it can export in the project. Should be overridden*/
+ public boolean canExportProject(MesquiteProject project){
+ return project.getNumberCharMatrices(DNAState.class) > 0; //
+ }
+
+ /** returns whether module can export a character data matrix of the given type. Should be overridden*/
+ public boolean canExportData(Class dataClass){
+ if (dataClass==null) return false;
+ return ((DNAState.class).isAssignableFrom(dataClass));
+ }
+
+ protected int taxonNameLengthLimit() {
+ return 50;
+ }
+
+ /* ============================ exporting ============================*/
+ int baitLength = 120;
+ int tileAmount = 60;
+ boolean includeShortBaits = false;
+
+// boolean getEndBaitIfShiftedEnough = false;
+// int shiftThresholdForEndBait = 30;
+
+ boolean arbitrarilyResolveAmbiguity = false;
+ boolean randomlyChooseStateAsFallback = true;
+ boolean avoidStopCodons = true;
+
+ boolean preferencesSet=false;
+
+ /*.................................................................................................................*/
+ public void processSingleXMLPreference(String tag, String content) {
+ if ("baitLength".equalsIgnoreCase(tag))
+ baitLength = MesquiteInteger.fromString(content);
+ if ("tileAmount".equalsIgnoreCase(tag))
+ tileAmount = MesquiteInteger.fromString(content);
+
+ if ("arbitrarilyResolveAmbiguity".equalsIgnoreCase(tag))
+ arbitrarilyResolveAmbiguity = MesquiteBoolean.fromTrueFalseString(content);
+ if ("randomlyChooseStateAsFallback".equalsIgnoreCase(tag))
+ randomlyChooseStateAsFallback = MesquiteBoolean.fromTrueFalseString(content);
+ if ("avoidStopCodons".equalsIgnoreCase(tag))
+ avoidStopCodons = MesquiteBoolean.fromTrueFalseString(content);
+
+ preferencesSet = true;
+ }
+
+ /*.................................................................................................................*/
+ public String preparePreferencesForXML() {
+ StringBuffer buffer = new StringBuffer(200);
+ StringUtil.appendXMLTag(buffer, 2, "baitLength", baitLength);
+ StringUtil.appendXMLTag(buffer, 2, "tileAmount", tileAmount);
+
+ StringUtil.appendXMLTag(buffer, 2, "arbitrarilyResolveAmbiguity", arbitrarilyResolveAmbiguity);
+ StringUtil.appendXMLTag(buffer, 2, "randomlyChooseStateAsFallback", randomlyChooseStateAsFallback);
+ StringUtil.appendXMLTag(buffer, 2, "avoidStopCodons", avoidStopCodons);
+
+ preferencesSet = true;
+ return buffer.toString();
+ }
+
+ /*.................................................................................................................*/
+ public boolean getExportOptions(boolean dataSelected, boolean taxaSelected){
+ MesquiteInteger buttonPressed = new MesquiteInteger(1);
+ ExporterDialog exportDialog = new ExporterDialog(this,containerOfModule(), "Export Tiled Baits", buttonPressed);
+ exportDialog.setSuppressLineEndQuery(true);
+ exportDialog.setDefaultButton(null);
+ exportDialog.appendToHelpString("This will export a FASTA file containing sequences obtained from all matrices for all taxa (or only the selected taxa, if that option is chosen). "
+ + "For each sequence in the matrix, one more more sequences will be written into the FASTA file. If the sequence in the matrix is, say, 310 bases long, and the bait length is"
+ + " set to 120, with a tile amount of 60, then the first 120 nucleotides will be written as one sequence, then nucleotides 61-180, then 121-240, then 181-300. If "
+ + " \"include baits shorter than the specified bait length\" is chosen, then there will also be addition sequences written for sites 241-310, and 301-310. "
+ + " If there are ambiguous nucleotides contained in the file, these can be arbitrarily resolved. This feature is equivalent to the Resolve DNA Ambiguity feature in the Alter menu.");
+
+
+
+ IntegerField baitLengthField= exportDialog.addIntegerField("Bait length", baitLength, 8);
+ IntegerField tileAmountField= exportDialog.addIntegerField("Tile amount", tileAmount, 8);
+ Checkbox includeShortBaitsBox= exportDialog.addCheckBox("Include baits shorter than the specified bait length", includeShortBaits);
+
+ exportDialog.addHorizontalLine(1);
+
+ Checkbox arbitrarilyResolveAmbiguityBox = exportDialog.addCheckBox("Arbitrarily resolve ambiguities based upon other taxa's states", arbitrarilyResolveAmbiguity);
+ Checkbox randomlyChooseStateAsFallbackBox = exportDialog.addCheckBox("Randomly choose a contained state as fallback", randomlyChooseStateAsFallback);
+ Checkbox avoidStopCodonsBox = exportDialog.addCheckBox("Do not choose a state that would yield a stop codon", avoidStopCodons);
+
+ exportDialog.completeAndShowDialog(dataSelected, taxaSelected);
+
+ boolean ok = (exportDialog.query(dataSelected, taxaSelected)==0);
+
+ if (ok) {
+ if (baitLengthField.getValue()>10)
+ baitLength = baitLengthField.getValue();
+ if (tileAmountField.getValue()>10)
+ tileAmount = tileAmountField.getValue();
+ includeShortBaits = includeShortBaitsBox.getState();
+ randomlyChooseStateAsFallback = randomlyChooseStateAsFallbackBox.getState();
+ avoidStopCodons = avoidStopCodonsBox.getState();
+ arbitrarilyResolveAmbiguity = arbitrarilyResolveAmbiguityBox.getState();
+ storePreferences();
+ }
+
+ exportDialog.dispose();
+ return ok;
+ }
+ /*.................................................................................................................*/
+ public String preferredDataFileExtension() {
+ return "fas";
+ }
+
+ /*.................................................................................................................*/
+ public String getFileName(Taxa taxa, int it, CharacterData data, int index, String identifierString) {
+ String fileName = "";
+ fileName=StringUtil.cleanseStringOfFancyChars(taxa.getName(it),false,true);
+
+ fileName += ".fas";
+
+ return fileName;
+ }
+
+
+ /*.................................................................................................................*/
+ public String getSequenceName(DNAData data, Taxa taxa, int it) {
+ String s = data.getName() + ": " + taxa.getTaxonName(it);
+ return s;
+ }
+ /*.................................................................................................................*/
+ public String getTiledBaitAsFasta(DNAData data, Taxa taxa, int it, int icStart, int siteNumber, MesquiteInteger nextStart) {
+ int numTaxa = taxa.getNumTaxa();
+ int numChars = data.getNumChars();
+ StringBuffer outputBuffer = new StringBuffer(numTaxa*(20 + numChars));
+ outputBuffer.append(">"+ getSequenceName(data,taxa, it) + " " + siteNumber + "-");
+ StringBuffer dataBuffer = new StringBuffer(120);
+ int count = 0;
+ int ic =0;
+ boolean nextStartSet = false;
+ DNAState charState = new DNAState();
+ for (ic = icStart; ic=tileAmount && !nextStartSet) {
+ nextStart.setValue(ic);
+ nextStartSet = true;
+ }
+ }
+ }
+ if (!nextStartSet) // must mean we didn't actually have enough for the next tile
+ nextStart.setValue(numChars);
+ outputBuffer.append((siteNumber+count-1));
+ outputBuffer.append(StringUtil.lineEnding());
+ outputBuffer.append(dataBuffer);
+ outputBuffer.append(StringUtil.lineEnding());
+ if (count>=baitLength || includeShortBaits)
+ return outputBuffer.toString();
+ else
+ return "";
+ }
+ /*.................................................................................................................*/
+ public String getTiledBaitsAsFasta(DNAData data, Taxa taxa, int it) {
+ if (data.hasDataForTaxon(it)) {
+ int numTaxa = taxa.getNumTaxa();
+ int numChars = data.getNumChars();
+ StringBuffer outputBuffer = new StringBuffer(numTaxa*(20 + numChars));
+ int numSites = data.numNotInapplicableNotUnassigned(it);
+ int siteCounter=1;
+ int count = 0;
+ if (numSites>=baitLength || includeShortBaits) {
+ int icStart = 0;
+ MesquiteInteger nextStart = new MesquiteInteger(0);
+ while (icStart < numChars) {
+ if (!(includeShortBaits || icStart=1 && pos<=3) {
- codon[pos-1]=DNAState.makeSet(candidateState);
- int aminoAcid = CategoricalState.getOnlyElement(data.getAminoAcid(codon, genCode));
- if (aminoAcid==ProteinData.TER)
- return false;
- }
- }
- return true;
- }
+
/*.................................................................................................................*/
public void alterCell(CharacterData ddata, int ic, int it){
- DNAData data = (DNAData)ddata;
- if (data.isMultistateOrUncertainty(ic, it) || data.isUnassigned(ic, it)) {
- long state = data.getState(ic, it);
- int[] freq = new int[DNAState.maxDNAState+1];
- for (int i=0; i<=DNAState.maxDNAState; i++)
- freq[i]=0;
- Taxa taxa = data.getTaxa();
-
- for (int otherTaxa=0; otherTaxa=0) { // not multistate, not unassigned
- if (onlyState<=DNAState.maxDNAState && acceptableState(data,ic,it,onlyState,state))
- freq[onlyState]++;
- }
- }
- }
- int maxFreq =0;
- int maxFreqState = -1;
- for (int i=0; i<=DNAState.maxDNAState; i++) {
- if (freq[i]>maxFreq && acceptableState(data,ic,it,i,state)) { // check to see if is in original state set
- maxFreq=freq[i];
- maxFreqState = i;
- }
- }
- int stateToAssign = maxFreqState;
-
-
-
- if (maxFreqState<0 && randomlyChooseStateAsFallback) { // we didn't find it one of the states in the other taxa, so let's choose randomly
- int card = CategoricalState.cardinality(state);
- int resolve = (int)Math.round(Math.random()*card+0.5);
- int count=0;
- for (int e=0; e<=DNAState.maxDNAState; e++) {
- if (CategoricalState.isElement(state, e)) {
- count++;
- if (count>=resolve) {
- stateToAssign = e;
- break;
- }
- }
- }
- }
-
- if (stateToAssign>=0 && acceptableState(data,ic,it,stateToAssign,state)) {
- long newState = 0;
- newState = CategoricalState.addToSet(newState,stateToAssign);
- newState = charState.setUncertainty(newState, false);
- DNAState specifiedState = new DNAState(newState);
- data.setState(ic, it, specifiedState);
- if (!MesquiteLong.isCombinable(numCellsAltered))
- numCellsAltered=0;
- numCellsAltered++;
- } else
- logln("Warning! Ambiguity not resolved for taxon " + it + " and character " + ic);
-
-
+ if (MolecUtil.resolveAndAssignDNAAmbiguity(this, ddata, ic, it, charState, avoidStopCodons, randomlyChooseStateAsFallback, true)) {
+ if (!MesquiteLong.isCombinable(numCellsAltered))
+ numCellsAltered=0;
+ numCellsAltered++;
}
}
diff --git a/Source/mesquite/molec/lib/MolecUtil.java b/Source/mesquite/molec/lib/MolecUtil.java
new file mode 100644
index 000000000..a251cb88e
--- /dev/null
+++ b/Source/mesquite/molec/lib/MolecUtil.java
@@ -0,0 +1,102 @@
+package mesquite.molec.lib;
+
+import mesquite.categ.lib.CategoricalState;
+import mesquite.categ.lib.DNAData;
+import mesquite.categ.lib.DNAState;
+import mesquite.categ.lib.ProteinData;
+import mesquite.lib.MesquiteModule;
+import mesquite.lib.Taxa;
+import mesquite.lib.characters.CharacterData;
+
+public class MolecUtil {
+ /*.................................................................................................................*/
+ static boolean acceptableState(DNAData data, int ic, int it, int candidateState, long originalState, boolean avoidStopCodons) {
+ boolean inOriginalSet = CategoricalState.isElement(originalState, candidateState) || data.isUnassigned(ic, it);
+ if (!inOriginalSet)
+ return false;
+ if (avoidStopCodons && data.isCoding(ic)) {
+ GeneticCode genCode =data.getGeneticCode(ic);
+ int[] triplet = data.getCodonTriplet(ic);
+ long[] codon = data.getCodon(triplet,it);
+ int pos = data.getCodonPosition(ic);
+ if (pos>=1 && pos<=3) {
+ codon[pos-1]=DNAState.makeSet(candidateState);
+ int aminoAcid = CategoricalState.getOnlyElement(data.getAminoAcid(codon, genCode));
+ if (aminoAcid==ProteinData.TER)
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /*.................................................................................................................*/
+ public static int resolveDNAAmbiguity(MesquiteModule ownerModule, CharacterData ddata, int ic, int it, DNAState charState, boolean avoidStopCodons, boolean randomlyChooseStateAsFallback, boolean warn){
+ DNAData data = (DNAData)ddata;
+ if (data.isMultistateOrUncertainty(ic, it) || data.isUnassigned(ic, it)) {
+ long state = data.getState(ic, it);
+ int[] freq = new int[DNAState.maxDNAState+1];
+ for (int i=0; i<=DNAState.maxDNAState; i++)
+ freq[i]=0;
+ Taxa taxa = data.getTaxa();
+
+ for (int otherTaxa=0; otherTaxa=0) { // not multistate, not unassigned
+ if (onlyState<=DNAState.maxDNAState && acceptableState(data,ic,it,onlyState,state, avoidStopCodons))
+ freq[onlyState]++;
+ }
+ }
+ }
+ int maxFreq =0;
+ int maxFreqState = -1;
+ for (int i=0; i<=DNAState.maxDNAState; i++) {
+ if (freq[i]>maxFreq && acceptableState(data,ic,it,i,state, avoidStopCodons)) { // check to see if is in original state set
+ maxFreq=freq[i];
+ maxFreqState = i;
+ }
+ }
+ int stateToAssign = maxFreqState;
+
+
+
+ if (maxFreqState<0 && randomlyChooseStateAsFallback) { // we didn't find it one of the states in the other taxa, so let's choose randomly
+ int card = CategoricalState.cardinality(state);
+ int resolve = (int)Math.round(Math.random()*card+0.5);
+ int count=0;
+ for (int e=0; e<=DNAState.maxDNAState; e++) {
+ if (CategoricalState.isElement(state, e)) {
+ count++;
+ if (count>=resolve) {
+ stateToAssign = e;
+ break;
+ }
+ }
+ }
+ }
+
+ if (stateToAssign>=0 && acceptableState(data,ic,it,stateToAssign,state, avoidStopCodons)) {
+ return stateToAssign;
+ } else if (warn)
+ ownerModule.logln("Warning! Ambiguity not resolved for taxon " + it + " and character " + ic);
+
+
+ }
+ return -1;
+ }
+ /*.................................................................................................................*/
+ public static boolean resolveAndAssignDNAAmbiguity(MesquiteModule ownerModule, CharacterData ddata, int ic, int it, DNAState charState, boolean avoidStopCodons, boolean randomlyChooseStateAsFallback, boolean warn){
+ int stateToAssign = resolveDNAAmbiguity(ownerModule, ddata, ic, it, charState,avoidStopCodons,randomlyChooseStateAsFallback, warn);
+ if (stateToAssign>=0) {
+ long newState = 0;
+ newState = CategoricalState.addToSet(newState,stateToAssign);
+ newState = charState.setUncertainty(newState, false);
+ DNAState specifiedState = new DNAState(newState);
+ ddata.setState(ic, it, specifiedState);
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/docs/Acknowledgements.html b/docs/Acknowledgements.html
index bcb9a8d1c..88a6486f9 100644
--- a/docs/Acknowledgements.html
+++ b/docs/Acknowledgements.html
@@ -41,7 +41,7 @@
Mesquite |
Acknowledgements |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Additional Mesquite Packages.html b/docs/Additional Mesquite Packages.html
index 3245ac534..4b927fa08 100644
--- a/docs/Additional Mesquite Packages.html
+++ b/docs/Additional Mesquite Packages.html
@@ -41,7 +41,7 @@
Mesquite |
Additional Packages |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Align.html b/docs/Align.html
index 173d27cbc..5f6f2356e 100644
--- a/docs/Align.html
+++ b/docs/Align.html
@@ -41,7 +41,7 @@
Mesquite |
Sequence Alignment |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Analyzing Continuous Characters.html b/docs/Analyzing Continuous Characters.html
index eb80a9dba..afafa5902 100644
--- a/docs/Analyzing Continuous Characters.html
+++ b/docs/Analyzing Continuous Characters.html
@@ -41,7 +41,7 @@
Mesquite |
Continuous characters |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Analyzing Molecular Data.html b/docs/Analyzing Molecular Data.html
index 03aa6fee1..9968167c3 100644
--- a/docs/Analyzing Molecular Data.html
+++ b/docs/Analyzing Molecular Data.html
@@ -41,7 +41,7 @@
Mesquite |
Molecular Data |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Ancestral States.html b/docs/Ancestral States.html
index 949e0df7d..a80980f38 100644
--- a/docs/Ancestral States.html
+++ b/docs/Ancestral States.html
@@ -41,7 +41,7 @@
Mesquite |
Ancestral States |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Are strepsipterans related to flies.html b/docs/Are strepsipterans related to flies.html
index 9b20bb6e5..7a0774928 100644
--- a/docs/Are strepsipterans related to flies.html
+++ b/docs/Are strepsipterans related to flies.html
@@ -41,7 +41,7 @@
Mesquite |
Hypothesis testing |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Beginning Mesquite.html b/docs/Beginning Mesquite.html
index 267a38e96..97189a582 100644
--- a/docs/Beginning Mesquite.html
+++ b/docs/Beginning Mesquite.html
@@ -41,7 +41,7 @@
Mesquite |
Beginning Mesquite |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Bugs and Troubleshooting.html b/docs/Bugs and Troubleshooting.html
index 08d4018d7..257c9b0df 100644
--- a/docs/Bugs and Troubleshooting.html
+++ b/docs/Bugs and Troubleshooting.html
@@ -41,7 +41,7 @@
Mesquite |
Bugs and Troubleshooting |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Character Evolution.html b/docs/Character Evolution.html
index d18fae6a0..322df905b 100644
--- a/docs/Character Evolution.html
+++ b/docs/Character Evolution.html
@@ -41,7 +41,7 @@
Mesquite |
Character Evolution |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Characters & Matrices.html b/docs/Characters & Matrices.html
index 90538a349..65db32b68 100644
--- a/docs/Characters & Matrices.html
+++ b/docs/Characters & Matrices.html
@@ -41,7 +41,7 @@
Mesquite |
Characters & Matrices |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Charts.html b/docs/Charts.html
index f039ec56b..5993037de 100644
--- a/docs/Charts.html
+++ b/docs/Charts.html
@@ -41,7 +41,7 @@
Mesquite |
Charts |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Contact Us.html b/docs/Contact Us.html
index 01a636aad..39beffd22 100644
--- a/docs/Contact Us.html
+++ b/docs/Contact Us.html
@@ -41,7 +41,7 @@
Mesquite |
Contact Us |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Developers Documentation.html b/docs/Developers Documentation.html
index e2f1e552d..7fdaabc0d 100644
--- a/docs/Developers Documentation.html
+++ b/docs/Developers Documentation.html
@@ -41,7 +41,7 @@
Mesquite |
Developer's Documentation |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Developers Reference.html b/docs/Developers Reference.html
index ae32a57f9..cde5a95a1 100644
--- a/docs/Developers Reference.html
+++ b/docs/Developers Reference.html
@@ -41,7 +41,7 @@
Mesquite |
Developer's Reference |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Development Team.html b/docs/Development Team.html
index 8fee6ba86..c019b6e99 100644
--- a/docs/Development Team.html
+++ b/docs/Development Team.html
@@ -41,7 +41,7 @@
Mesquite |
Development Team |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Diversification.html b/docs/Diversification.html
index 1338aad46..8c63d075d 100644
--- a/docs/Diversification.html
+++ b/docs/Diversification.html
@@ -41,7 +41,7 @@
Mesquite |
Diversification |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Documenting Your Work.html b/docs/Documenting Your Work.html
index 8e1e6c4e8..5e6551ece 100644
--- a/docs/Documenting Your Work.html
+++ b/docs/Documenting Your Work.html
@@ -41,7 +41,7 @@
Mesquite |
Documenting Your Work |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Example Files.html b/docs/Example Files.html
index cb792ab91..e559cc2f0 100644
--- a/docs/Example Files.html
+++ b/docs/Example Files.html
@@ -41,7 +41,7 @@
Mesquite |
Example Files |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/FAQ.html b/docs/FAQ.html
index 6c03b350c..a475fa9ba 100644
--- a/docs/FAQ.html
+++ b/docs/FAQ.html
@@ -41,7 +41,7 @@
Mesquite |
FAQ |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Files.html b/docs/Files.html
index 03ff775bf..7e1a4ff34 100644
--- a/docs/Files.html
+++ b/docs/Files.html
@@ -41,7 +41,7 @@
Mesquite |
Files |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Gene Trees.html b/docs/Gene Trees.html
index ced026670..288f8eee1 100644
--- a/docs/Gene Trees.html
+++ b/docs/Gene Trees.html
@@ -41,7 +41,7 @@
Mesquite |
Gene Trees |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Getting Help.html b/docs/Getting Help.html
index b0b39290a..ee0c4f5c0 100644
--- a/docs/Getting Help.html
+++ b/docs/Getting Help.html
@@ -41,7 +41,7 @@
Mesquite |
Getting Help |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/Glossary.html b/docs/Glossary.html
index 371cd7b27..9af3ae4ad 100644
--- a/docs/Glossary.html
+++ b/docs/Glossary.html
@@ -41,7 +41,7 @@
Mesquite |
Glossary |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/History of Mesquite.html b/docs/History of Mesquite.html
index 77dcf09f6..5bd83ec17 100644
--- a/docs/History of Mesquite.html
+++ b/docs/History of Mesquite.html
@@ -41,7 +41,7 @@
Mesquite |
History of Mesquite |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/History of New Features.html b/docs/History of New Features.html
index dbbf2eaba..0c8ff7112 100644
--- a/docs/History of New Features.html
+++ b/docs/History of New Features.html
@@ -41,7 +41,7 @@
Mesquite |
History of New Features |
|
- Version 3.80
+ | Version 3.81
April 2023
|
@@ -206,8 +206,25 @@ release dates.
Features to come in the next release version of Mesquite are listed on this web page. These new features and bug fixes are already contained in latest source code in the development branch of the MesquiteProject/MesquiteCore repository on GitHub.
+ Next Release
+ New Features
+ Bug Fixes, Workarounds, and Improvements
-
+
+ Version 3.81
+ New Features
+
+ - Added Highlight Multistate Cells module (in the Display > Color Matrix Cells menu when the matrix is being displayed). This feature colors multistate cells (e.g., R or Y for DNA data) bright red and makes all non-multistate cells pale.
+ - Added Export Tiled Baits option (available in File > Export... for DNA data), which will export to a FASTA file tiled baits for probe sets for hybrid capture.
+ - Added Flip Locus X Taxon to Taxon X Locus to convert a directory of fasta files, each for a single taxon and listing all of its loci, to a directory of fasta files, each for a single lcous and listing the sequences for all of the taxa. This is useful for some genomic workflows, in combination with the exporter added to version 3.80, FASTA File for each taxon, with sequences from each matrix.
+
+ Bug Fixes, Workarounds, and Improvements
+
+ - Major problem that prevented Mesquite from starting up on various MacOS systems.
+ - Bug from version 3.80 whereby TAXSETS were inappropriately replicated has been fixed
+
+
+
Version 3.80
New Features
diff --git a/docs/How Mesquite Works.html b/docs/How Mesquite Works.html
index 88136075d..233c05c0f 100644
--- a/docs/How Mesquite Works.html
+++ b/docs/How Mesquite Works.html
@@ -41,7 +41,7 @@
Mesquite |
How Mesquite Works |
|
- Version 3.80
+ | Version 3.81
April 2023
|
diff --git a/docs/How to Cite Mesquite.html b/docs/How to Cite Mesquite.html
index 0826f3c00..db4506bc4 100644
--- a/docs/How to Cite Mesquite.html
+++ b/docs/How to Cite Mesquite.html
@@ -41,7 +41,7 @@
Mesquite |
How to Cite Mesquite |
|
- Version 3.80
+ | Version 3.81
April 2023
|
@@ -214,7 +214,7 @@